[
  {
    "path": ".editorconfig",
    "content": "# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with a newline ending every file\n[*]\nend_of_line = lf\ninsert_final_newline = true\nindent_style = tab\n"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "Contributing to Hazel!\n======================\n\nThanks for your interest in contributing to Hazel! :tada: We love getting [pull requests](https://www.quora.com/GitHub-What-is-a-pull-request) for bugfixes and contributions of our community to keep Hazel growing.\n\nWe want to keep it as easy as possible to contribute changes. These guidelines are intended to help smooth that process, and allow us to review and approve your changes quickly and easily. Improvements are always welcome! Feel free to [open an issue][issue-tracker] or [submit a new pull request][submit-pr]. And finally, these are just guidelines, not rules, so use your best judgement when necessary.\n\nIf you're new to [GitHub][github], you may want to begin with [Getting Started with GitHub](https://help.github.com/en/categories/getting-started-with-github) and Thinkful's [GitHub Pull Request Tutorial](https://www.thinkful.com/learn/github-pull-request-tutorial/).\n\n## Language\n\nAs TheCherno creates his videos about Hazel in English, the devs ask to keep the code base, issues and pull requests in English only.\nThanks for your understanding.\n\n## Reporting Bugs\n\nBugs should be reported on our [GitHub Issue Tracker][issue-tracker] using the bug report template.\n\nFollow the advice in [How do I ask a good question?][how-to-ask]. While the article is intended for people asking questions on Stack Overflow, it all applies to writing a good bug report too.\n\n## Requesting New Features\n\nFeature requests should also be sent to our [GitHub Issue Tracker][issue-tracker] using the feature request template.\n\n- Explain the problem that you're having, and anything you've tried to solve it using the currently available features.\n\n- Explain how this new feature will help.\n\n- If possible, provide an example, like a code snippet, showing what your new feature might look like in use.\n\nAlso, much of the advice in [How do I ask a good question?][how-to-ask] applies here too.\n\n## Contributing a Fix or Feature\n\nYou've created a new fix or feature for Hazel. Awesome!\n\n1. If you haven't already, create a fork of the Hazel repository.\n\n2. Create a topic branch, and make all of your changes on that branch.\n\n3. Submit a pull request, use the implemented issue template if it is based on an issue or the new issue template if it is not linked to any issue.\n\n4. Give us a moment. Hazel is maintained by only a few people, all of whom are doing this on their limited free time, so it may take us a bit to review your request. Bug fixes should be merged in directly, while features usually require Cherno's approval with or without it mentioned in one (or more) videos.\n\nIf you're not sure what any of that means, check out Thinkful's [GitHub Pull Request Tutorial][thinkful-pr-tutorial] for a complete walkthrough of the process.\n\n### Writing a Good Pull Request\n\n- Stay focused on a single fix or feature. If you submit multiple changes in a single request, we may like some but spot issues with others. When that happens, we have to reject the whole thing. If you submit each change in its own request it is easier for us to review and approve.\n\n- Limit your changes to only what is required to implement the fix or feature. In particular, avoid style or formatting tools that may modify the formatting of other areas of the code.\n\n- Use descriptive commit titles/messages. \"Implemented \\<feature\\>\" or \"Fixed \\<problem\\> is better than \"Updated \\<file\\>\".\n\n- Make sure the code you submit compiles and runs without issues. When we set up unit tests and continuous integration we also expect that the pull request should pass all tests.\n\n- Use [closing keywords][github-help-closing-keywords] in the appropriate section of our Pull Request template where applicable.\n\n- Follow our coding conventions, which we've intentionally kept quite minimal.\n\n### Coding Conventions\n\n- Naming convention:\n  - For functions we use pascal case: **`FunctionName`**.\n  - For (scoped) variables and function parameters we use camel case: **`variableName`** and **`parameterName`**.\n\n  - For class names we use pascal case: **`ClassName`**.\n\n  - For class variables we use the Hungarian notation:\n    - Class member variables get the 'm_' prefix: **`m_ClassMemberVariableName`**.\n    - Class static variables get the 's_' prefix: **`s_ClassStaticVariableName`**.\n\n  - For macros we use snake case: **`MACRO_NAME`**.\n    - If it is specifically related to Hazel, we add the 'HZ_' prefix: **`HZ_MACRO_NAME`**.\n    - If there is a macro for the application and for the engine, we add an additional 'CORE_' prefix to the engine macro:  **`HZ_CORE_MACRO_NAME`**.\n\n- Use tabs for indentation, not spaces.\n\n- When in doubt, match the code that's already there.\n\n\n\n[github]: https://github.com\n[how-to-ask]: https://stackoverflow.com/help/how-to-ask\n[issue-tracker]: https://github.com/TheCherno/Hazel/issues\n[submit-pr]: https://github.com/TheCherno/Hazel/pulls\n[thinkful-pr-tutorial]: https://www.thinkful.com/learn/github-pull-request-tutorial/\n[github-help-closing-keywords]: https://help.github.com/en/articles/closing-issues-using-keywords"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Hazel Community Support (Discord)\n    url: https://thecherno.com/discord\n    about: Please ask Hazel related questions in the game-engine-series thread.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/issue--bug-report.md",
    "content": "---\nname: 'Issue: Bug report'\nabout: Create a report to help us improve Hazel\n\n---\n\n#### Describe the bug\nA clear and concise description of what the bug is.\nA screenshot or copy of the error could be helpful as well.\n\nMake sure your bug can be reproduced with the Hazel Engine and not by your own engine that you're creating alongside with Hazel. For issues with your own engine, we're happy to help you in [TheCherno Discord server](https://thecherno.com/discord). Thanks for your understanding.\n\n#### To Reproduce\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error above\n\n#### Expected behavior\nA clear and concise description of what you expected to happen.\n\n#### Screenshots\nIf applicable, add extra screenshots to help explain your problem.\n\n#### Operating system: (please complete the following information)\n- OS: [e.g. win-64]\n- Version: [e.g. Windows 10 home]\n\n#### Additional context\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/issue--feature-request.md",
    "content": "---\nname: 'Issue: Feature request'\nabout: Suggest an idea/extension for Hazel\n\n---\n\n#### Is your feature request related to a problem? Please describe\nA clear and concise description of what the problem is, e.g. \"I'm always frustrated when [...]\"\n\n#### Describe the solution you'd like\nA clear and concise description of what you want to happen.\n\n#### Describe alternatives you've considered\nA clear and concise description of any alternative solutions or features you've considered.\n\n#### Additional context\nAdd any other context or screenshots about the feature request here. Any relevant information for platform specific features could be useful.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/other-issues--blank-template.md",
    "content": "---\nname: 'Other issues: Blank template'\nabout: For issues that are not a bug report or feature request\n\n---\n\nPlease consider using the Bug report or Feature request template. If it doesn't belong there, feel free to use this (empty) template. Make sure to provide enough details so it is clear for contributors to help you out. Premature or incomplete issues cannot be resolved due to lack of information or unclear descriptions.\n\nMake sure your issue can be reproduced with the Hazel Engine and not by your own engine that you're creating alongside with Hazel. For issues with your own engine, we're happy to help you in [TheCherno Discord server](https://thecherno.com/discord). Thanks for your understanding.\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "#### Describe the issue (if no issue has been made)\nA clear and concise description of what the issue is. Explain the difference between the expected and the current behavior.\nA screenshot or copy of the error could be helpful as well.\n\n#### PR impact _(Make sure to add [closing keywords](https://help.github.com/en/articles/closing-issues-using-keywords))_\nList of related issues/PRs this will solve:\n\n Impact                  | Issue/PR\n------------------------ | ------\nIssues this solves       | None or #number(s)\nOther PRs this solves    | None or #number(s)\n\n#### Proposed fix _(Make sure you've read [on how to contribute](https://github.com/TheCherno/Hazel/blob/master/.github/CONTRIBUTING.md) to Hazel)_\nA short description of what this fix is and how it fixed the issue you described.\n\n#### Additional context\nAdd any other context about the solution here. Did you test the solution on all (relevant) platforms?\nIf not, create a [task list](https://help.github.com/en/articles/about-task-lists) here.\n"
  },
  {
    "path": ".gitignore",
    "content": "# Binaries\n**/bin/\nbin-int/\nIntermediates/\n\n# Hazel files\n*.log\n\n# Visual Studio files and folder\n.vs/\n**.sln\n**.vcxproj\n**.vcxproj.filters\n**.vcxproj.user\n**.csproj\n\n# Directories\nHazel/vendor/VulkanSDK\nHazelnut/assets/cache\nscripts/__pycache__\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"Hazel/vendor/spdlog\"]\n\tpath = Hazel/vendor/spdlog\n\turl = ../../gabime/spdlog.git\n\tbranch = v1.x\n[submodule \"Hazel/vendor/GLFW\"]\n\tpath = Hazel/vendor/GLFW\n\turl = ../../TheCherno/glfw.git\n\tbranch = master\n[submodule \"Hazel/vendor/imgui\"]\n\tpath = Hazel/vendor/imgui\n\turl = ../../TheCherno/imgui.git\n\tbranch = docking\n[submodule \"Hazel/vendor/glm\"]\n\tpath = Hazel/vendor/glm\n\turl = ../../g-truc/glm.git\n\tbranch = master\n[submodule \"Hazel/vendor/yaml-cpp\"]\n\tpath = Hazel/vendor/yaml-cpp\n\turl = https://github.com/thecherno/yaml-cpp\n[submodule \"Hazel/vendor/ImGuizmo\"]\n\tpath = Hazel/vendor/ImGuizmo\n\turl = https://github.com/thecherno/imguizmo\n[submodule \"Hazel/vendor/Box2D\"]\n\tpath = Hazel/vendor/Box2D\n\turl = https://github.com/thecherno/box2d\n[submodule \"Hazel/vendor/msdf-atlas-gen\"]\n\tpath = Hazel/vendor/msdf-atlas-gen\n\turl = https://github.com/TheCherno/msdf-atlas-gen\n"
  },
  {
    "path": "Dependencies.lua",
    "content": "\n-- Hazel Dependencies\n\nVULKAN_SDK = os.getenv(\"VULKAN_SDK\")\n\nIncludeDir = {}\nIncludeDir[\"stb_image\"] = \"%{wks.location}/Hazel/vendor/stb_image\"\nIncludeDir[\"yaml_cpp\"] = \"%{wks.location}/Hazel/vendor/yaml-cpp/include\"\nIncludeDir[\"Box2D\"] = \"%{wks.location}/Hazel/vendor/Box2D/include\"\nIncludeDir[\"filewatch\"] = \"%{wks.location}/Hazel/vendor/filewatch\"\nIncludeDir[\"GLFW\"] = \"%{wks.location}/Hazel/vendor/GLFW/include\"\nIncludeDir[\"Glad\"] = \"%{wks.location}/Hazel/vendor/Glad/include\"\nIncludeDir[\"ImGui\"] = \"%{wks.location}/Hazel/vendor/ImGui\"\nIncludeDir[\"ImGuizmo\"] = \"%{wks.location}/Hazel/vendor/ImGuizmo\"\nIncludeDir[\"glm\"] = \"%{wks.location}/Hazel/vendor/glm\"\nIncludeDir[\"entt\"] = \"%{wks.location}/Hazel/vendor/entt/include\"\nIncludeDir[\"mono\"] = \"%{wks.location}/Hazel/vendor/mono/include\"\nIncludeDir[\"shaderc\"] = \"%{wks.location}/Hazel/vendor/shaderc/include\"\nIncludeDir[\"SPIRV_Cross\"] = \"%{wks.location}/Hazel/vendor/SPIRV-Cross\"\nIncludeDir[\"VulkanSDK\"] = \"%{VULKAN_SDK}/Include\"\nIncludeDir[\"msdfgen\"] = \"%{wks.location}/Hazel/vendor/msdf-atlas-gen/msdfgen\"\nIncludeDir[\"msdf_atlas_gen\"] = \"%{wks.location}/Hazel/vendor/msdf-atlas-gen/msdf-atlas-gen\"\n\nLibraryDir = {}\n\nLibraryDir[\"VulkanSDK\"] = \"%{VULKAN_SDK}/Lib\"\nLibraryDir[\"mono\"] = \"%{wks.location}/Hazel/vendor/mono/lib/%{cfg.buildcfg}\"\n\nLibrary = {}\nLibrary[\"mono\"] = \"%{LibraryDir.mono}/libmono-static-sgen.lib\"\n\nLibrary[\"Vulkan\"] = \"%{LibraryDir.VulkanSDK}/vulkan-1.lib\"\nLibrary[\"VulkanUtils\"] = \"%{LibraryDir.VulkanSDK}/VkLayer_utils.lib\"\n\nLibrary[\"ShaderC_Debug\"] = \"%{LibraryDir.VulkanSDK}/shaderc_sharedd.lib\"\nLibrary[\"SPIRV_Cross_Debug\"] = \"%{LibraryDir.VulkanSDK}/spirv-cross-cored.lib\"\nLibrary[\"SPIRV_Cross_GLSL_Debug\"] = \"%{LibraryDir.VulkanSDK}/spirv-cross-glsld.lib\"\nLibrary[\"SPIRV_Tools_Debug\"] = \"%{LibraryDir.VulkanSDK}/SPIRV-Toolsd.lib\"\n\nLibrary[\"ShaderC_Release\"] = \"%{LibraryDir.VulkanSDK}/shaderc_shared.lib\"\nLibrary[\"SPIRV_Cross_Release\"] = \"%{LibraryDir.VulkanSDK}/spirv-cross-core.lib\"\nLibrary[\"SPIRV_Cross_GLSL_Release\"] = \"%{LibraryDir.VulkanSDK}/spirv-cross-glsl.lib\"\n\n-- Windows\nLibrary[\"WinSock\"] = \"Ws2_32.lib\"\nLibrary[\"WinMM\"] = \"Winmm.lib\"\nLibrary[\"WinVersion\"] = \"Version.lib\"\nLibrary[\"BCrypt\"] = \"Bcrypt.lib\"\n"
  },
  {
    "path": "Hazel/premake5.lua",
    "content": "project \"Hazel\"\n\tkind \"StaticLib\"\n\tlanguage \"C++\"\n\tcppdialect \"C++17\"\n\tstaticruntime \"off\"\n\n\ttargetdir (\"%{wks.location}/bin/\" .. outputdir .. \"/%{prj.name}\")\n\tobjdir (\"%{wks.location}/bin-int/\" .. outputdir .. \"/%{prj.name}\")\n\n\tpchheader \"hzpch.h\"\n\tpchsource \"src/hzpch.cpp\"\n\n\tfiles\n\t{\n\t\t\"src/**.h\",\n\t\t\"src/**.cpp\",\n\t\t\"vendor/stb_image/**.h\",\n\t\t\"vendor/stb_image/**.cpp\",\n\t\t\"vendor/glm/glm/**.hpp\",\n\t\t\"vendor/glm/glm/**.inl\",\n\n\t\t\"vendor/ImGuizmo/ImGuizmo.h\",\n\t\t\"vendor/ImGuizmo/ImGuizmo.cpp\"\n\t}\n\n\tdefines\n\t{\n\t\t\"_CRT_SECURE_NO_WARNINGS\",\n\t\t\"GLFW_INCLUDE_NONE\"\n\t}\n\n\tincludedirs\n\t{\n\t\t\"src\",\n\t\t\"vendor/spdlog/include\",\n\t\t\"%{IncludeDir.Box2D}\",\n\t\t\"%{IncludeDir.filewatch}\",\n\t\t\"%{IncludeDir.GLFW}\",\n\t\t\"%{IncludeDir.Glad}\",\n\t\t\"%{IncludeDir.ImGui}\",\n\t\t\"%{IncludeDir.glm}\",\n\t\t\"%{IncludeDir.msdfgen}\",\n\t\t\"%{IncludeDir.msdf_atlas_gen}\",\n\t\t\"%{IncludeDir.stb_image}\",\n\t\t\"%{IncludeDir.entt}\",\n\t\t\"%{IncludeDir.mono}\",\n\t\t\"%{IncludeDir.yaml_cpp}\",\n\t\t\"%{IncludeDir.ImGuizmo}\",\n\t\t\"%{IncludeDir.VulkanSDK}\"\n\t}\n\n\tlinks\n\t{\n\t\t\"Box2D\",\n\t\t\"GLFW\",\n\t\t\"Glad\",\n\t\t\"ImGui\",\n\t\t\"msdf-atlas-gen\",\n\t\t\"yaml-cpp\",\n\t\t\"opengl32.lib\",\n\n\t\t\"%{Library.mono}\",\n\t}\n\n\tfilter \"files:vendor/ImGuizmo/**.cpp\"\n\tflags { \"NoPCH\" }\n\n\tfilter \"system:windows\"\n\t\tsystemversion \"latest\"\n\n\t\tdefines\n\t\t{\n\t\t}\n\n\t\tlinks\n\t\t{\n\t\t\t\"%{Library.WinSock}\",\n\t\t\t\"%{Library.WinMM}\",\n\t\t\t\"%{Library.WinVersion}\",\n\t\t\t\"%{Library.BCrypt}\",\n\t\t}\n\n\tfilter \"configurations:Debug\"\n\t\tdefines \"HZ_DEBUG\"\n\t\truntime \"Debug\"\n\t\tsymbols \"on\"\n\n\t\tlinks\n\t\t{\n\t\t\t\"%{Library.ShaderC_Debug}\",\n\t\t\t\"%{Library.SPIRV_Cross_Debug}\",\n\t\t\t\"%{Library.SPIRV_Cross_GLSL_Debug}\"\n\t\t}\n\n\tfilter \"configurations:Release\"\n\t\tdefines \"HZ_RELEASE\"\n\t\truntime \"Release\"\n\t\toptimize \"on\"\n\n\t\tlinks\n\t\t{\n\t\t\t\"%{Library.ShaderC_Release}\",\n\t\t\t\"%{Library.SPIRV_Cross_Release}\",\n\t\t\t\"%{Library.SPIRV_Cross_GLSL_Release}\"\n\t\t}\n\n\tfilter \"configurations:Dist\"\n\t\tdefines \"HZ_DIST\"\n\t\truntime \"Release\"\n\t\toptimize \"on\"\n\n\t\tlinks\n\t\t{\n\t\t\t\"%{Library.ShaderC_Release}\",\n\t\t\t\"%{Library.SPIRV_Cross_Release}\",\n\t\t\t\"%{Library.SPIRV_Cross_GLSL_Release}\"\n\t\t}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Application.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Core/Application.h\"\n\n#include \"Hazel/Core/Log.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Hazel/Scripting/ScriptEngine.h\"\n\n#include \"Hazel/Core/Input.h\"\n#include \"Hazel/Utils/PlatformUtils.h\"\n\nnamespace Hazel {\n\n\tApplication* Application::s_Instance = nullptr;\n\n\tApplication::Application(const ApplicationSpecification& specification)\n\t\t: m_Specification(specification)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tHZ_CORE_ASSERT(!s_Instance, \"Application already exists!\");\n\t\ts_Instance = this;\n\n\t\t// Set working directory here\n\t\tif (!m_Specification.WorkingDirectory.empty())\n\t\t\tstd::filesystem::current_path(m_Specification.WorkingDirectory);\n\n\t\tm_Window = Window::Create(WindowProps(m_Specification.Name));\n\t\tm_Window->SetEventCallback(HZ_BIND_EVENT_FN(Application::OnEvent));\n\n\t\tRenderer::Init();\n\n\t\tm_ImGuiLayer = new ImGuiLayer();\n\t\tPushOverlay(m_ImGuiLayer);\n\t}\n\n\tApplication::~Application()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tScriptEngine::Shutdown();\n\t\tRenderer::Shutdown();\n\t}\n\n\tvoid Application::PushLayer(Layer* layer)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_LayerStack.PushLayer(layer);\n\t\tlayer->OnAttach();\n\t}\n\n\tvoid Application::PushOverlay(Layer* layer)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_LayerStack.PushOverlay(layer);\n\t\tlayer->OnAttach();\n\t}\n\n\tvoid Application::Close()\n\t{\n\t\tm_Running = false;\n\t}\n\n\tvoid Application::SubmitToMainThread(const std::function<void()>& function)\n\t{\n\t\tstd::scoped_lock<std::mutex> lock(m_MainThreadQueueMutex);\n\n\t\tm_MainThreadQueue.emplace_back(function);\n\t}\n\n\tvoid Application::OnEvent(Event& e)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tEventDispatcher dispatcher(e);\n\t\tdispatcher.Dispatch<WindowCloseEvent>(HZ_BIND_EVENT_FN(Application::OnWindowClose));\n\t\tdispatcher.Dispatch<WindowResizeEvent>(HZ_BIND_EVENT_FN(Application::OnWindowResize));\n\n\t\tfor (auto it = m_LayerStack.rbegin(); it != m_LayerStack.rend(); ++it)\n\t\t{\n\t\t\tif (e.Handled) \n\t\t\t\tbreak;\n\t\t\t(*it)->OnEvent(e);\n\t\t}\n\t}\n\n\tvoid Application::Run()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\twhile (m_Running)\n\t\t{\n\t\t\tHZ_PROFILE_SCOPE(\"RunLoop\");\n\n\t\t\tfloat time = Time::GetTime();\n\t\t\tTimestep timestep = time - m_LastFrameTime;\n\t\t\tm_LastFrameTime = time;\n\n\t\t\tExecuteMainThreadQueue();\n\n\t\t\tif (!m_Minimized)\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tHZ_PROFILE_SCOPE(\"LayerStack OnUpdate\");\n\n\t\t\t\t\tfor (Layer* layer : m_LayerStack)\n\t\t\t\t\t\tlayer->OnUpdate(timestep);\n\t\t\t\t}\n\n\t\t\t\tm_ImGuiLayer->Begin();\n\t\t\t\t{\n\t\t\t\t\tHZ_PROFILE_SCOPE(\"LayerStack OnImGuiRender\");\n\n\t\t\t\t\tfor (Layer* layer : m_LayerStack)\n\t\t\t\t\t\tlayer->OnImGuiRender();\n\t\t\t\t}\n\t\t\t\tm_ImGuiLayer->End();\n\t\t\t}\n\n\t\t\tm_Window->OnUpdate();\n\t\t}\n\t}\n\n\tbool Application::OnWindowClose(WindowCloseEvent& e)\n\t{\n\t\tm_Running = false;\n\t\treturn true;\n\t}\n\n\tbool Application::OnWindowResize(WindowResizeEvent& e)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tif (e.GetWidth() == 0 || e.GetHeight() == 0)\n\t\t{\n\t\t\tm_Minimized = true;\n\t\t\treturn false;\n\t\t}\n\n\t\tm_Minimized = false;\n\t\tRenderer::OnWindowResize(e.GetWidth(), e.GetHeight());\n\n\t\treturn false;\n\t}\n\n\tvoid Application::ExecuteMainThreadQueue()\n\t{\n\t\tstd::scoped_lock<std::mutex> lock(m_MainThreadQueueMutex);\n\n\t\tfor (auto& func : m_MainThreadQueue)\n\t\t\tfunc();\n\n\t\tm_MainThreadQueue.clear();\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Application.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n\n#include \"Hazel/Core/Window.h\"\n#include \"Hazel/Core/LayerStack.h\"\n#include \"Hazel/Events/Event.h\"\n#include \"Hazel/Events/ApplicationEvent.h\"\n\n#include \"Hazel/Core/Timestep.h\"\n\n#include \"Hazel/ImGui/ImGuiLayer.h\"\n\nint main(int argc, char** argv);\n\nnamespace Hazel {\n\n\tstruct ApplicationCommandLineArgs\n\t{\n\t\tint Count = 0;\n\t\tchar** Args = nullptr;\n\n\t\tconst char* operator[](int index) const\n\t\t{\n\t\t\tHZ_CORE_ASSERT(index < Count);\n\t\t\treturn Args[index];\n\t\t}\n\t};\n\n\tstruct ApplicationSpecification\n\t{\n\t\tstd::string Name = \"Hazel Application\";\n\t\tstd::string WorkingDirectory;\n\t\tApplicationCommandLineArgs CommandLineArgs;\n\t};\n\n\tclass Application\n\t{\n\tpublic:\n\t\tApplication(const ApplicationSpecification& specification);\n\t\tvirtual ~Application();\n\n\t\tvoid OnEvent(Event& e);\n\n\t\tvoid PushLayer(Layer* layer);\n\t\tvoid PushOverlay(Layer* layer);\n\n\t\tWindow& GetWindow() { return *m_Window; }\n\n\t\tvoid Close();\n\n\t\tImGuiLayer* GetImGuiLayer() { return m_ImGuiLayer; }\n\n\t\tstatic Application& Get() { return *s_Instance; }\n\n\t\tconst ApplicationSpecification& GetSpecification() const { return m_Specification; }\n\n\t\tvoid SubmitToMainThread(const std::function<void()>& function);\n\tprivate:\n\t\tvoid Run();\n\t\tbool OnWindowClose(WindowCloseEvent& e);\n\t\tbool OnWindowResize(WindowResizeEvent& e);\n\n\t\tvoid ExecuteMainThreadQueue();\n\tprivate:\n\t\tApplicationSpecification m_Specification;\n\t\tScope<Window> m_Window;\n\t\tImGuiLayer* m_ImGuiLayer;\n\t\tbool m_Running = true;\n\t\tbool m_Minimized = false;\n\t\tLayerStack m_LayerStack;\n\t\tfloat m_LastFrameTime = 0.0f;\n\n\t\tstd::vector<std::function<void()>> m_MainThreadQueue;\n\t\tstd::mutex m_MainThreadQueueMutex;\n\tprivate:\n\t\tstatic Application* s_Instance;\n\t\tfriend int ::main(int argc, char** argv);\n\t};\n\n\t// To be defined in CLIENT\n\tApplication* CreateApplication(ApplicationCommandLineArgs args);\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Assert.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Core/Log.h\"\n#include <filesystem>\n\n#ifdef HZ_ENABLE_ASSERTS\n\n\t// Alteratively we could use the same \"default\" message for both \"WITH_MSG\" and \"NO_MSG\" and\n\t// provide support for custom formatting by concatenating the formatting string instead of having the format inside the default message\n\t#define HZ_INTERNAL_ASSERT_IMPL(type, check, msg, ...) { if(!(check)) { HZ##type##ERROR(msg, __VA_ARGS__); HZ_DEBUGBREAK(); } }\n\t#define HZ_INTERNAL_ASSERT_WITH_MSG(type, check, ...) HZ_INTERNAL_ASSERT_IMPL(type, check, \"Assertion failed: {0}\", __VA_ARGS__)\n\t#define HZ_INTERNAL_ASSERT_NO_MSG(type, check) HZ_INTERNAL_ASSERT_IMPL(type, check, \"Assertion '{0}' failed at {1}:{2}\", HZ_STRINGIFY_MACRO(check), std::filesystem::path(__FILE__).filename().string(), __LINE__)\n\n\t#define HZ_INTERNAL_ASSERT_GET_MACRO_NAME(arg1, arg2, macro, ...) macro\n\t#define HZ_INTERNAL_ASSERT_GET_MACRO(...) HZ_EXPAND_MACRO( HZ_INTERNAL_ASSERT_GET_MACRO_NAME(__VA_ARGS__, HZ_INTERNAL_ASSERT_WITH_MSG, HZ_INTERNAL_ASSERT_NO_MSG) )\n\n\t// Currently accepts at least the condition and one additional parameter (the message) being optional\n\t#define HZ_ASSERT(...) HZ_EXPAND_MACRO( HZ_INTERNAL_ASSERT_GET_MACRO(__VA_ARGS__)(_, __VA_ARGS__) )\n\t#define HZ_CORE_ASSERT(...) HZ_EXPAND_MACRO( HZ_INTERNAL_ASSERT_GET_MACRO(__VA_ARGS__)(_CORE_, __VA_ARGS__) )\n#else\n\t#define HZ_ASSERT(...)\n\t#define HZ_CORE_ASSERT(...)\n#endif\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Base.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/PlatformDetection.h\"\n\n#include <memory>\n\n#ifdef HZ_DEBUG\n\t#if defined(HZ_PLATFORM_WINDOWS)\n\t\t#define HZ_DEBUGBREAK() __debugbreak()\n\t#elif defined(HZ_PLATFORM_LINUX)\n\t\t#include <signal.h>\n\t\t#define HZ_DEBUGBREAK() raise(SIGTRAP)\n\t#else\n\t\t#error \"Platform doesn't support debugbreak yet!\"\n\t#endif\n\t#define HZ_ENABLE_ASSERTS\n#else\n\t#define HZ_DEBUGBREAK()\n#endif\n\n#define HZ_EXPAND_MACRO(x) x\n#define HZ_STRINGIFY_MACRO(x) #x\n\n#define BIT(x) (1 << x)\n\n#define HZ_BIND_EVENT_FN(fn) [this](auto&&... args) -> decltype(auto) { return this->fn(std::forward<decltype(args)>(args)...); }\n\nnamespace Hazel {\n\n\ttemplate<typename T>\n\tusing Scope = std::unique_ptr<T>;\n\ttemplate<typename T, typename ... Args>\n\tconstexpr Scope<T> CreateScope(Args&& ... args)\n\t{\n\t\treturn std::make_unique<T>(std::forward<Args>(args)...);\n\t}\n\n\ttemplate<typename T>\n\tusing Ref = std::shared_ptr<T>;\n\ttemplate<typename T, typename ... Args>\n\tconstexpr Ref<T> CreateRef(Args&& ... args)\n\t{\n\t\treturn std::make_shared<T>(std::forward<Args>(args)...);\n\t}\n\n}\n\n#include \"Hazel/Core/Log.h\"\n#include \"Hazel/Core/Assert.h\"\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Buffer.h",
    "content": "#pragma once\n\n#include <stdint.h>\n#include <cstring>\n\nnamespace Hazel {\n\n\t// Non-owning raw buffer class\n\tstruct Buffer\n\t{\n\t\tuint8_t* Data = nullptr;\n\t\tuint64_t Size = 0;\n\n\t\tBuffer() = default;\n\n\t\tBuffer(uint64_t size)\n\t\t{\n\t\t\tAllocate(size);\n\t\t}\n\n\t\tBuffer(const Buffer&) = default;\n\n\t\tstatic Buffer Copy(Buffer other)\n\t\t{\n\t\t\tBuffer result(other.Size);\n\t\t\tmemcpy(result.Data, other.Data, other.Size);\n\t\t\treturn result;\n\t\t}\n\n\t\tvoid Allocate(uint64_t size)\n\t\t{\n\t\t\tRelease();\n\n\t\t\tData = new uint8_t[size];\n\t\t\tSize = size;\n\t\t}\n\n\t\tvoid Release()\n\t\t{\n\t\t\tdelete[] Data;\n\t\t\tData = nullptr;\n\t\t\tSize = 0;\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tT* As()\n\t\t{\n\t\t\treturn (T*)Data;\n\t\t}\n\n\t\toperator bool() const\n\t\t{\n\t\t\treturn (bool)Data;\n\t\t}\n\n\t};\n\n\tstruct ScopedBuffer\n\t{\n\t\tScopedBuffer(Buffer buffer)\n\t\t\t: m_Buffer(buffer)\n\t\t{\n\t\t}\n\n\t\tScopedBuffer(uint64_t size)\n\t\t\t: m_Buffer(size)\n\t\t{\n\t\t}\n\n\t\t~ScopedBuffer()\n\t\t{\n\t\t\tm_Buffer.Release();\n\t\t}\n\n\t\tuint8_t* Data() { return m_Buffer.Data; }\n\t\tuint64_t Size() { return m_Buffer.Size; }\n\n\t\ttemplate<typename T>\n\t\tT* As()\n\t\t{\n\t\t\treturn m_Buffer.As<T>();\n\t\t}\n\n\t\toperator bool() const { return m_Buffer; }\n\tprivate:\n\t\tBuffer m_Buffer;\n\t};\n\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/EntryPoint.h",
    "content": "#pragma once\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Core/Application.h\"\n\n#ifdef HZ_PLATFORM_WINDOWS\n\nextern Hazel::Application* Hazel::CreateApplication(ApplicationCommandLineArgs args);\n\nint main(int argc, char** argv)\n{\n\tHazel::Log::Init();\n\n\tHZ_PROFILE_BEGIN_SESSION(\"Startup\", \"HazelProfile-Startup.json\");\n\tauto app = Hazel::CreateApplication({ argc, argv });\n\tHZ_PROFILE_END_SESSION();\n\n\tHZ_PROFILE_BEGIN_SESSION(\"Runtime\", \"HazelProfile-Runtime.json\");\n\tapp->Run();\n\tHZ_PROFILE_END_SESSION();\n\n\tHZ_PROFILE_BEGIN_SESSION(\"Shutdown\", \"HazelProfile-Shutdown.json\");\n\tdelete app;\n\tHZ_PROFILE_END_SESSION();\n}\n\n#endif\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/FileSystem.cpp",
    "content": "#include \"hzpch.h\"\n#include \"FileSystem.h\"\n\nnamespace Hazel {\n\n\tBuffer FileSystem::ReadFileBinary(const std::filesystem::path& filepath)\n\t{\n\t\tstd::ifstream stream(filepath, std::ios::binary | std::ios::ate);\n\n\t\tif (!stream)\n\t\t{\n\t\t\t// Failed to open the file\n\t\t\treturn {};\n\t\t}\n\n\n\t\tstd::streampos end = stream.tellg();\n\t\tstream.seekg(0, std::ios::beg);\n\t\tuint64_t size = end - stream.tellg();\n\n\t\tif (size == 0)\n\t\t{\n\t\t\t// File is empty\n\t\t\treturn {};\n\t\t}\n\n\t\tBuffer buffer(size);\n\t\tstream.read(buffer.As<char>(), size);\n\t\tstream.close();\n\t\treturn buffer;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/FileSystem.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Buffer.h\"\n\nnamespace Hazel {\n\n\tclass FileSystem\n\t{\n\tpublic:\n\t\t// TODO: move to FileSystem class\n\t\tstatic Buffer ReadFileBinary(const std::filesystem::path& filepath);\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Input.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/KeyCodes.h\"\n#include \"Hazel/Core/MouseCodes.h\"\n\n#include <glm/glm.hpp>\n\nnamespace Hazel {\n\n\tclass Input\n\t{\n\tpublic:\n\t\tstatic bool IsKeyPressed(KeyCode key);\n\n\t\tstatic bool IsMouseButtonPressed(MouseCode button);\n\t\tstatic glm::vec2 GetMousePosition();\n\t\tstatic float GetMouseX();\n\t\tstatic float GetMouseY();\n\t};\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/KeyCodes.h",
    "content": "#pragma once\n\nnamespace Hazel\n{\n\tusing KeyCode = uint16_t;\n\t\n\tnamespace Key\n\t{\n\t\tenum : KeyCode\n\t\t{\n\t\t\t// From glfw3.h\n\t\t\tSpace               = 32,\n\t\t\tApostrophe          = 39, /* ' */\n\t\t\tComma               = 44, /* , */\n\t\t\tMinus               = 45, /* - */\n\t\t\tPeriod              = 46, /* . */\n\t\t\tSlash               = 47, /* / */\n\n\t\t\tD0                  = 48, /* 0 */\n\t\t\tD1                  = 49, /* 1 */\n\t\t\tD2                  = 50, /* 2 */\n\t\t\tD3                  = 51, /* 3 */\n\t\t\tD4                  = 52, /* 4 */\n\t\t\tD5                  = 53, /* 5 */\n\t\t\tD6                  = 54, /* 6 */\n\t\t\tD7                  = 55, /* 7 */\n\t\t\tD8                  = 56, /* 8 */\n\t\t\tD9                  = 57, /* 9 */\n\n\t\t\tSemicolon           = 59, /* ; */\n\t\t\tEqual               = 61, /* = */\n\n\t\t\tA                   = 65,\n\t\t\tB                   = 66,\n\t\t\tC                   = 67,\n\t\t\tD                   = 68,\n\t\t\tE                   = 69,\n\t\t\tF                   = 70,\n\t\t\tG                   = 71,\n\t\t\tH                   = 72,\n\t\t\tI                   = 73,\n\t\t\tJ                   = 74,\n\t\t\tK                   = 75,\n\t\t\tL                   = 76,\n\t\t\tM                   = 77,\n\t\t\tN                   = 78,\n\t\t\tO                   = 79,\n\t\t\tP                   = 80,\n\t\t\tQ                   = 81,\n\t\t\tR                   = 82,\n\t\t\tS                   = 83,\n\t\t\tT                   = 84,\n\t\t\tU                   = 85,\n\t\t\tV                   = 86,\n\t\t\tW                   = 87,\n\t\t\tX                   = 88,\n\t\t\tY                   = 89,\n\t\t\tZ                   = 90,\n\n\t\t\tLeftBracket         = 91,  /* [ */\n\t\t\tBackslash           = 92,  /* \\ */\n\t\t\tRightBracket        = 93,  /* ] */\n\t\t\tGraveAccent         = 96,  /* ` */\n\n\t\t\tWorld1              = 161, /* non-US #1 */\n\t\t\tWorld2              = 162, /* non-US #2 */\n\n\t\t\t/* Function keys */\n\t\t\tEscape              = 256,\n\t\t\tEnter               = 257,\n\t\t\tTab                 = 258,\n\t\t\tBackspace           = 259,\n\t\t\tInsert              = 260,\n\t\t\tDelete              = 261,\n\t\t\tRight               = 262,\n\t\t\tLeft                = 263,\n\t\t\tDown                = 264,\n\t\t\tUp                  = 265,\n\t\t\tPageUp              = 266,\n\t\t\tPageDown            = 267,\n\t\t\tHome                = 268,\n\t\t\tEnd                 = 269,\n\t\t\tCapsLock            = 280,\n\t\t\tScrollLock          = 281,\n\t\t\tNumLock             = 282,\n\t\t\tPrintScreen         = 283,\n\t\t\tPause               = 284,\n\t\t\tF1                  = 290,\n\t\t\tF2                  = 291,\n\t\t\tF3                  = 292,\n\t\t\tF4                  = 293,\n\t\t\tF5                  = 294,\n\t\t\tF6                  = 295,\n\t\t\tF7                  = 296,\n\t\t\tF8                  = 297,\n\t\t\tF9                  = 298,\n\t\t\tF10                 = 299,\n\t\t\tF11                 = 300,\n\t\t\tF12                 = 301,\n\t\t\tF13                 = 302,\n\t\t\tF14                 = 303,\n\t\t\tF15                 = 304,\n\t\t\tF16                 = 305,\n\t\t\tF17                 = 306,\n\t\t\tF18                 = 307,\n\t\t\tF19                 = 308,\n\t\t\tF20                 = 309,\n\t\t\tF21                 = 310,\n\t\t\tF22                 = 311,\n\t\t\tF23                 = 312,\n\t\t\tF24                 = 313,\n\t\t\tF25                 = 314,\n\n\t\t\t/* Keypad */\n\t\t\tKP0                 = 320,\n\t\t\tKP1                 = 321,\n\t\t\tKP2                 = 322,\n\t\t\tKP3                 = 323,\n\t\t\tKP4                 = 324,\n\t\t\tKP5                 = 325,\n\t\t\tKP6                 = 326,\n\t\t\tKP7                 = 327,\n\t\t\tKP8                 = 328,\n\t\t\tKP9                 = 329,\n\t\t\tKPDecimal           = 330,\n\t\t\tKPDivide            = 331,\n\t\t\tKPMultiply          = 332,\n\t\t\tKPSubtract          = 333,\n\t\t\tKPAdd               = 334,\n\t\t\tKPEnter             = 335,\n\t\t\tKPEqual             = 336,\n\n\t\t\tLeftShift           = 340,\n\t\t\tLeftControl         = 341,\n\t\t\tLeftAlt             = 342,\n\t\t\tLeftSuper           = 343,\n\t\t\tRightShift          = 344,\n\t\t\tRightControl        = 345,\n\t\t\tRightAlt            = 346,\n\t\t\tRightSuper          = 347,\n\t\t\tMenu                = 348\n\t\t};\n\t}\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/Layer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Core/Layer.h\"\n\nnamespace Hazel {\n\n\tLayer::Layer(const std::string& debugName)\n\t\t: m_DebugName(debugName)\n\t{\n\t}\n\t\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/Layer.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Core/Timestep.h\"\n#include \"Hazel/Events/Event.h\"\n\nnamespace Hazel {\n\n\tclass Layer\n\t{\n\tpublic:\n\t\tLayer(const std::string& name = \"Layer\");\n\t\tvirtual ~Layer() = default;\n\n\t\tvirtual void OnAttach() {}\n\t\tvirtual void OnDetach() {}\n\t\tvirtual void OnUpdate(Timestep ts) {}\n\t\tvirtual void OnImGuiRender() {}\n\t\tvirtual void OnEvent(Event& event) {}\n\n\t\tconst std::string& GetName() const { return m_DebugName; }\n\tprotected:\n\t\tstd::string m_DebugName;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/LayerStack.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Core/LayerStack.h\"\n\nnamespace Hazel {\n\n\tLayerStack::~LayerStack()\n\t{\n\t\tfor (Layer* layer : m_Layers)\n\t\t{\n\t\t\tlayer->OnDetach();\n\t\t\tdelete layer;\n\t\t}\n\t}\n\n\tvoid LayerStack::PushLayer(Layer* layer)\n\t{\n\t\tm_Layers.emplace(m_Layers.begin() + m_LayerInsertIndex, layer);\n\t\tm_LayerInsertIndex++;\n\t}\n\n\tvoid LayerStack::PushOverlay(Layer* overlay)\n\t{\n\t\tm_Layers.emplace_back(overlay);\n\t}\n\n\tvoid LayerStack::PopLayer(Layer* layer)\n\t{\n\t\tauto it = std::find(m_Layers.begin(), m_Layers.begin() + m_LayerInsertIndex, layer);\n\t\tif (it != m_Layers.begin() + m_LayerInsertIndex)\n\t\t{\n\t\t\tlayer->OnDetach();\n\t\t\tm_Layers.erase(it);\n\t\t\tm_LayerInsertIndex--;\n\t\t}\n\t}\n\n\tvoid LayerStack::PopOverlay(Layer* overlay)\n\t{\n\t\tauto it = std::find(m_Layers.begin() + m_LayerInsertIndex, m_Layers.end(), overlay);\n\t\tif (it != m_Layers.end())\n\t\t{\n\t\t\toverlay->OnDetach();\n\t\t\tm_Layers.erase(it);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/LayerStack.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Core/Layer.h\"\n\n#include <vector>\n\nnamespace Hazel {\n\n\tclass LayerStack\n\t{\n\tpublic:\n\t\tLayerStack() = default;\n\t\t~LayerStack();\n\n\t\tvoid PushLayer(Layer* layer);\n\t\tvoid PushOverlay(Layer* overlay);\n\t\tvoid PopLayer(Layer* layer);\n\t\tvoid PopOverlay(Layer* overlay);\n\n\t\tstd::vector<Layer*>::iterator begin() { return m_Layers.begin(); }\n\t\tstd::vector<Layer*>::iterator end() { return m_Layers.end(); }\n\t\tstd::vector<Layer*>::reverse_iterator rbegin() { return m_Layers.rbegin(); }\n\t\tstd::vector<Layer*>::reverse_iterator rend() { return m_Layers.rend(); }\n\n\t\tstd::vector<Layer*>::const_iterator begin() const { return m_Layers.begin(); }\n\t\tstd::vector<Layer*>::const_iterator end()\tconst { return m_Layers.end(); }\n\t\tstd::vector<Layer*>::const_reverse_iterator rbegin() const { return m_Layers.rbegin(); }\n\t\tstd::vector<Layer*>::const_reverse_iterator rend() const { return m_Layers.rend(); }\n\tprivate:\n\t\tstd::vector<Layer*> m_Layers;\n\t\tunsigned int m_LayerInsertIndex = 0;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/Log.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Core/Log.h\"\n\n#include <spdlog/sinks/stdout_color_sinks.h>\n#include <spdlog/sinks/basic_file_sink.h>\n\nnamespace Hazel {\n\n\tRef<spdlog::logger> Log::s_CoreLogger;\n\tRef<spdlog::logger> Log::s_ClientLogger;\n\n\tvoid Log::Init()\n\t{\n\t\tstd::vector<spdlog::sink_ptr> logSinks;\n\t\tlogSinks.emplace_back(std::make_shared<spdlog::sinks::stdout_color_sink_mt>());\n\t\tlogSinks.emplace_back(std::make_shared<spdlog::sinks::basic_file_sink_mt>(\"Hazel.log\", true));\n\n\t\tlogSinks[0]->set_pattern(\"%^[%T] %n: %v%$\");\n\t\tlogSinks[1]->set_pattern(\"[%T] [%l] %n: %v\");\n\n\t\ts_CoreLogger = std::make_shared<spdlog::logger>(\"HAZEL\", begin(logSinks), end(logSinks));\n\t\tspdlog::register_logger(s_CoreLogger);\n\t\ts_CoreLogger->set_level(spdlog::level::trace);\n\t\ts_CoreLogger->flush_on(spdlog::level::trace);\n\n\t\ts_ClientLogger = std::make_shared<spdlog::logger>(\"APP\", begin(logSinks), end(logSinks));\n\t\tspdlog::register_logger(s_ClientLogger);\n\t\ts_ClientLogger->set_level(spdlog::level::trace);\n\t\ts_ClientLogger->flush_on(spdlog::level::trace);\n\t}\n\n}\n\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Log.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include \"glm/gtx/string_cast.hpp\"\n\n// This ignores all warnings raised inside External headers\n#pragma warning(push, 0)\n#include <spdlog/spdlog.h>\n#include <spdlog/fmt/ostr.h>\n#pragma warning(pop)\n\nnamespace Hazel {\n\n\tclass Log\n\t{\n\tpublic:\n\t\tstatic void Init();\n\n\t\tstatic Ref<spdlog::logger>& GetCoreLogger() { return s_CoreLogger; }\n\t\tstatic Ref<spdlog::logger>& GetClientLogger() { return s_ClientLogger; }\n\tprivate:\n\t\tstatic Ref<spdlog::logger> s_CoreLogger;\n\t\tstatic Ref<spdlog::logger> s_ClientLogger;\n\t};\n\n}\n\ntemplate<typename OStream, glm::length_t L, typename T, glm::qualifier Q>\ninline OStream& operator<<(OStream& os, const glm::vec<L, T, Q>& vector)\n{\n\treturn os << glm::to_string(vector);\n}\n\ntemplate<typename OStream, glm::length_t C, glm::length_t R, typename T, glm::qualifier Q>\ninline OStream& operator<<(OStream& os, const glm::mat<C, R, T, Q>& matrix)\n{\n\treturn os << glm::to_string(matrix);\n}\n\ntemplate<typename OStream, typename T, glm::qualifier Q>\ninline OStream& operator<<(OStream& os, glm::qua<T, Q> quaternion)\n{\n\treturn os << glm::to_string(quaternion);\n}\n\n// Core log macros\n#define HZ_CORE_TRACE(...)    ::Hazel::Log::GetCoreLogger()->trace(__VA_ARGS__)\n#define HZ_CORE_INFO(...)     ::Hazel::Log::GetCoreLogger()->info(__VA_ARGS__)\n#define HZ_CORE_WARN(...)     ::Hazel::Log::GetCoreLogger()->warn(__VA_ARGS__)\n#define HZ_CORE_ERROR(...)    ::Hazel::Log::GetCoreLogger()->error(__VA_ARGS__)\n#define HZ_CORE_CRITICAL(...) ::Hazel::Log::GetCoreLogger()->critical(__VA_ARGS__)\n\n// Client log macros\n#define HZ_TRACE(...)         ::Hazel::Log::GetClientLogger()->trace(__VA_ARGS__)\n#define HZ_INFO(...)          ::Hazel::Log::GetClientLogger()->info(__VA_ARGS__)\n#define HZ_WARN(...)          ::Hazel::Log::GetClientLogger()->warn(__VA_ARGS__)\n#define HZ_ERROR(...)         ::Hazel::Log::GetClientLogger()->error(__VA_ARGS__)\n#define HZ_CRITICAL(...)      ::Hazel::Log::GetClientLogger()->critical(__VA_ARGS__)\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/MouseCodes.h",
    "content": "#pragma once\n\nnamespace Hazel\n{\n\tusing MouseCode = uint16_t;\n\n\tnamespace Mouse\n\t{\n\t\tenum : MouseCode\n\t\t{\n\t\t\t// From glfw3.h\n\t\t\tButton0                = 0,\n\t\t\tButton1                = 1,\n\t\t\tButton2                = 2,\n\t\t\tButton3                = 3,\n\t\t\tButton4                = 4,\n\t\t\tButton5                = 5,\n\t\t\tButton6                = 6,\n\t\t\tButton7                = 7,\n\n\t\t\tButtonLast             = Button7,\n\t\t\tButtonLeft             = Button0,\n\t\t\tButtonRight            = Button1,\n\t\t\tButtonMiddle           = Button2\n\t\t};\n\t}\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/PlatformDetection.h",
    "content": "// Platform detection using predefined macros\n#ifdef _WIN32\n\t/* Windows x64/x86 */\n\t#ifdef _WIN64\n\t\t/* Windows x64  */\n\t\t#define HZ_PLATFORM_WINDOWS\n\t#else\n\t\t/* Windows x86 */\n\t\t#error \"x86 Builds are not supported!\"\n\t#endif\n#elif defined(__APPLE__) || defined(__MACH__)\n\t#include <TargetConditionals.h>\n\t/* TARGET_OS_MAC exists on all the platforms\n\t * so we must check all of them (in this order)\n\t * to ensure that we're running on MAC\n\t * and not some other Apple platform */\n\t#if TARGET_IPHONE_SIMULATOR == 1\n\t\t#error \"IOS simulator is not supported!\"\n\t#elif TARGET_OS_IPHONE == 1\n\t\t#define HZ_PLATFORM_IOS\n\t\t#error \"IOS is not supported!\"\n\t#elif TARGET_OS_MAC == 1\n\t\t#define HZ_PLATFORM_MACOS\n\t\t#error \"MacOS is not supported!\"\n\t#else\n\t\t#error \"Unknown Apple platform!\"\n\t#endif\n/* We also have to check __ANDROID__ before __linux__\n * since android is based on the linux kernel\n * it has __linux__ defined */\n#elif defined(__ANDROID__)\n\t#define HZ_PLATFORM_ANDROID\n\t#error \"Android is not supported!\"\n#elif defined(__linux__)\n\t#define HZ_PLATFORM_LINUX\n\t#error \"Linux is not supported!\"\n#else\n\t/* Unknown compiler/platform */\n\t#error \"Unknown platform!\"\n#endif // End of platform detection\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Timer.h",
    "content": "#pragma once\n\n#include <chrono>\n\nnamespace Hazel {\n\n\tclass Timer\n\t{\n\tpublic:\n\t\tTimer()\n\t\t{\n\t\t\tReset();\n\t\t}\n\n\t\tvoid Timer::Reset()\n\t\t{\n\t\t\tm_Start = std::chrono::high_resolution_clock::now();\n\t\t}\n\n\t\tfloat Timer::Elapsed()\n\t\t{\n\t\t\treturn std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - m_Start).count() * 0.001f * 0.001f * 0.001f;\n\t\t}\n\n\t\tfloat Timer::ElapsedMillis()\n\t\t{\n\t\t\treturn Elapsed() * 1000.0f;\n\t\t}\n\n\tprivate:\n\t\tstd::chrono::time_point<std::chrono::high_resolution_clock> m_Start;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Timestep.h",
    "content": "#pragma once\n\nnamespace Hazel {\n\n\tclass Timestep\n\t{\n\tpublic:\n\t\tTimestep(float time = 0.0f)\n\t\t\t: m_Time(time)\n\t\t{\n\t\t}\n\n\t\toperator float() const { return m_Time; }\n\n\t\tfloat GetSeconds() const { return m_Time; }\n\t\tfloat GetMilliseconds() const { return m_Time * 1000.0f; }\n\tprivate:\n\t\tfloat m_Time;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/UUID.cpp",
    "content": "#include \"hzpch.h\"\n#include \"UUID.h\"\n\n#include <random>\n\n#include <unordered_map>\n\nnamespace Hazel {\n\n\tstatic std::random_device s_RandomDevice;\n\tstatic std::mt19937_64 s_Engine(s_RandomDevice());\n\tstatic std::uniform_int_distribution<uint64_t> s_UniformDistribution;\n\n\tUUID::UUID()\n\t\t: m_UUID(s_UniformDistribution(s_Engine))\n\t{\n\t}\n\n\tUUID::UUID(uint64_t uuid)\n\t\t: m_UUID(uuid)\n\t{\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/UUID.h",
    "content": "#pragma once\n\nnamespace Hazel {\n\n\tclass UUID\n\t{\n\tpublic:\n\t\tUUID();\n\t\tUUID(uint64_t uuid);\n\t\tUUID(const UUID&) = default;\n\n\t\toperator uint64_t() const { return m_UUID; }\n\tprivate:\n\t\tuint64_t m_UUID;\n\t};\n\n}\n\nnamespace std {\n\ttemplate <typename T> struct hash;\n\n\ttemplate<>\n\tstruct hash<Hazel::UUID>\n\t{\n\t\tstd::size_t operator()(const Hazel::UUID& uuid) const\n\t\t{\n\t\t\treturn (uint64_t)uuid;\n\t\t}\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Core/Window.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Core/Window.h\"\n\n#ifdef HZ_PLATFORM_WINDOWS\n\t#include \"Platform/Windows/WindowsWindow.h\"\n#endif\n\nnamespace Hazel\n{\n\tScope<Window> Window::Create(const WindowProps& props)\n\t{\n\t#ifdef HZ_PLATFORM_WINDOWS\n\t\treturn CreateScope<WindowsWindow>(props);\n\t#else\n\t\tHZ_CORE_ASSERT(false, \"Unknown platform!\");\n\t\treturn nullptr;\n\t#endif\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Core/Window.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Events/Event.h\"\n\n#include <sstream>\n\nnamespace Hazel {\n\n\tstruct WindowProps\n\t{\n\t\tstd::string Title;\n\t\tuint32_t Width;\n\t\tuint32_t Height;\n\n\t\tWindowProps(const std::string& title = \"Hazel Engine\",\n\t\t\t        uint32_t width = 1600,\n\t\t\t        uint32_t height = 900)\n\t\t\t: Title(title), Width(width), Height(height)\n\t\t{\n\t\t}\n\t};\n\n\t// Interface representing a desktop system based Window\n\tclass Window\n\t{\n\tpublic:\n\t\tusing EventCallbackFn = std::function<void(Event&)>;\n\n\t\tvirtual ~Window() = default;\n\n\t\tvirtual void OnUpdate() = 0;\n\n\t\tvirtual uint32_t GetWidth() const = 0;\n\t\tvirtual uint32_t GetHeight() const = 0;\n\n\t\t// Window attributes\n\t\tvirtual void SetEventCallback(const EventCallbackFn& callback) = 0;\n\t\tvirtual void SetVSync(bool enabled) = 0;\n\t\tvirtual bool IsVSync() const = 0;\n\n\t\tvirtual void* GetNativeWindow() const = 0;\n\n\t\tstatic Scope<Window> Create(const WindowProps& props = WindowProps());\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Debug/Instrumentor.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Log.h\"\n\n#include <algorithm>\n#include <chrono>\n#include <fstream>\n#include <iomanip>\n#include <string>\n#include <thread>\n#include <mutex>\n#include <sstream>\n\nnamespace Hazel {\n\n\tusing FloatingPointMicroseconds = std::chrono::duration<double, std::micro>;\n\n\tstruct ProfileResult\n\t{\n\t\tstd::string Name;\n\n\t\tFloatingPointMicroseconds Start;\n\t\tstd::chrono::microseconds ElapsedTime;\n\t\tstd::thread::id ThreadID;\n\t};\n\n\tstruct InstrumentationSession\n\t{\n\t\tstd::string Name;\n\t};\n\n\tclass Instrumentor\n\t{\n\tpublic:\n\t\tInstrumentor(const Instrumentor&) = delete;\n\t\tInstrumentor(Instrumentor&&) = delete;\n\n\t\tvoid BeginSession(const std::string& name, const std::string& filepath = \"results.json\")\n\t\t{\n\t\t\tstd::lock_guard lock(m_Mutex);\n\t\t\tif (m_CurrentSession)\n\t\t\t{\n\t\t\t\t// If there is already a current session, then close it before beginning new one.\n\t\t\t\t// Subsequent profiling output meant for the original session will end up in the\n\t\t\t\t// newly opened session instead.  That's better than having badly formatted\n\t\t\t\t// profiling output.\n\t\t\t\tif (Log::GetCoreLogger()) // Edge case: BeginSession() might be before Log::Init()\n\t\t\t\t{\n\t\t\t\t\tHZ_CORE_ERROR(\"Instrumentor::BeginSession('{0}') when session '{1}' already open.\", name, m_CurrentSession->Name);\n\t\t\t\t}\n\t\t\t\tInternalEndSession();\n\t\t\t}\n\t\t\tm_OutputStream.open(filepath);\n\n\t\t\tif (m_OutputStream.is_open())\n\t\t\t{\n\t\t\t\tm_CurrentSession = new InstrumentationSession({name});\n\t\t\t\tWriteHeader();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (Log::GetCoreLogger()) // Edge case: BeginSession() might be before Log::Init()\n\t\t\t\t{\n\t\t\t\t\tHZ_CORE_ERROR(\"Instrumentor could not open results file '{0}'.\", filepath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid EndSession()\n\t\t{\n\t\t\tstd::lock_guard lock(m_Mutex);\n\t\t\tInternalEndSession();\n\t\t}\n\n\t\tvoid WriteProfile(const ProfileResult& result)\n\t\t{\n\t\t\tstd::stringstream json;\n\n\t\t\tjson << std::setprecision(3) << std::fixed;\n\t\t\tjson << \",{\";\n\t\t\tjson << \"\\\"cat\\\":\\\"function\\\",\";\n\t\t\tjson << \"\\\"dur\\\":\" << (result.ElapsedTime.count()) << ',';\n\t\t\tjson << \"\\\"name\\\":\\\"\" << result.Name << \"\\\",\";\n\t\t\tjson << \"\\\"ph\\\":\\\"X\\\",\";\n\t\t\tjson << \"\\\"pid\\\":0,\";\n\t\t\tjson << \"\\\"tid\\\":\" << result.ThreadID << \",\";\n\t\t\tjson << \"\\\"ts\\\":\" << result.Start.count();\n\t\t\tjson << \"}\";\n\n\t\t\tstd::lock_guard lock(m_Mutex);\n\t\t\tif (m_CurrentSession)\n\t\t\t{\n\t\t\t\tm_OutputStream << json.str();\n\t\t\t\tm_OutputStream.flush();\n\t\t\t}\n\t\t}\n\n\t\tstatic Instrumentor& Get()\n\t\t{\n\t\t\tstatic Instrumentor instance;\n\t\t\treturn instance;\n\t\t}\n\tprivate:\n\t\tInstrumentor()\n\t\t\t: m_CurrentSession(nullptr)\n\t\t{\n\t\t}\n\n\t\t~Instrumentor()\n\t\t{\n\t\t\tEndSession();\n\t\t}\t\t\n\n\t\tvoid WriteHeader()\n\t\t{\n\t\t\tm_OutputStream << \"{\\\"otherData\\\": {},\\\"traceEvents\\\":[{}\";\n\t\t\tm_OutputStream.flush();\n\t\t}\n\n\t\tvoid WriteFooter()\n\t\t{\n\t\t\tm_OutputStream << \"]}\";\n\t\t\tm_OutputStream.flush();\n\t\t}\n\n\t\t// Note: you must already own lock on m_Mutex before\n\t\t// calling InternalEndSession()\n\t\tvoid InternalEndSession()\n\t\t{\n\t\t\tif (m_CurrentSession)\n\t\t\t{\n\t\t\t\tWriteFooter();\n\t\t\t\tm_OutputStream.close();\n\t\t\t\tdelete m_CurrentSession;\n\t\t\t\tm_CurrentSession = nullptr;\n\t\t\t}\n\t\t}\n\tprivate:\n\t\tstd::mutex m_Mutex;\n\t\tInstrumentationSession* m_CurrentSession;\n\t\tstd::ofstream m_OutputStream;\n\t};\n\n\tclass InstrumentationTimer\n\t{\n\tpublic:\n\t\tInstrumentationTimer(const char* name)\n\t\t\t: m_Name(name), m_Stopped(false)\n\t\t{\n\t\t\tm_StartTimepoint = std::chrono::steady_clock::now();\n\t\t}\n\n\t\t~InstrumentationTimer()\n\t\t{\n\t\t\tif (!m_Stopped)\n\t\t\t\tStop();\n\t\t}\n\n\t\tvoid Stop()\n\t\t{\n\t\t\tauto endTimepoint = std::chrono::steady_clock::now();\n\t\t\tauto highResStart = FloatingPointMicroseconds{ m_StartTimepoint.time_since_epoch() };\n\t\t\tauto elapsedTime = std::chrono::time_point_cast<std::chrono::microseconds>(endTimepoint).time_since_epoch() - std::chrono::time_point_cast<std::chrono::microseconds>(m_StartTimepoint).time_since_epoch();\n\n\t\t\tInstrumentor::Get().WriteProfile({ m_Name, highResStart, elapsedTime, std::this_thread::get_id() });\n\n\t\t\tm_Stopped = true;\n\t\t}\n\tprivate:\n\t\tconst char* m_Name;\n\t\tstd::chrono::time_point<std::chrono::steady_clock> m_StartTimepoint;\n\t\tbool m_Stopped;\n\t};\n\n\tnamespace InstrumentorUtils {\n\n\t\ttemplate <size_t N>\n\t\tstruct ChangeResult\n\t\t{\n\t\t\tchar Data[N];\n\t\t};\n\n\t\ttemplate <size_t N, size_t K>\n\t\tconstexpr auto CleanupOutputString(const char(&expr)[N], const char(&remove)[K])\n\t\t{\n\t\t\tChangeResult<N> result = {};\n\n\t\t\tsize_t srcIndex = 0;\n\t\t\tsize_t dstIndex = 0;\n\t\t\twhile (srcIndex < N)\n\t\t\t{\n\t\t\t\tsize_t matchIndex = 0;\n\t\t\t\twhile (matchIndex < K - 1 && srcIndex + matchIndex < N - 1 && expr[srcIndex + matchIndex] == remove[matchIndex])\n\t\t\t\t\tmatchIndex++;\n\t\t\t\tif (matchIndex == K - 1)\n\t\t\t\t\tsrcIndex += matchIndex;\n\t\t\t\tresult.Data[dstIndex++] = expr[srcIndex] == '\"' ? '\\'' : expr[srcIndex];\n\t\t\t\tsrcIndex++;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n}\n\n#define HZ_PROFILE 0\n#if HZ_PROFILE\n\t// Resolve which function signature macro will be used. Note that this only\n\t// is resolved when the (pre)compiler starts, so the syntax highlighting\n\t// could mark the wrong one in your editor!\n\t#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)\n\t\t#define HZ_FUNC_SIG __PRETTY_FUNCTION__\n\t#elif defined(__DMC__) && (__DMC__ >= 0x810)\n\t\t#define HZ_FUNC_SIG __PRETTY_FUNCTION__\n\t#elif (defined(__FUNCSIG__) || (_MSC_VER))\n\t\t#define HZ_FUNC_SIG __FUNCSIG__\n\t#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))\n\t\t#define HZ_FUNC_SIG __FUNCTION__\n\t#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)\n\t\t#define HZ_FUNC_SIG __FUNC__\n\t#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)\n\t\t#define HZ_FUNC_SIG __func__\n\t#elif defined(__cplusplus) && (__cplusplus >= 201103)\n\t\t#define HZ_FUNC_SIG __func__\n\t#else\n\t\t#define HZ_FUNC_SIG \"HZ_FUNC_SIG unknown!\"\n\t#endif\n\n\t#define HZ_PROFILE_BEGIN_SESSION(name, filepath) ::Hazel::Instrumentor::Get().BeginSession(name, filepath)\n\t#define HZ_PROFILE_END_SESSION() ::Hazel::Instrumentor::Get().EndSession()\n\t#define HZ_PROFILE_SCOPE_LINE2(name, line) constexpr auto fixedName##line = ::Hazel::InstrumentorUtils::CleanupOutputString(name, \"__cdecl \");\\\n\t\t\t\t\t\t\t\t\t\t\t   ::Hazel::InstrumentationTimer timer##line(fixedName##line.Data)\n\t#define HZ_PROFILE_SCOPE_LINE(name, line) HZ_PROFILE_SCOPE_LINE2(name, line)\n\t#define HZ_PROFILE_SCOPE(name) HZ_PROFILE_SCOPE_LINE(name, __LINE__)\n\t#define HZ_PROFILE_FUNCTION() HZ_PROFILE_SCOPE(HZ_FUNC_SIG)\n#else\n\t#define HZ_PROFILE_BEGIN_SESSION(name, filepath)\n\t#define HZ_PROFILE_END_SESSION()\n\t#define HZ_PROFILE_SCOPE(name)\n\t#define HZ_PROFILE_FUNCTION()\n#endif"
  },
  {
    "path": "Hazel/src/Hazel/Events/ApplicationEvent.h",
    "content": "#pragma once\n\n#include \"Hazel/Events/Event.h\"\n\nnamespace Hazel {\n\n\tclass WindowResizeEvent : public Event\n\t{\n\tpublic:\n\t\tWindowResizeEvent(unsigned int width, unsigned int height)\n\t\t\t: m_Width(width), m_Height(height) {}\n\n\t\tunsigned int GetWidth() const { return m_Width; }\n\t\tunsigned int GetHeight() const { return m_Height; }\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"WindowResizeEvent: \" << m_Width << \", \" << m_Height;\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(WindowResize)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryApplication)\n\tprivate:\n\t\tunsigned int m_Width, m_Height;\n\t};\n\n\tclass WindowCloseEvent : public Event\n\t{\n\tpublic:\n\t\tWindowCloseEvent() = default;\n\n\t\tEVENT_CLASS_TYPE(WindowClose)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryApplication)\n\t};\n\n\tclass AppTickEvent : public Event\n\t{\n\tpublic:\n\t\tAppTickEvent() = default;\n\n\t\tEVENT_CLASS_TYPE(AppTick)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryApplication)\n\t};\n\n\tclass AppUpdateEvent : public Event\n\t{\n\tpublic:\n\t\tAppUpdateEvent() = default;\n\n\t\tEVENT_CLASS_TYPE(AppUpdate)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryApplication)\n\t};\n\n\tclass AppRenderEvent : public Event\n\t{\n\tpublic:\n\t\tAppRenderEvent() = default;\n\n\t\tEVENT_CLASS_TYPE(AppRender)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryApplication)\n\t};\n}"
  },
  {
    "path": "Hazel/src/Hazel/Events/Event.h",
    "content": "#pragma once\n\n#include \"Hazel/Debug/Instrumentor.h\"\n#include \"Hazel/Core/Base.h\"\n\n#include <functional>\n\nnamespace Hazel {\n\n\t// Events in Hazel are currently blocking, meaning when an event occurs it\n\t// immediately gets dispatched and must be dealt with right then an there.\n\t// For the future, a better strategy might be to buffer events in an event\n\t// bus and process them during the \"event\" part of the update stage.\n\n\tenum class EventType\n\t{\n\t\tNone = 0,\n\t\tWindowClose, WindowResize, WindowFocus, WindowLostFocus, WindowMoved,\n\t\tAppTick, AppUpdate, AppRender,\n\t\tKeyPressed, KeyReleased, KeyTyped,\n\t\tMouseButtonPressed, MouseButtonReleased, MouseMoved, MouseScrolled\n\t};\n\n\tenum EventCategory\n\t{\n\t\tNone = 0,\n\t\tEventCategoryApplication    = BIT(0),\n\t\tEventCategoryInput          = BIT(1),\n\t\tEventCategoryKeyboard       = BIT(2),\n\t\tEventCategoryMouse          = BIT(3),\n\t\tEventCategoryMouseButton    = BIT(4)\n\t};\n\n#define EVENT_CLASS_TYPE(type) static EventType GetStaticType() { return EventType::type; }\\\n\t\t\t\t\t\t\t\tvirtual EventType GetEventType() const override { return GetStaticType(); }\\\n\t\t\t\t\t\t\t\tvirtual const char* GetName() const override { return #type; }\n\n#define EVENT_CLASS_CATEGORY(category) virtual int GetCategoryFlags() const override { return category; }\n\n\tclass Event\n\t{\n\tpublic:\n\t\tvirtual ~Event() = default;\n\n\t\tbool Handled = false;\n\n\t\tvirtual EventType GetEventType() const = 0;\n\t\tvirtual const char* GetName() const = 0;\n\t\tvirtual int GetCategoryFlags() const = 0;\n\t\tvirtual std::string ToString() const { return GetName(); }\n\n\t\tbool IsInCategory(EventCategory category)\n\t\t{\n\t\t\treturn GetCategoryFlags() & category;\n\t\t}\n\t};\n\n\tclass EventDispatcher\n\t{\n\tpublic:\n\t\tEventDispatcher(Event& event)\n\t\t\t: m_Event(event)\n\t\t{\n\t\t}\n\t\t\n\t\t// F will be deduced by the compiler\n\t\ttemplate<typename T, typename F>\n\t\tbool Dispatch(const F& func)\n\t\t{\n\t\t\tif (m_Event.GetEventType() == T::GetStaticType())\n\t\t\t{\n\t\t\t\tm_Event.Handled |= func(static_cast<T&>(m_Event));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\tprivate:\n\t\tEvent& m_Event;\n\t};\n\n\tinline std::ostream& operator<<(std::ostream& os, const Event& e)\n\t{\n\t\treturn os << e.ToString();\n\t}\n\n}\n\n"
  },
  {
    "path": "Hazel/src/Hazel/Events/KeyEvent.h",
    "content": "#pragma once\n\n#include \"Hazel/Events/Event.h\"\n#include \"Hazel/Core/KeyCodes.h\"\n\nnamespace Hazel {\n\n\tclass KeyEvent : public Event\n\t{\n\tpublic:\n\t\tKeyCode GetKeyCode() const { return m_KeyCode; }\n\n\t\tEVENT_CLASS_CATEGORY(EventCategoryKeyboard | EventCategoryInput)\n\tprotected:\n\t\tKeyEvent(const KeyCode keycode)\n\t\t\t: m_KeyCode(keycode) {}\n\n\t\tKeyCode m_KeyCode;\n\t};\n\n\tclass KeyPressedEvent : public KeyEvent\n\t{\n\tpublic:\n\t\tKeyPressedEvent(const KeyCode keycode, bool isRepeat = false)\n\t\t\t: KeyEvent(keycode), m_IsRepeat(isRepeat) {}\n\n\t\tbool IsRepeat() const { return m_IsRepeat; }\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"KeyPressedEvent: \" << m_KeyCode << \" (repeat = \" << m_IsRepeat << \")\";\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(KeyPressed)\n\tprivate:\n\t\tbool m_IsRepeat;\n\t};\n\n\tclass KeyReleasedEvent : public KeyEvent\n\t{\n\tpublic:\n\t\tKeyReleasedEvent(const KeyCode keycode)\n\t\t\t: KeyEvent(keycode) {}\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"KeyReleasedEvent: \" << m_KeyCode;\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(KeyReleased)\n\t};\n\n\tclass KeyTypedEvent : public KeyEvent\n\t{\n\tpublic:\n\t\tKeyTypedEvent(const KeyCode keycode)\n\t\t\t: KeyEvent(keycode) {}\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"KeyTypedEvent: \" << m_KeyCode;\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(KeyTyped)\n\t};\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Events/MouseEvent.h",
    "content": "#pragma once\n\n#include \"Hazel/Events/Event.h\"\n#include \"Hazel/Core/MouseCodes.h\"\n\nnamespace Hazel {\n\n\tclass MouseMovedEvent : public Event\n\t{\n\tpublic:\n\t\tMouseMovedEvent(const float x, const float y)\n\t\t\t: m_MouseX(x), m_MouseY(y) {}\n\n\t\tfloat GetX() const { return m_MouseX; }\n\t\tfloat GetY() const { return m_MouseY; }\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"MouseMovedEvent: \" << m_MouseX << \", \" << m_MouseY;\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(MouseMoved)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryMouse | EventCategoryInput)\n\tprivate:\n\t\tfloat m_MouseX, m_MouseY;\n\t};\n\n\tclass MouseScrolledEvent : public Event\n\t{\n\tpublic:\n\t\tMouseScrolledEvent(const float xOffset, const float yOffset)\n\t\t\t: m_XOffset(xOffset), m_YOffset(yOffset) {}\n\n\t\tfloat GetXOffset() const { return m_XOffset; }\n\t\tfloat GetYOffset() const { return m_YOffset; }\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"MouseScrolledEvent: \" << GetXOffset() << \", \" << GetYOffset();\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(MouseScrolled)\n\t\tEVENT_CLASS_CATEGORY(EventCategoryMouse | EventCategoryInput)\n\tprivate:\n\t\tfloat m_XOffset, m_YOffset;\n\t};\n\n\tclass MouseButtonEvent : public Event\n\t{\n\tpublic:\n\t\tMouseCode GetMouseButton() const { return m_Button; }\n\n\t\tEVENT_CLASS_CATEGORY(EventCategoryMouse | EventCategoryInput | EventCategoryMouseButton)\n\tprotected:\n\t\tMouseButtonEvent(const MouseCode button)\n\t\t\t: m_Button(button) {}\n\n\t\tMouseCode m_Button;\n\t};\n\n\tclass MouseButtonPressedEvent : public MouseButtonEvent\n\t{\n\tpublic:\n\t\tMouseButtonPressedEvent(const MouseCode button)\n\t\t\t: MouseButtonEvent(button) {}\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"MouseButtonPressedEvent: \" << m_Button;\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(MouseButtonPressed)\n\t};\n\n\tclass MouseButtonReleasedEvent : public MouseButtonEvent\n\t{\n\tpublic:\n\t\tMouseButtonReleasedEvent(const MouseCode button)\n\t\t\t: MouseButtonEvent(button) {}\n\n\t\tstd::string ToString() const override\n\t\t{\n\t\t\tstd::stringstream ss;\n\t\t\tss << \"MouseButtonReleasedEvent: \" << m_Button;\n\t\t\treturn ss.str();\n\t\t}\n\n\t\tEVENT_CLASS_TYPE(MouseButtonReleased)\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/ImGui/ImGuiBuild.cpp",
    "content": "#include \"hzpch.h\"\n\n#include <misc/cpp/imgui_stdlib.cpp>\n\n#define IMGUI_IMPL_OPENGL_LOADER_GLAD\n#include <examples/imgui_impl_opengl3.cpp>\n#include <examples/imgui_impl_glfw.cpp>\n"
  },
  {
    "path": "Hazel/src/Hazel/ImGui/ImGuiLayer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/ImGui/ImGuiLayer.h\"\n\n#include <imgui.h>\n#include <imgui_internal.h>\n\n#include <examples/imgui_impl_glfw.h>\n#include <examples/imgui_impl_opengl3.h>\n\n#include \"Hazel/Core/Application.h\"\n\n// TEMPORARY\n#include <GLFW/glfw3.h>\n#include <glad/glad.h>\n\n#include \"ImGuizmo.h\"\n\nnamespace Hazel {\n\n\tImGuiLayer::ImGuiLayer()\n\t\t: Layer(\"ImGuiLayer\")\n\t{\n\t}\n\n\tvoid ImGuiLayer::OnAttach()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\t// Setup Dear ImGui context\n\t\tIMGUI_CHECKVERSION();\n\t\tImGui::CreateContext();\n\t\tImGuiIO& io = ImGui::GetIO(); (void)io;\n\t\tio.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;       // Enable Keyboard Controls\n\t\t//io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;      // Enable Gamepad Controls\n\t\tio.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking\n\t\tio.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;         // Enable Multi-Viewport / Platform Windows\n\t\t//io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons;\n\t\t//io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoMerge;\n\n\t\tfloat fontSize = 18.0f;// *2.0f;\n\t\tio.Fonts->AddFontFromFileTTF(\"assets/fonts/opensans/OpenSans-Bold.ttf\", fontSize);\n\t\tio.FontDefault = io.Fonts->AddFontFromFileTTF(\"assets/fonts/opensans/OpenSans-Regular.ttf\", fontSize);\n\n\t\t// Setup Dear ImGui style\n\t\tImGui::StyleColorsDark();\n\t\t//ImGui::StyleColorsClassic();\n\n\t\t// When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones.\n\t\tImGuiStyle& style = ImGui::GetStyle();\n\t\tif (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)\n\t\t{\n\t\t\tstyle.WindowRounding = 0.0f;\n\t\t\tstyle.Colors[ImGuiCol_WindowBg].w = 1.0f;\n\t\t}\n\n\t\tSetDarkThemeColors();\n\n\t\tApplication& app = Application::Get();\n\t\tGLFWwindow* window = static_cast<GLFWwindow*>(app.GetWindow().GetNativeWindow());\n\n\t\t// Setup Platform/Renderer bindings\n\t\tImGui_ImplGlfw_InitForOpenGL(window, true);\n\t\tImGui_ImplOpenGL3_Init(\"#version 410\");\n\t}\n\n\tvoid ImGuiLayer::OnDetach()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tImGui_ImplOpenGL3_Shutdown();\n\t\tImGui_ImplGlfw_Shutdown();\n\t\tImGui::DestroyContext();\n\t}\n\n\tvoid ImGuiLayer::OnEvent(Event& e)\n\t{\n\t\tif (m_BlockEvents)\n\t\t{\n\t\t\tImGuiIO& io = ImGui::GetIO();\n\t\t\te.Handled |= e.IsInCategory(EventCategoryMouse) & io.WantCaptureMouse;\n\t\t\te.Handled |= e.IsInCategory(EventCategoryKeyboard) & io.WantCaptureKeyboard;\n\t\t}\n\t}\n\t\n\tvoid ImGuiLayer::Begin()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tImGui_ImplOpenGL3_NewFrame();\n\t\tImGui_ImplGlfw_NewFrame();\n\t\tImGui::NewFrame();\n\t\tImGuizmo::BeginFrame();\n\t}\n\n\tvoid ImGuiLayer::End()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tImGuiIO& io = ImGui::GetIO();\n\t\tApplication& app = Application::Get();\n\t\tio.DisplaySize = ImVec2((float)app.GetWindow().GetWidth(), (float)app.GetWindow().GetHeight());\n\n\t\t// Rendering\n\t\tImGui::Render();\n\t\tImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());\n\n\t\tif (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)\n\t\t{\n\t\t\tGLFWwindow* backup_current_context = glfwGetCurrentContext();\n\t\t\tImGui::UpdatePlatformWindows();\n\t\t\tImGui::RenderPlatformWindowsDefault();\n\t\t\tglfwMakeContextCurrent(backup_current_context);\n\t\t}\n\t}\n\n\tvoid ImGuiLayer::SetDarkThemeColors()\n\t{\n\t\tauto& colors = ImGui::GetStyle().Colors;\n\t\tcolors[ImGuiCol_WindowBg] = ImVec4{ 0.1f, 0.105f, 0.11f, 1.0f };\n\n\t\t// Headers\n\t\tcolors[ImGuiCol_Header] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f };\n\t\tcolors[ImGuiCol_HeaderHovered] = ImVec4{ 0.3f, 0.305f, 0.31f, 1.0f };\n\t\tcolors[ImGuiCol_HeaderActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\t\t\n\t\t// Buttons\n\t\tcolors[ImGuiCol_Button] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f };\n\t\tcolors[ImGuiCol_ButtonHovered] = ImVec4{ 0.3f, 0.305f, 0.31f, 1.0f };\n\t\tcolors[ImGuiCol_ButtonActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\n\t\t// Frame BG\n\t\tcolors[ImGuiCol_FrameBg] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f };\n\t\tcolors[ImGuiCol_FrameBgHovered] = ImVec4{ 0.3f, 0.305f, 0.31f, 1.0f };\n\t\tcolors[ImGuiCol_FrameBgActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\n\t\t// Tabs\n\t\tcolors[ImGuiCol_Tab] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\t\tcolors[ImGuiCol_TabHovered] = ImVec4{ 0.38f, 0.3805f, 0.381f, 1.0f };\n\t\tcolors[ImGuiCol_TabActive] = ImVec4{ 0.28f, 0.2805f, 0.281f, 1.0f };\n\t\tcolors[ImGuiCol_TabUnfocused] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\t\tcolors[ImGuiCol_TabUnfocusedActive] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f };\n\n\t\t// Title\n\t\tcolors[ImGuiCol_TitleBg] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\t\tcolors[ImGuiCol_TitleBgActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\t\tcolors[ImGuiCol_TitleBgCollapsed] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f };\n\t}\n\n\tuint32_t ImGuiLayer::GetActiveWidgetID() const\n\t{\n\t\treturn GImGui->ActiveId;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/ImGui/ImGuiLayer.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Layer.h\"\n\n#include \"Hazel/Events/ApplicationEvent.h\"\n#include \"Hazel/Events/KeyEvent.h\"\n#include \"Hazel/Events/MouseEvent.h\"\n\nnamespace Hazel {\n\n\tclass ImGuiLayer : public Layer\n\t{\n\tpublic:\n\t\tImGuiLayer();\n\t\t~ImGuiLayer() = default;\n\n\t\tvirtual void OnAttach() override;\n\t\tvirtual void OnDetach() override;\n\t\tvirtual void OnEvent(Event& e) override;\n\n\t\tvoid Begin();\n\t\tvoid End();\n\n\t\tvoid BlockEvents(bool block) { m_BlockEvents = block; }\n\t\t\n\t\tvoid SetDarkThemeColors();\n\n\t\tuint32_t GetActiveWidgetID() const;\n\tprivate:\n\t\tbool m_BlockEvents = true;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Math/Math.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Math.h\"\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_decompose.hpp>\n\nnamespace Hazel::Math {\n\n\tbool DecomposeTransform(const glm::mat4& transform, glm::vec3& translation, glm::vec3& rotation, glm::vec3& scale)\n\t{\n\t\t// From glm::decompose in matrix_decompose.inl\n\n\t\tusing namespace glm;\n\t\tusing T = float;\n\n\t\tmat4 LocalMatrix(transform);\n\n\t\t// Normalize the matrix.\n\t\tif (epsilonEqual(LocalMatrix[3][3], static_cast<float>(0), epsilon<T>()))\n\t\t\treturn false;\n\n\t\t// First, isolate perspective.  This is the messiest.\n\t\tif (\n\t\t\tepsilonNotEqual(LocalMatrix[0][3], static_cast<T>(0), epsilon<T>()) ||\n\t\t\tepsilonNotEqual(LocalMatrix[1][3], static_cast<T>(0), epsilon<T>()) ||\n\t\t\tepsilonNotEqual(LocalMatrix[2][3], static_cast<T>(0), epsilon<T>()))\n\t\t{\n\t\t\t// Clear the perspective partition\n\t\t\tLocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast<T>(0);\n\t\t\tLocalMatrix[3][3] = static_cast<T>(1);\n\t\t}\n\n\t\t// Next take care of translation (easy).\n\t\ttranslation = vec3(LocalMatrix[3]);\n\t\tLocalMatrix[3] = vec4(0, 0, 0, LocalMatrix[3].w);\n\n\t\tvec3 Row[3], Pdum3;\n\n\t\t// Now get scale and shear.\n\t\tfor (length_t i = 0; i < 3; ++i)\n\t\t\tfor (length_t j = 0; j < 3; ++j)\n\t\t\t\tRow[i][j] = LocalMatrix[i][j];\n\n\t\t// Compute X scale factor and normalize first row.\n\t\tscale.x = length(Row[0]);\n\t\tRow[0] = detail::scale(Row[0], static_cast<T>(1));\n\t\tscale.y = length(Row[1]);\n\t\tRow[1] = detail::scale(Row[1], static_cast<T>(1));\n\t\tscale.z = length(Row[2]);\n\t\tRow[2] = detail::scale(Row[2], static_cast<T>(1));\n\n\t\t// At this point, the matrix (in rows[]) is orthonormal.\n\t\t// Check for a coordinate system flip.  If the determinant\n\t\t// is -1, then negate the matrix and the scaling factors.\n#if 0\n\t\tPdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3);\n\t\tif (dot(Row[0], Pdum3) < 0)\n\t\t{\n\t\t\tfor (length_t i = 0; i < 3; i++)\n\t\t\t{\n\t\t\t\tscale[i] *= static_cast<T>(-1);\n\t\t\t\tRow[i] *= static_cast<T>(-1);\n\t\t\t}\n\t\t}\n#endif\n\n\t\trotation.y = asin(-Row[0][2]);\n\t\tif (cos(rotation.y) != 0) {\n\t\t\trotation.x = atan2(Row[1][2], Row[2][2]);\n\t\t\trotation.z = atan2(Row[0][1], Row[0][0]);\n\t\t}\n\t\telse {\n\t\t\trotation.x = atan2(-Row[2][0], Row[1][1]);\n\t\t\trotation.z = 0;\n\t\t}\n\n\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Math/Math.h",
    "content": "#pragma once\n\n#include <glm/glm.hpp>\n\nnamespace Hazel::Math {\n\n\tbool DecomposeTransform(const glm::mat4& transform, glm::vec3& translation, glm::vec3& rotation, glm::vec3& scale);\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Physics/Physics2D.h",
    "content": "#pragma once\n\n#include \"Hazel/Scene/Components.h\"\n\n#include \"box2d/b2_body.h\"\n\nnamespace Hazel {\n\n\tnamespace Utils {\n\n\t\tinline b2BodyType Rigidbody2DTypeToBox2DBody(Rigidbody2DComponent::BodyType bodyType)\n\t\t{\n\t\t\tswitch (bodyType)\n\t\t\t{\n\t\t\t\tcase Rigidbody2DComponent::BodyType::Static:    return b2_staticBody;\n\t\t\t\tcase Rigidbody2DComponent::BodyType::Dynamic:   return b2_dynamicBody;\n\t\t\t\tcase Rigidbody2DComponent::BodyType::Kinematic: return b2_kinematicBody;\n\t\t\t}\n\n\t\t\tHZ_CORE_ASSERT(false, \"Unknown body type\");\n\t\t\treturn b2_staticBody;\n\t\t}\n\n\t\tinline Rigidbody2DComponent::BodyType Rigidbody2DTypeFromBox2DBody(b2BodyType bodyType)\n\t\t{\n\t\t\tswitch (bodyType)\n\t\t\t{\n\t\t\t\tcase b2_staticBody:    return Rigidbody2DComponent::BodyType::Static;   \n\t\t\t\tcase b2_dynamicBody:   return Rigidbody2DComponent::BodyType::Dynamic;  \n\t\t\t\tcase b2_kinematicBody: return Rigidbody2DComponent::BodyType::Kinematic;\n\t\t\t}\n\n\t\t\tHZ_CORE_ASSERT(false, \"Unknown body type\");\n\t\t\treturn Rigidbody2DComponent::BodyType::Static;\n\t\t}\n\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Project/Project.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Project.h\"\n\n#include \"ProjectSerializer.h\"\n\nnamespace Hazel {\n\n\tRef<Project> Project::New()\n\t{\n\t\ts_ActiveProject = CreateRef<Project>();\n\t\treturn s_ActiveProject;\n\t}\n\n\tRef<Project> Project::Load(const std::filesystem::path& path)\n\t{\n\t\tRef<Project> project = CreateRef<Project>();\n\n\t\tProjectSerializer serializer(project);\n\t\tif (serializer.Deserialize(path))\n\t\t{\n\t\t\tproject->m_ProjectDirectory = path.parent_path();\n\t\t\ts_ActiveProject = project;\n\t\t\treturn s_ActiveProject;\n\t\t}\n\n\t\treturn nullptr;\n\t}\n\n\tbool Project::SaveActive(const std::filesystem::path& path)\n\t{\n\t\tProjectSerializer serializer(s_ActiveProject);\n\t\tif (serializer.Serialize(path))\n\t\t{\n\t\t\ts_ActiveProject->m_ProjectDirectory = path.parent_path();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Project/Project.h",
    "content": "#pragma once\n\n#include <string>\n#include <filesystem>\n\n#include \"Hazel/Core/Base.h\"\n\nnamespace Hazel {\n\n\tstruct ProjectConfig\n\t{\n\t\tstd::string Name = \"Untitled\";\n\n\t\tstd::filesystem::path StartScene;\n\n\t\tstd::filesystem::path AssetDirectory;\n\t\tstd::filesystem::path ScriptModulePath;\n\t};\n\n\tclass Project\n\t{\n\tpublic:\n\t\tstatic const std::filesystem::path& GetProjectDirectory()\n\t\t{\n\t\t\tHZ_CORE_ASSERT(s_ActiveProject);\n\t\t\treturn s_ActiveProject->m_ProjectDirectory;\n\t\t}\n\n\t\tstatic std::filesystem::path GetAssetDirectory()\n\t\t{\n\t\t\tHZ_CORE_ASSERT(s_ActiveProject);\n\t\t\treturn GetProjectDirectory() / s_ActiveProject->m_Config.AssetDirectory;\n\t\t}\n\n\t\t// TODO(Yan): move to asset manager when we have one\n\t\tstatic std::filesystem::path GetAssetFileSystemPath(const std::filesystem::path& path)\n\t\t{\n\t\t\tHZ_CORE_ASSERT(s_ActiveProject);\n\t\t\treturn GetAssetDirectory() / path;\n\t\t}\n\n\t\tProjectConfig& GetConfig() { return m_Config; }\n\n\t\tstatic Ref<Project> GetActive() { return s_ActiveProject; }\n\n\t\tstatic Ref<Project> New();\n\t\tstatic Ref<Project> Load(const std::filesystem::path& path);\n\t\tstatic bool SaveActive(const std::filesystem::path& path);\n\tprivate:\n\t\tProjectConfig m_Config;\n\t\tstd::filesystem::path m_ProjectDirectory;\n\n\t\tinline static Ref<Project> s_ActiveProject;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Project/ProjectSerializer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"ProjectSerializer.h\"\n\n#include <fstream>\n#include <yaml-cpp/yaml.h>\n\nnamespace Hazel {\n\n\tProjectSerializer::ProjectSerializer(Ref<Project> project)\n\t\t: m_Project(project)\n\t{\n\t}\n\n\tbool ProjectSerializer::Serialize(const std::filesystem::path& filepath)\n\t{\n\t\tconst auto& config = m_Project->GetConfig();\n\n\t\tYAML::Emitter out;\n\t\t{\n\t\t\tout << YAML::BeginMap; // Root\n\t\t\tout << YAML::Key << \"Project\" << YAML::Value;\n\t\t\t{\n\t\t\t\tout << YAML::BeginMap;// Project\n\t\t\t\tout << YAML::Key << \"Name\" << YAML::Value << config.Name;\n\t\t\t\tout << YAML::Key << \"StartScene\" << YAML::Value << config.StartScene.string();\n\t\t\t\tout << YAML::Key << \"AssetDirectory\" << YAML::Value << config.AssetDirectory.string();\n\t\t\t\tout << YAML::Key << \"ScriptModulePath\" << YAML::Value << config.ScriptModulePath.string();\n\t\t\t\tout << YAML::EndMap; // Project\n\t\t\t}\n\t\t\tout << YAML::EndMap; // Root\n\t\t}\n\n\t\tstd::ofstream fout(filepath);\n\t\tfout << out.c_str();\n\n\t\treturn true;\n\t}\n\n\tbool ProjectSerializer::Deserialize(const std::filesystem::path& filepath)\n\t{\n\t\tauto& config = m_Project->GetConfig();\n\n\t\tYAML::Node data;\n\t\ttry\n\t\t{\n\t\t\tdata = YAML::LoadFile(filepath.string());\n\t\t}\n\t\tcatch (YAML::ParserException e)\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"Failed to load project file '{0}'\\n     {1}\", filepath, e.what());\n\t\t\treturn false;\n\t\t}\n\n\t\tauto projectNode = data[\"Project\"];\n\t\tif (!projectNode)\n\t\t\treturn false;\n\n\t\tconfig.Name = projectNode[\"Name\"].as<std::string>();\n\t\tconfig.StartScene = projectNode[\"StartScene\"].as<std::string>();\n\t\tconfig.AssetDirectory = projectNode[\"AssetDirectory\"].as<std::string>();\n\t\tconfig.ScriptModulePath = projectNode[\"ScriptModulePath\"].as<std::string>();\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Project/ProjectSerializer.h",
    "content": "#pragma once\n\n#include \"Project.h\"\n\nnamespace Hazel {\n\n\tclass ProjectSerializer\n\t{\n\tpublic:\n\t\tProjectSerializer(Ref<Project> project);\n\n\t\tbool Serialize(const std::filesystem::path& filepath);\n\t\tbool Deserialize(const std::filesystem::path& filepath);\n\tprivate:\n\t\tRef<Project> m_Project;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Buffer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/Buffer.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n\n#include \"Platform/OpenGL/OpenGLBuffer.h\"\n\nnamespace Hazel {\n\n\tRef<VertexBuffer> VertexBuffer::Create(uint32_t size)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLVertexBuffer>(size);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n\tRef<VertexBuffer> VertexBuffer::Create(float* vertices, uint32_t size)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLVertexBuffer>(vertices, size);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n\tRef<IndexBuffer> IndexBuffer::Create(uint32_t* indices, uint32_t size)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLIndexBuffer>(indices, size);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Buffer.h",
    "content": "#pragma once\n\nnamespace Hazel {\n\n\tenum class ShaderDataType\n\t{\n\t\tNone = 0, Float, Float2, Float3, Float4, Mat3, Mat4, Int, Int2, Int3, Int4, Bool\n\t};\n\n\tstatic uint32_t ShaderDataTypeSize(ShaderDataType type)\n\t{\n\t\tswitch (type)\n\t\t{\n\t\t\tcase ShaderDataType::Float:    return 4;\n\t\t\tcase ShaderDataType::Float2:   return 4 * 2;\n\t\t\tcase ShaderDataType::Float3:   return 4 * 3;\n\t\t\tcase ShaderDataType::Float4:   return 4 * 4;\n\t\t\tcase ShaderDataType::Mat3:     return 4 * 3 * 3;\n\t\t\tcase ShaderDataType::Mat4:     return 4 * 4 * 4;\n\t\t\tcase ShaderDataType::Int:      return 4;\n\t\t\tcase ShaderDataType::Int2:     return 4 * 2;\n\t\t\tcase ShaderDataType::Int3:     return 4 * 3;\n\t\t\tcase ShaderDataType::Int4:     return 4 * 4;\n\t\t\tcase ShaderDataType::Bool:     return 1;\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown ShaderDataType!\");\n\t\treturn 0;\n\t}\n\n\tstruct BufferElement\n\t{\n\t\tstd::string Name;\n\t\tShaderDataType Type;\n\t\tuint32_t Size;\n\t\tsize_t Offset;\n\t\tbool Normalized;\n\n\t\tBufferElement() = default;\n\n\t\tBufferElement(ShaderDataType type, const std::string& name, bool normalized = false)\n\t\t\t: Name(name), Type(type), Size(ShaderDataTypeSize(type)), Offset(0), Normalized(normalized)\n\t\t{\n\t\t}\n\n\t\tuint32_t GetComponentCount() const\n\t\t{\n\t\t\tswitch (Type)\n\t\t\t{\n\t\t\t\tcase ShaderDataType::Float:   return 1;\n\t\t\t\tcase ShaderDataType::Float2:  return 2;\n\t\t\t\tcase ShaderDataType::Float3:  return 3;\n\t\t\t\tcase ShaderDataType::Float4:  return 4;\n\t\t\t\tcase ShaderDataType::Mat3:    return 3; // 3* float3\n\t\t\t\tcase ShaderDataType::Mat4:    return 4; // 4* float4\n\t\t\t\tcase ShaderDataType::Int:     return 1;\n\t\t\t\tcase ShaderDataType::Int2:    return 2;\n\t\t\t\tcase ShaderDataType::Int3:    return 3;\n\t\t\t\tcase ShaderDataType::Int4:    return 4;\n\t\t\t\tcase ShaderDataType::Bool:    return 1;\n\t\t\t}\n\n\t\t\tHZ_CORE_ASSERT(false, \"Unknown ShaderDataType!\");\n\t\t\treturn 0;\n\t\t}\n\t};\n\n\tclass BufferLayout\n\t{\n\tpublic:\n\t\tBufferLayout() {}\n\n\t\tBufferLayout(std::initializer_list<BufferElement> elements)\n\t\t\t: m_Elements(elements)\n\t\t{\n\t\t\tCalculateOffsetsAndStride();\n\t\t}\n\n\t\tuint32_t GetStride() const { return m_Stride; }\n\t\tconst std::vector<BufferElement>& GetElements() const { return m_Elements; }\n\n\t\tstd::vector<BufferElement>::iterator begin() { return m_Elements.begin(); }\n\t\tstd::vector<BufferElement>::iterator end() { return m_Elements.end(); }\n\t\tstd::vector<BufferElement>::const_iterator begin() const { return m_Elements.begin(); }\n\t\tstd::vector<BufferElement>::const_iterator end() const { return m_Elements.end(); }\n\tprivate:\n\t\tvoid CalculateOffsetsAndStride()\n\t\t{\n\t\t\tsize_t offset = 0;\n\t\t\tm_Stride = 0;\n\t\t\tfor (auto& element : m_Elements)\n\t\t\t{\n\t\t\t\telement.Offset = offset;\n\t\t\t\toffset += element.Size;\n\t\t\t\tm_Stride += element.Size;\n\t\t\t}\n\t\t}\n\tprivate:\n\t\tstd::vector<BufferElement> m_Elements;\n\t\tuint32_t m_Stride = 0;\n\t};\n\n\tclass VertexBuffer\n\t{\n\tpublic:\n\t\tvirtual ~VertexBuffer() = default;\n\n\t\tvirtual void Bind() const = 0;\n\t\tvirtual void Unbind() const = 0;\n\n\t\tvirtual void SetData(const void* data, uint32_t size) = 0;\n\n\t\tvirtual const BufferLayout& GetLayout() const = 0;\n\t\tvirtual void SetLayout(const BufferLayout& layout) = 0;\n\n\t\tstatic Ref<VertexBuffer> Create(uint32_t size);\n\t\tstatic Ref<VertexBuffer> Create(float* vertices, uint32_t size);\n\t};\n\n\t// Currently Hazel only supports 32-bit index buffers\n\tclass IndexBuffer\n\t{\n\tpublic:\n\t\tvirtual ~IndexBuffer() = default;\n\n\t\tvirtual void Bind() const = 0;\n\t\tvirtual void Unbind() const = 0;\n\n\t\tvirtual uint32_t GetCount() const = 0;\n\n\t\tstatic Ref<IndexBuffer> Create(uint32_t* indices, uint32_t count);\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Camera.h",
    "content": "#pragma once\n\n#include <glm/glm.hpp>\n\nnamespace Hazel {\n\n\tclass Camera\n\t{\n\tpublic:\n\t\tCamera() = default;\n\t\tCamera(const glm::mat4& projection)\n\t\t\t: m_Projection(projection) {}\n\n\t\tvirtual ~Camera() = default;\n\n\t\tconst glm::mat4& GetProjection() const { return m_Projection; }\n\tprotected:\n\t\tglm::mat4 m_Projection = glm::mat4(1.0f);\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/EditorCamera.cpp",
    "content": "#include \"hzpch.h\"\n#include \"EditorCamera.h\"\n\n#include \"Hazel/Core/Input.h\"\n#include \"Hazel/Core/KeyCodes.h\"\n#include \"Hazel/Core/MouseCodes.h\"\n\n#include <glfw/glfw3.h>\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/quaternion.hpp>\n\nnamespace Hazel {\n\n\tEditorCamera::EditorCamera(float fov, float aspectRatio, float nearClip, float farClip)\n\t\t: m_FOV(fov), m_AspectRatio(aspectRatio), m_NearClip(nearClip), m_FarClip(farClip), Camera(glm::perspective(glm::radians(fov), aspectRatio, nearClip, farClip))\n\t{\n\t\tUpdateView();\n\t}\n\n\tvoid EditorCamera::UpdateProjection()\n\t{\n\t\tm_AspectRatio = m_ViewportWidth / m_ViewportHeight;\n\t\tm_Projection = glm::perspective(glm::radians(m_FOV), m_AspectRatio, m_NearClip, m_FarClip);\n\t}\n\n\tvoid EditorCamera::UpdateView()\n\t{\n\t\t// m_Yaw = m_Pitch = 0.0f; // Lock the camera's rotation\n\t\tm_Position = CalculatePosition();\n\n\t\tglm::quat orientation = GetOrientation();\n\t\tm_ViewMatrix = glm::translate(glm::mat4(1.0f), m_Position) * glm::toMat4(orientation);\n\t\tm_ViewMatrix = glm::inverse(m_ViewMatrix);\n\t}\n\n\tstd::pair<float, float> EditorCamera::PanSpeed() const\n\t{\n\t\tfloat x = std::min(m_ViewportWidth / 1000.0f, 2.4f); // max = 2.4f\n\t\tfloat xFactor = 0.0366f * (x * x) - 0.1778f * x + 0.3021f;\n\n\t\tfloat y = std::min(m_ViewportHeight / 1000.0f, 2.4f); // max = 2.4f\n\t\tfloat yFactor = 0.0366f * (y * y) - 0.1778f * y + 0.3021f;\n\n\t\treturn { xFactor, yFactor };\n\t}\n\n\tfloat EditorCamera::RotationSpeed() const\n\t{\n\t\treturn 0.8f;\n\t}\n\n\tfloat EditorCamera::ZoomSpeed() const\n\t{\n\t\tfloat distance = m_Distance * 0.2f;\n\t\tdistance = std::max(distance, 0.0f);\n\t\tfloat speed = distance * distance;\n\t\tspeed = std::min(speed, 100.0f); // max speed = 100\n\t\treturn speed;\n\t}\n\n\tvoid EditorCamera::OnUpdate(Timestep ts)\n\t{\n\t\tif (Input::IsKeyPressed(Key::LeftAlt))\n\t\t{\n\t\t\tconst glm::vec2& mouse{ Input::GetMouseX(), Input::GetMouseY() };\n\t\t\tglm::vec2 delta = (mouse - m_InitialMousePosition) * 0.003f;\n\t\t\tm_InitialMousePosition = mouse;\n\n\t\t\tif (Input::IsMouseButtonPressed(Mouse::ButtonMiddle))\n\t\t\t\tMousePan(delta);\n\t\t\telse if (Input::IsMouseButtonPressed(Mouse::ButtonLeft))\n\t\t\t\tMouseRotate(delta);\n\t\t\telse if (Input::IsMouseButtonPressed(Mouse::ButtonRight))\n\t\t\t\tMouseZoom(delta.y);\n\t\t}\n\n\t\tUpdateView();\n\t}\n\n\tvoid EditorCamera::OnEvent(Event& e)\n\t{\n\t\tEventDispatcher dispatcher(e);\n\t\tdispatcher.Dispatch<MouseScrolledEvent>(HZ_BIND_EVENT_FN(EditorCamera::OnMouseScroll));\n\t}\n\n\tbool EditorCamera::OnMouseScroll(MouseScrolledEvent& e)\n\t{\n\t\tfloat delta = e.GetYOffset() * 0.1f;\n\t\tMouseZoom(delta);\n\t\tUpdateView();\n\t\treturn false;\n\t}\n\n\tvoid EditorCamera::MousePan(const glm::vec2& delta)\n\t{\n\t\tauto [xSpeed, ySpeed] = PanSpeed();\n\t\tm_FocalPoint += -GetRightDirection() * delta.x * xSpeed * m_Distance;\n\t\tm_FocalPoint += GetUpDirection() * delta.y * ySpeed * m_Distance;\n\t}\n\n\tvoid EditorCamera::MouseRotate(const glm::vec2& delta)\n\t{\n\t\tfloat yawSign = GetUpDirection().y < 0 ? -1.0f : 1.0f;\n\t\tm_Yaw += yawSign * delta.x * RotationSpeed();\n\t\tm_Pitch += delta.y * RotationSpeed();\n\t}\n\n\tvoid EditorCamera::MouseZoom(float delta)\n\t{\n\t\tm_Distance -= delta * ZoomSpeed();\n\t\tif (m_Distance < 1.0f)\n\t\t{\n\t\t\tm_FocalPoint += GetForwardDirection();\n\t\t\tm_Distance = 1.0f;\n\t\t}\n\t}\n\n\tglm::vec3 EditorCamera::GetUpDirection() const\n\t{\n\t\treturn glm::rotate(GetOrientation(), glm::vec3(0.0f, 1.0f, 0.0f));\n\t}\n\n\tglm::vec3 EditorCamera::GetRightDirection() const\n\t{\n\t\treturn glm::rotate(GetOrientation(), glm::vec3(1.0f, 0.0f, 0.0f));\n\t}\n\n\tglm::vec3 EditorCamera::GetForwardDirection() const\n\t{\n\t\treturn glm::rotate(GetOrientation(), glm::vec3(0.0f, 0.0f, -1.0f));\n\t}\n\n\tglm::vec3 EditorCamera::CalculatePosition() const\n\t{\n\t\treturn m_FocalPoint - GetForwardDirection() * m_Distance;\n\t}\n\n\tglm::quat EditorCamera::GetOrientation() const\n\t{\n\t\treturn glm::quat(glm::vec3(-m_Pitch, -m_Yaw, 0.0f));\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/EditorCamera.h",
    "content": "#pragma once\n\n#include \"Camera.h\"\n#include \"Hazel/Core/Timestep.h\"\n#include \"Hazel/Events/Event.h\"\n#include \"Hazel/Events/MouseEvent.h\"\n\n#include <glm/glm.hpp>\n\nnamespace Hazel {\n\n\tclass EditorCamera : public Camera\n\t{\n\tpublic:\n\t\tEditorCamera() = default;\n\t\tEditorCamera(float fov, float aspectRatio, float nearClip, float farClip);\n\n\t\tvoid OnUpdate(Timestep ts);\n\t\tvoid OnEvent(Event& e);\n\n\t\tinline float GetDistance() const { return m_Distance; }\n\t\tinline void SetDistance(float distance) { m_Distance = distance; }\n\n\t\tinline void SetViewportSize(float width, float height) { m_ViewportWidth = width; m_ViewportHeight = height; UpdateProjection(); }\n\n\t\tconst glm::mat4& GetViewMatrix() const { return m_ViewMatrix; }\n\t\tglm::mat4 GetViewProjection() const { return m_Projection * m_ViewMatrix; }\n\n\t\tglm::vec3 GetUpDirection() const;\n\t\tglm::vec3 GetRightDirection() const;\n\t\tglm::vec3 GetForwardDirection() const;\n\t\tconst glm::vec3& GetPosition() const { return m_Position; }\n\t\tglm::quat GetOrientation() const;\n\n\t\tfloat GetPitch() const { return m_Pitch; }\n\t\tfloat GetYaw() const { return m_Yaw; }\n\tprivate:\n\t\tvoid UpdateProjection();\n\t\tvoid UpdateView();\n\n\t\tbool OnMouseScroll(MouseScrolledEvent& e);\n\n\t\tvoid MousePan(const glm::vec2& delta);\n\t\tvoid MouseRotate(const glm::vec2& delta);\n\t\tvoid MouseZoom(float delta);\n\n\t\tglm::vec3 CalculatePosition() const;\n\n\t\tstd::pair<float, float> PanSpeed() const;\n\t\tfloat RotationSpeed() const;\n\t\tfloat ZoomSpeed() const;\n\tprivate:\n\t\tfloat m_FOV = 45.0f, m_AspectRatio = 1.778f, m_NearClip = 0.1f, m_FarClip = 1000.0f;\n\n\t\tglm::mat4 m_ViewMatrix;\n\t\tglm::vec3 m_Position = { 0.0f, 0.0f, 0.0f };\n\t\tglm::vec3 m_FocalPoint = { 0.0f, 0.0f, 0.0f };\n\n\t\tglm::vec2 m_InitialMousePosition = { 0.0f, 0.0f };\n\n\t\tfloat m_Distance = 10.0f;\n\t\tfloat m_Pitch = 0.0f, m_Yaw = 0.0f;\n\n\t\tfloat m_ViewportWidth = 1280, m_ViewportHeight = 720;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Font.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Font.h\"\n\n#undef INFINITE\n#include \"msdf-atlas-gen.h\"\n#include \"FontGeometry.h\"\n#include \"GlyphGeometry.h\"\n\n#include \"MSDFData.h\"\n\nnamespace Hazel {\n\n\ttemplate<typename T, typename S, int N, msdf_atlas::GeneratorFunction<S, N> GenFunc>\n\tstatic Ref<Texture2D> CreateAndCacheAtlas(const std::string& fontName, float fontSize, const std::vector<msdf_atlas::GlyphGeometry>& glyphs,\n\t\tconst msdf_atlas::FontGeometry& fontGeometry, uint32_t width, uint32_t height)\n\t{\n\t\tmsdf_atlas::GeneratorAttributes attributes;\n\t\tattributes.config.overlapSupport = true;\n\t\tattributes.scanlinePass = true;\n\n\t\tmsdf_atlas::ImmediateAtlasGenerator<S, N, GenFunc, msdf_atlas::BitmapAtlasStorage<T, N>> generator(width, height);\n\t\tgenerator.setAttributes(attributes);\n\t\tgenerator.setThreadCount(8);\n\t\tgenerator.generate(glyphs.data(), (int)glyphs.size());\n\n\t\tmsdfgen::BitmapConstRef<T, N> bitmap = (msdfgen::BitmapConstRef<T, N>)generator.atlasStorage();\n\n\t\tTextureSpecification spec;\n\t\tspec.Width = bitmap.width;\n\t\tspec.Height = bitmap.height;\n\t\tspec.Format = ImageFormat::RGB8;\n\t\tspec.GenerateMips = false;\n\n\t\tRef<Texture2D> texture = Texture2D::Create(spec);\n\t\ttexture->SetData((void*)bitmap.pixels, bitmap.width * bitmap.height * 3);\n\t\treturn texture;\n\t}\n\n\tFont::Font(const std::filesystem::path& filepath)\n\t\t: m_Data(new MSDFData())\n\t{\n\t\tmsdfgen::FreetypeHandle* ft = msdfgen::initializeFreetype();\n\t\tHZ_CORE_ASSERT(ft);\n\t\t\n\t\tstd::string fileString = filepath.string();\n\n\t\t// TODO(Yan): msdfgen::loadFontData loads from memory buffer which we'll need \n\t\tmsdfgen::FontHandle* font = msdfgen::loadFont(ft, fileString.c_str());\n\t\tif (!font)\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"Failed to load font: {}\", fileString);\n\t\t\treturn;\n\t\t}\n\n\t\tstruct CharsetRange\n\t\t{\n\t\t\tuint32_t Begin, End;\n\t\t};\n\n\t\t// From imgui_draw.cpp\n\t\tstatic const CharsetRange charsetRanges[] =\n\t\t{\n\t\t\t{ 0x0020, 0x00FF }\n\t\t};\n\n\t\tmsdf_atlas::Charset charset;\n\t\tfor (CharsetRange range : charsetRanges)\n\t\t{\n\t\t\tfor (uint32_t c = range.Begin; c <= range.End; c++)\n\t\t\t\tcharset.add(c);\n\t\t}\n\t\t\n\t\tdouble fontScale = 1.0;\n\t\tm_Data->FontGeometry = msdf_atlas::FontGeometry(&m_Data->Glyphs);\n\t\tint glyphsLoaded = m_Data->FontGeometry.loadCharset(font, fontScale, charset);\n\t\tHZ_CORE_INFO(\"Loaded {} glyphs from font (out of {})\", glyphsLoaded, charset.size());\n\n\n\t\tdouble emSize = 40.0;\n\n\t\tmsdf_atlas::TightAtlasPacker atlasPacker;\n\t\t// atlasPacker.setDimensionsConstraint()\n\t\tatlasPacker.setPixelRange(2.0);\n\t\tatlasPacker.setMiterLimit(1.0);\n\t\tatlasPacker.setPadding(0);\n\t\tatlasPacker.setScale(emSize);\n\t\tint remaining = atlasPacker.pack(m_Data->Glyphs.data(), (int)m_Data->Glyphs.size());\n\t\tHZ_CORE_ASSERT(remaining == 0);\n\n\t\tint width, height;\n\t\tatlasPacker.getDimensions(width, height);\n\t\temSize = atlasPacker.getScale();\n\n#define DEFAULT_ANGLE_THRESHOLD 3.0\n#define LCG_MULTIPLIER 6364136223846793005ull\n#define LCG_INCREMENT 1442695040888963407ull\n#define THREAD_COUNT 8\n\t\t// if MSDF || MTSDF\n\n\t\tuint64_t coloringSeed = 0;\n\t\tbool expensiveColoring = false;\n\t\tif (expensiveColoring)\n\t\t{\n\t\t\tmsdf_atlas::Workload([&glyphs = m_Data->Glyphs, &coloringSeed](int i, int threadNo) -> bool {\n\t\t\t\tunsigned long long glyphSeed = (LCG_MULTIPLIER * (coloringSeed ^ i) + LCG_INCREMENT) * !!coloringSeed;\n\t\t\t\tglyphs[i].edgeColoring(msdfgen::edgeColoringInkTrap, DEFAULT_ANGLE_THRESHOLD, glyphSeed);\n\t\t\t\treturn true;\n\t\t\t\t}, m_Data->Glyphs.size()).finish(THREAD_COUNT);\n\t\t}\n\t\telse {\n\t\t\tunsigned long long glyphSeed = coloringSeed;\n\t\t\tfor (msdf_atlas::GlyphGeometry& glyph : m_Data->Glyphs)\n\t\t\t{\n\t\t\t\tglyphSeed *= LCG_MULTIPLIER;\n\t\t\t\tglyph.edgeColoring(msdfgen::edgeColoringInkTrap, DEFAULT_ANGLE_THRESHOLD, glyphSeed);\n\t\t\t}\n\t\t}\n\n\n\t\tm_AtlasTexture = CreateAndCacheAtlas<uint8_t, float, 3, msdf_atlas::msdfGenerator>(\"Test\", (float)emSize, m_Data->Glyphs, m_Data->FontGeometry, width, height);\n\n\n#if 0\n\t\tmsdfgen::Shape shape;\n\t\tif (msdfgen::loadGlyph(shape, font, 'C'))\n\t\t{\n\t\t\tshape.normalize();\n\t\t\t//                      max. angle\n\t\t\tmsdfgen::edgeColoringSimple(shape, 3.0);\n\t\t\t//           image width, height\n\t\t\tmsdfgen::Bitmap<float, 3> msdf(32, 32);\n\t\t\t//                     range, scale, translation\n\t\t\tmsdfgen::generateMSDF(msdf, shape, 4.0, 1.0, msdfgen::Vector2(4.0, 4.0));\n\t\t\tmsdfgen::savePng(msdf, \"output.png\");\n\t\t}\n#endif\n\n\t\tmsdfgen::destroyFont(font);\n\t\tmsdfgen::deinitializeFreetype(ft);\n\t}\n\n\tFont::~Font()\n\t{\n\t\tdelete m_Data;\n\t}\n\n\n\tRef<Font> Font::GetDefault()\n\t{\n\t\tstatic Ref<Font> DefaultFont;\n\t\tif (!DefaultFont)\n\t\t\tDefaultFont = CreateRef<Font>(\"assets/fonts/opensans/OpenSans-Regular.ttf\");\n\n\t\treturn DefaultFont;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Font.h",
    "content": "#pragma once\n\n#include <filesystem>\n\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Renderer/Texture.h\"\n\nnamespace Hazel {\n\n\tstruct MSDFData;\n\n\tclass Font\n\t{\n\tpublic:\n\t\tFont(const std::filesystem::path& font);\n\t\t~Font();\n\n\t\tconst MSDFData* GetMSDFData() const { return m_Data; }\n\t\tRef<Texture2D> GetAtlasTexture() const { return m_AtlasTexture; }\n\n\t\tstatic Ref<Font> GetDefault();\n\tprivate:\n\t\tMSDFData* m_Data;\n\t\tRef<Texture2D> m_AtlasTexture;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Framebuffer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/Framebuffer.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n\n#include \"Platform/OpenGL/OpenGLFramebuffer.h\"\n\nnamespace Hazel {\n\t\n\tRef<Framebuffer> Framebuffer::Create(const FramebufferSpecification& spec)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLFramebuffer>(spec);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}\n\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Framebuffer.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n\nnamespace Hazel {\n\n\tenum class FramebufferTextureFormat\n\t{\n\t\tNone = 0,\n\n\t\t// Color\n\t\tRGBA8,\n\t\tRED_INTEGER,\n\n\t\t// Depth/stencil\n\t\tDEPTH24STENCIL8,\n\n\t\t// Defaults\n\t\tDepth = DEPTH24STENCIL8\n\t};\n\n\tstruct FramebufferTextureSpecification\n\t{\n\t\tFramebufferTextureSpecification() = default;\n\t\tFramebufferTextureSpecification(FramebufferTextureFormat format)\n\t\t\t: TextureFormat(format) {}\n\n\t\tFramebufferTextureFormat TextureFormat = FramebufferTextureFormat::None;\n\t\t// TODO: filtering/wrap\n\t};\n\n\tstruct FramebufferAttachmentSpecification\n\t{\n\t\tFramebufferAttachmentSpecification() = default;\n\t\tFramebufferAttachmentSpecification(std::initializer_list<FramebufferTextureSpecification> attachments)\n\t\t\t: Attachments(attachments) {}\n\n\t\tstd::vector<FramebufferTextureSpecification> Attachments;\n\t};\n\n\tstruct FramebufferSpecification\n\t{\n\t\tuint32_t Width = 0, Height = 0;\n\t\tFramebufferAttachmentSpecification Attachments;\n\t\tuint32_t Samples = 1;\n\n\t\tbool SwapChainTarget = false;\n\t};\n\n\tclass Framebuffer\n\t{\n\tpublic:\n\t\tvirtual ~Framebuffer() = default;\n\n\t\tvirtual void Bind() = 0;\n\t\tvirtual void Unbind() = 0;\n\n\t\tvirtual void Resize(uint32_t width, uint32_t height) = 0;\n\t\tvirtual int ReadPixel(uint32_t attachmentIndex, int x, int y) = 0;\n\n\t\tvirtual void ClearAttachment(uint32_t attachmentIndex, int value) = 0;\n\n\t\tvirtual uint32_t GetColorAttachmentRendererID(uint32_t index = 0) const = 0;\n\n\t\tvirtual const FramebufferSpecification& GetSpecification() const = 0;\n\n\t\tstatic Ref<Framebuffer> Create(const FramebufferSpecification& spec);\n\t};\n\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/GraphicsContext.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/GraphicsContext.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Platform/OpenGL/OpenGLContext.h\"\n\nnamespace Hazel {\n\n\tScope<GraphicsContext> GraphicsContext::Create(void* window)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateScope<OpenGLContext>(static_cast<GLFWwindow*>(window));\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/GraphicsContext.h",
    "content": "#pragma once\n\nnamespace Hazel {\n\n\tclass GraphicsContext\n\t{\n\tpublic:\n\t\tvirtual ~GraphicsContext() = default;\n\n\t\tvirtual void Init() = 0;\n\t\tvirtual void SwapBuffers() = 0;\n\n\t\tstatic Scope<GraphicsContext> Create(void* window);\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/MSDFData.h",
    "content": "#pragma once\n\n#include <vector>\n\n#undef INFINITE\n#include \"msdf-atlas-gen.h\"\n\nnamespace Hazel {\n\n\tstruct MSDFData\n\t{\n\t\tstd::vector<msdf_atlas::GlyphGeometry> Glyphs;\n\t\tmsdf_atlas::FontGeometry FontGeometry;\n\t};\n\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/OrthographicCamera.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/OrthographicCamera.h\"\n\n#include <glm/gtc/matrix_transform.hpp>\n\nnamespace Hazel {\n\n\tOrthographicCamera::OrthographicCamera(float left, float right, float bottom, float top)\n\t\t: m_ProjectionMatrix(glm::ortho(left, right, bottom, top, -1.0f, 1.0f)), m_ViewMatrix(1.0f)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_ViewProjectionMatrix = m_ProjectionMatrix * m_ViewMatrix;\n\t}\n\n\tvoid OrthographicCamera::SetProjection(float left, float right, float bottom, float top)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_ProjectionMatrix = glm::ortho(left, right, bottom, top, -1.0f, 1.0f);\n\t\tm_ViewProjectionMatrix = m_ProjectionMatrix * m_ViewMatrix;\n\t}\n\n\tvoid OrthographicCamera::RecalculateViewMatrix()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), m_Position) *\n\t\t\tglm::rotate(glm::mat4(1.0f), glm::radians(m_Rotation), glm::vec3(0, 0, 1));\n\n\t\tm_ViewMatrix = glm::inverse(transform);\n\t\tm_ViewProjectionMatrix = m_ProjectionMatrix * m_ViewMatrix;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/OrthographicCamera.h",
    "content": "#pragma once\n\n#include <glm/glm.hpp>\n\nnamespace Hazel {\n\n\tclass OrthographicCamera\n\t{\n\tpublic:\n\t\tOrthographicCamera(float left, float right, float bottom, float top);\n\n\t\tvoid SetProjection(float left, float right, float bottom, float top);\n\n\t\tconst glm::vec3& GetPosition() const { return m_Position; }\n\t\tvoid SetPosition(const glm::vec3& position) { m_Position = position; RecalculateViewMatrix(); }\n\n\t\tfloat GetRotation() const { return m_Rotation; }\n\t\tvoid SetRotation(float rotation) { m_Rotation = rotation; RecalculateViewMatrix(); }\n\n\t\tconst glm::mat4& GetProjectionMatrix() const { return m_ProjectionMatrix; }\n\t\tconst glm::mat4& GetViewMatrix() const { return m_ViewMatrix; }\n\t\tconst glm::mat4& GetViewProjectionMatrix() const { return m_ViewProjectionMatrix; }\n\tprivate:\n\t\tvoid RecalculateViewMatrix();\n\tprivate:\n\t\tglm::mat4 m_ProjectionMatrix;\n\t\tglm::mat4 m_ViewMatrix;\n\t\tglm::mat4 m_ViewProjectionMatrix;\n\n\t\tglm::vec3 m_Position = { 0.0f, 0.0f, 0.0f };\n\t\tfloat m_Rotation = 0.0f;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/OrthographicCameraController.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/OrthographicCameraController.h\"\n\n#include \"Hazel/Core/Input.h\"\n#include \"Hazel/Core/KeyCodes.h\"\n\nnamespace Hazel {\n\n\tOrthographicCameraController::OrthographicCameraController(float aspectRatio, bool rotation)\n\t\t: m_AspectRatio(aspectRatio), m_Camera(-m_AspectRatio * m_ZoomLevel, m_AspectRatio * m_ZoomLevel, -m_ZoomLevel, m_ZoomLevel), m_Rotation(rotation)\n\t{\n\t}\n\n\tvoid OrthographicCameraController::OnUpdate(Timestep ts)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tif (Input::IsKeyPressed(Key::A))\n\t\t{\n\t\t\tm_CameraPosition.x -= cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t\tm_CameraPosition.y -= sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t}\n\t\telse if (Input::IsKeyPressed(Key::D))\n\t\t{\n\t\t\tm_CameraPosition.x += cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t\tm_CameraPosition.y += sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t}\n\n\t\tif (Input::IsKeyPressed(Key::W))\n\t\t{\n\t\t\tm_CameraPosition.x += -sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t\tm_CameraPosition.y += cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t}\n\t\telse if (Input::IsKeyPressed(Key::S))\n\t\t{\n\t\t\tm_CameraPosition.x -= -sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t\tm_CameraPosition.y -= cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts;\n\t\t}\n\n\t\tif (m_Rotation)\n\t\t{\n\t\t\tif (Input::IsKeyPressed(Key::Q))\n\t\t\t\tm_CameraRotation += m_CameraRotationSpeed * ts;\n\t\t\tif (Input::IsKeyPressed(Key::E))\n\t\t\t\tm_CameraRotation -= m_CameraRotationSpeed * ts;\n\n\t\t\tif (m_CameraRotation > 180.0f)\n\t\t\t\tm_CameraRotation -= 360.0f;\n\t\t\telse if (m_CameraRotation <= -180.0f)\n\t\t\t\tm_CameraRotation += 360.0f;\n\n\t\t\tm_Camera.SetRotation(m_CameraRotation);\n\t\t}\n\n\t\tm_Camera.SetPosition(m_CameraPosition);\n\n\t\tm_CameraTranslationSpeed = m_ZoomLevel;\n\t}\n\n\tvoid OrthographicCameraController::OnEvent(Event& e)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tEventDispatcher dispatcher(e);\n\t\tdispatcher.Dispatch<MouseScrolledEvent>(HZ_BIND_EVENT_FN(OrthographicCameraController::OnMouseScrolled));\n\t\tdispatcher.Dispatch<WindowResizeEvent>(HZ_BIND_EVENT_FN(OrthographicCameraController::OnWindowResized));\n\t}\n\n\tvoid OrthographicCameraController::OnResize(float width, float height)\n\t{\n\t\tm_AspectRatio = width / height;\n\t\tm_Camera.SetProjection(-m_AspectRatio * m_ZoomLevel, m_AspectRatio * m_ZoomLevel, -m_ZoomLevel, m_ZoomLevel);\n\t}\n\n\tbool OrthographicCameraController::OnMouseScrolled(MouseScrolledEvent& e)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_ZoomLevel -= e.GetYOffset() * 0.25f;\n\t\tm_ZoomLevel = std::max(m_ZoomLevel, 0.25f);\n\t\tm_Camera.SetProjection(-m_AspectRatio * m_ZoomLevel, m_AspectRatio * m_ZoomLevel, -m_ZoomLevel, m_ZoomLevel);\n\t\treturn false;\n\t}\n\n\tbool OrthographicCameraController::OnWindowResized(WindowResizeEvent& e)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tOnResize((float)e.GetWidth(), (float)e.GetHeight());\n\t\treturn false;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/OrthographicCameraController.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/OrthographicCamera.h\"\n#include \"Hazel/Core/Timestep.h\"\n\n#include \"Hazel/Events/ApplicationEvent.h\"\n#include \"Hazel/Events/MouseEvent.h\"\n\nnamespace Hazel {\n\n\tclass OrthographicCameraController\n\t{\n\tpublic:\n\t\tOrthographicCameraController(float aspectRatio, bool rotation = false);\n\n\t\tvoid OnUpdate(Timestep ts);\n\t\tvoid OnEvent(Event& e);\n\n\t\tvoid OnResize(float width, float height);\n\n\t\tOrthographicCamera& GetCamera() { return m_Camera; }\n\t\tconst OrthographicCamera& GetCamera() const { return m_Camera; }\n\n\t\tfloat GetZoomLevel() const { return m_ZoomLevel; }\n\t\tvoid SetZoomLevel(float level) { m_ZoomLevel = level; }\n\tprivate:\n\t\tbool OnMouseScrolled(MouseScrolledEvent& e);\n\t\tbool OnWindowResized(WindowResizeEvent& e);\n\tprivate:\n\t\tfloat m_AspectRatio;\n\t\tfloat m_ZoomLevel = 1.0f;\n\t\tOrthographicCamera m_Camera;\n\n\t\tbool m_Rotation;\n\n\t\tglm::vec3 m_CameraPosition = { 0.0f, 0.0f, 0.0f };\n\t\tfloat m_CameraRotation = 0.0f; //In degrees, in the anti-clockwise direction\n\t\tfloat m_CameraTranslationSpeed = 5.0f, m_CameraRotationSpeed = 180.0f;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/RenderCommand.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/RenderCommand.h\"\n\nnamespace Hazel {\n\n\tScope<RendererAPI> RenderCommand::s_RendererAPI = RendererAPI::Create();\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/RenderCommand.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/RendererAPI.h\"\n\nnamespace Hazel {\n\n\tclass RenderCommand\n\t{\n\tpublic:\n\t\tstatic void Init()\n\t\t{\n\t\t\ts_RendererAPI->Init();\n\t\t}\n\n\t\tstatic void SetViewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height)\n\t\t{\n\t\t\ts_RendererAPI->SetViewport(x, y, width, height);\n\t\t}\n\n\t\tstatic void SetClearColor(const glm::vec4& color)\n\t\t{\n\t\t\ts_RendererAPI->SetClearColor(color);\n\t\t}\n\n\t\tstatic void Clear()\n\t\t{\n\t\t\ts_RendererAPI->Clear();\n\t\t}\n\n\t\tstatic void DrawIndexed(const Ref<VertexArray>& vertexArray, uint32_t indexCount = 0)\n\t\t{\n\t\t\ts_RendererAPI->DrawIndexed(vertexArray, indexCount);\n\t\t}\n\n\t\tstatic void DrawLines(const Ref<VertexArray>& vertexArray, uint32_t vertexCount)\n\t\t{\n\t\t\ts_RendererAPI->DrawLines(vertexArray, vertexCount);\n\t\t}\n\n\t\tstatic void SetLineWidth(float width)\n\t\t{\n\t\t\ts_RendererAPI->SetLineWidth(width);\n\t\t}\n\tprivate:\n\t\tstatic Scope<RendererAPI> s_RendererAPI;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Renderer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Hazel/Renderer/Renderer2D.h\"\n\nnamespace Hazel {\n\n\tScope<Renderer::SceneData> Renderer::s_SceneData = CreateScope<Renderer::SceneData>();\n\n\tvoid Renderer::Init()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tRenderCommand::Init();\n\t\tRenderer2D::Init();\n\t}\n\n\tvoid Renderer::Shutdown()\n\t{\n\t\tRenderer2D::Shutdown();\n\t}\n\n\tvoid Renderer::OnWindowResize(uint32_t width, uint32_t height)\n\t{\n\t\tRenderCommand::SetViewport(0, 0, width, height);\n\t}\n\n\tvoid Renderer::BeginScene(OrthographicCamera& camera)\n\t{\n\t\ts_SceneData->ViewProjectionMatrix = camera.GetViewProjectionMatrix();\n\t}\n\n\tvoid Renderer::EndScene()\n\t{\n\t}\n\n\tvoid Renderer::Submit(const Ref<Shader>& shader, const Ref<VertexArray>& vertexArray, const glm::mat4& transform)\n\t{\n\t\tshader->Bind();\n\t\tshader->SetMat4(\"u_ViewProjection\", s_SceneData->ViewProjectionMatrix);\n\t\tshader->SetMat4(\"u_Transform\", transform);\n\n\t\tvertexArray->Bind();\n\t\tRenderCommand::DrawIndexed(vertexArray);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Renderer.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/RenderCommand.h\"\n\n#include \"Hazel/Renderer/OrthographicCamera.h\"\n#include \"Hazel/Renderer/Shader.h\"\n\nnamespace Hazel {\n\n\tclass Renderer\n\t{\n\tpublic:\n\t\tstatic void Init();\n\t\tstatic void Shutdown();\n\t\t\n\t\tstatic void OnWindowResize(uint32_t width, uint32_t height);\n\n\t\tstatic void BeginScene(OrthographicCamera& camera);\n\t\tstatic void EndScene();\n\n\t\tstatic void Submit(const Ref<Shader>& shader, const Ref<VertexArray>& vertexArray, const glm::mat4& transform = glm::mat4(1.0f));\n\n\t\tstatic RendererAPI::API GetAPI() { return RendererAPI::GetAPI(); }\n\tprivate:\n\t\tstruct SceneData\n\t\t{\n\t\t\tglm::mat4 ViewProjectionMatrix;\n\t\t};\n\n\t\tstatic Scope<SceneData> s_SceneData;\n\t};\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Renderer2D.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/Renderer2D.h\"\n\n#include \"Hazel/Renderer/VertexArray.h\"\n#include \"Hazel/Renderer/Shader.h\"\n#include \"Hazel/Renderer/UniformBuffer.h\"\n#include \"Hazel/Renderer/RenderCommand.h\"\n\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/type_ptr.hpp>\n\n#include \"MSDFData.h\"\n\nnamespace Hazel {\n\n\tstruct QuadVertex\n\t{\n\t\tglm::vec3 Position;\n\t\tglm::vec4 Color;\n\t\tglm::vec2 TexCoord;\n\t\tfloat TexIndex;\n\t\tfloat TilingFactor;\n\t\t\n\t\t// Editor-only\n\t\tint EntityID;\n\t};\n\n\tstruct CircleVertex\n\t{\n\t\tglm::vec3 WorldPosition;\n\t\tglm::vec3 LocalPosition;\n\t\tglm::vec4 Color;\n\t\tfloat Thickness;\n\t\tfloat Fade;\n\n\t\t// Editor-only\n\t\tint EntityID;\n\t};\n\n\tstruct LineVertex\n\t{\n\t\tglm::vec3 Position;\n\t\tglm::vec4 Color;\n\n\t\t// Editor-only\n\t\tint EntityID;\n\t};\n\n\tstruct TextVertex\n\t{\n\t\tglm::vec3 Position;\n\t\tglm::vec4 Color;\n\t\tglm::vec2 TexCoord;\n\n\t\t// TODO: bg color for outline/bg\n\n\t\t// Editor-only\n\t\tint EntityID;\n\t};\n\n\tstruct Renderer2DData\n\t{\n\t\tstatic const uint32_t MaxQuads = 20000;\n\t\tstatic const uint32_t MaxVertices = MaxQuads * 4;\n\t\tstatic const uint32_t MaxIndices = MaxQuads * 6;\n\t\tstatic const uint32_t MaxTextureSlots = 32; // TODO: RenderCaps\n\n\t\tRef<VertexArray> QuadVertexArray;\n\t\tRef<VertexBuffer> QuadVertexBuffer;\n\t\tRef<Shader> QuadShader;\n\t\tRef<Texture2D> WhiteTexture;\n\n\t\tRef<VertexArray> CircleVertexArray;\n\t\tRef<VertexBuffer> CircleVertexBuffer;\n\t\tRef<Shader> CircleShader;\n\n\t\tRef<VertexArray> LineVertexArray;\n\t\tRef<VertexBuffer> LineVertexBuffer;\n\t\tRef<Shader> LineShader;\t\n\t\t\n\t\tRef<VertexArray> TextVertexArray;\n\t\tRef<VertexBuffer> TextVertexBuffer;\n\t\tRef<Shader> TextShader;\n\n\t\tuint32_t QuadIndexCount = 0;\n\t\tQuadVertex* QuadVertexBufferBase = nullptr;\n\t\tQuadVertex* QuadVertexBufferPtr = nullptr;\n\n\t\tuint32_t CircleIndexCount = 0;\n\t\tCircleVertex* CircleVertexBufferBase = nullptr;\n\t\tCircleVertex* CircleVertexBufferPtr = nullptr;\n\n\t\tuint32_t LineVertexCount = 0;\n\t\tLineVertex* LineVertexBufferBase = nullptr;\n\t\tLineVertex* LineVertexBufferPtr = nullptr;\n\n\t\tuint32_t TextIndexCount = 0;\n\t\tTextVertex* TextVertexBufferBase = nullptr;\n\t\tTextVertex* TextVertexBufferPtr = nullptr;\n\n\t\tfloat LineWidth = 2.0f;\n\n\t\tstd::array<Ref<Texture2D>, MaxTextureSlots> TextureSlots;\n\t\tuint32_t TextureSlotIndex = 1; // 0 = white texture\n\t\t\n\t\tRef<Texture2D> FontAtlasTexture;\n\n\t\tglm::vec4 QuadVertexPositions[4];\n\n\t\tRenderer2D::Statistics Stats;\n\n\t\tstruct CameraData\n\t\t{\n\t\t\tglm::mat4 ViewProjection;\n\t\t};\n\t\tCameraData CameraBuffer;\n\t\tRef<UniformBuffer> CameraUniformBuffer;\n\t};\n\n\tstatic Renderer2DData s_Data;\n\n\tvoid Renderer2D::Init()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\ts_Data.QuadVertexArray = VertexArray::Create();\n\n\t\ts_Data.QuadVertexBuffer = VertexBuffer::Create(s_Data.MaxVertices * sizeof(QuadVertex));\n\t\ts_Data.QuadVertexBuffer->SetLayout({\n\t\t\t{ ShaderDataType::Float3, \"a_Position\"     },\n\t\t\t{ ShaderDataType::Float4, \"a_Color\"        },\n\t\t\t{ ShaderDataType::Float2, \"a_TexCoord\"     },\n\t\t\t{ ShaderDataType::Float,  \"a_TexIndex\"     },\n\t\t\t{ ShaderDataType::Float,  \"a_TilingFactor\" },\n\t\t\t{ ShaderDataType::Int,    \"a_EntityID\"     }\n\t\t});\n\t\ts_Data.QuadVertexArray->AddVertexBuffer(s_Data.QuadVertexBuffer);\n\n\t\ts_Data.QuadVertexBufferBase = new QuadVertex[s_Data.MaxVertices];\n\n\t\tuint32_t* quadIndices = new uint32_t[s_Data.MaxIndices];\n\n\t\tuint32_t offset = 0;\n\t\tfor (uint32_t i = 0; i < s_Data.MaxIndices; i += 6)\n\t\t{\n\t\t\tquadIndices[i + 0] = offset + 0;\n\t\t\tquadIndices[i + 1] = offset + 1;\n\t\t\tquadIndices[i + 2] = offset + 2;\n\n\t\t\tquadIndices[i + 3] = offset + 2;\n\t\t\tquadIndices[i + 4] = offset + 3;\n\t\t\tquadIndices[i + 5] = offset + 0;\n\n\t\t\toffset += 4;\n\t\t}\n\n\t\tRef<IndexBuffer> quadIB = IndexBuffer::Create(quadIndices, s_Data.MaxIndices);\n\t\ts_Data.QuadVertexArray->SetIndexBuffer(quadIB);\n\t\tdelete[] quadIndices;\n\n\t\t// Circles\n\t\ts_Data.CircleVertexArray = VertexArray::Create();\n\n\t\ts_Data.CircleVertexBuffer = VertexBuffer::Create(s_Data.MaxVertices * sizeof(CircleVertex));\n\t\ts_Data.CircleVertexBuffer->SetLayout({\n\t\t\t{ ShaderDataType::Float3, \"a_WorldPosition\" },\n\t\t\t{ ShaderDataType::Float3, \"a_LocalPosition\" },\n\t\t\t{ ShaderDataType::Float4, \"a_Color\"         },\n\t\t\t{ ShaderDataType::Float,  \"a_Thickness\"     },\n\t\t\t{ ShaderDataType::Float,  \"a_Fade\"          },\n\t\t\t{ ShaderDataType::Int,    \"a_EntityID\"      }\n\t\t});\n\t\ts_Data.CircleVertexArray->AddVertexBuffer(s_Data.CircleVertexBuffer);\n\t\ts_Data.CircleVertexArray->SetIndexBuffer(quadIB); // Use quad IB\n\t\ts_Data.CircleVertexBufferBase = new CircleVertex[s_Data.MaxVertices];\n\n\t\t// Lines\n\t\ts_Data.LineVertexArray = VertexArray::Create();\n\n\t\ts_Data.LineVertexBuffer = VertexBuffer::Create(s_Data.MaxVertices * sizeof(LineVertex));\n\t\ts_Data.LineVertexBuffer->SetLayout({\n\t\t\t{ ShaderDataType::Float3, \"a_Position\" },\n\t\t\t{ ShaderDataType::Float4, \"a_Color\"    },\n\t\t\t{ ShaderDataType::Int,    \"a_EntityID\" }\n\t\t});\n\t\ts_Data.LineVertexArray->AddVertexBuffer(s_Data.LineVertexBuffer);\n\t\ts_Data.LineVertexBufferBase = new LineVertex[s_Data.MaxVertices];\n\n\t\t// Text\n\t\ts_Data.TextVertexArray = VertexArray::Create();\n\n\t\ts_Data.TextVertexBuffer = VertexBuffer::Create(s_Data.MaxVertices * sizeof(TextVertex));\n\t\ts_Data.TextVertexBuffer->SetLayout({\n\t\t\t{ ShaderDataType::Float3, \"a_Position\"     },\n\t\t\t{ ShaderDataType::Float4, \"a_Color\"        },\n\t\t\t{ ShaderDataType::Float2, \"a_TexCoord\"     },\n\t\t\t{ ShaderDataType::Int,    \"a_EntityID\"     }\n\t\t});\n\t\ts_Data.TextVertexArray->AddVertexBuffer(s_Data.TextVertexBuffer);\n\t\ts_Data.TextVertexArray->SetIndexBuffer(quadIB);\n\t\ts_Data.TextVertexBufferBase = new TextVertex[s_Data.MaxVertices];\n\n\t\ts_Data.WhiteTexture = Texture2D::Create(TextureSpecification());\n\t\tuint32_t whiteTextureData = 0xffffffff;\n\t\ts_Data.WhiteTexture->SetData(&whiteTextureData, sizeof(uint32_t));\n\n\t\tint32_t samplers[s_Data.MaxTextureSlots];\n\t\tfor (uint32_t i = 0; i < s_Data.MaxTextureSlots; i++)\n\t\t\tsamplers[i] = i;\n\n\t\ts_Data.QuadShader = Shader::Create(\"assets/shaders/Renderer2D_Quad.glsl\");\n\t\ts_Data.CircleShader = Shader::Create(\"assets/shaders/Renderer2D_Circle.glsl\");\n\t\ts_Data.LineShader = Shader::Create(\"assets/shaders/Renderer2D_Line.glsl\");\n\t\ts_Data.TextShader = Shader::Create(\"assets/shaders/Renderer2D_Text.glsl\");\n\n\t\t// Set first texture slot to 0\n\t\ts_Data.TextureSlots[0] = s_Data.WhiteTexture;\n\n\t\ts_Data.QuadVertexPositions[0] = { -0.5f, -0.5f, 0.0f, 1.0f };\n\t\ts_Data.QuadVertexPositions[1] = {  0.5f, -0.5f, 0.0f, 1.0f };\n\t\ts_Data.QuadVertexPositions[2] = {  0.5f,  0.5f, 0.0f, 1.0f };\n\t\ts_Data.QuadVertexPositions[3] = { -0.5f,  0.5f, 0.0f, 1.0f };\n\n\t\ts_Data.CameraUniformBuffer = UniformBuffer::Create(sizeof(Renderer2DData::CameraData), 0);\n\t}\n\n\tvoid Renderer2D::Shutdown()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tdelete[] s_Data.QuadVertexBufferBase;\n\t}\n\n\tvoid Renderer2D::BeginScene(const OrthographicCamera& camera)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\ts_Data.CameraBuffer.ViewProjection = camera.GetViewProjectionMatrix();\n\t\ts_Data.CameraUniformBuffer->SetData(&s_Data.CameraBuffer, sizeof(Renderer2DData::CameraData));\n\n\t\tStartBatch();\n\t}\n\n\tvoid Renderer2D::BeginScene(const Camera& camera, const glm::mat4& transform)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\ts_Data.CameraBuffer.ViewProjection = camera.GetProjection() * glm::inverse(transform);\n\t\ts_Data.CameraUniformBuffer->SetData(&s_Data.CameraBuffer, sizeof(Renderer2DData::CameraData));\n\n\t\tStartBatch();\n\t}\n\n\tvoid Renderer2D::BeginScene(const EditorCamera& camera)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\ts_Data.CameraBuffer.ViewProjection = camera.GetViewProjection();\n\t\ts_Data.CameraUniformBuffer->SetData(&s_Data.CameraBuffer, sizeof(Renderer2DData::CameraData));\n\n\t\tStartBatch();\n\t}\n\n\tvoid Renderer2D::EndScene()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tFlush();\n\t}\n\n\tvoid Renderer2D::StartBatch()\n\t{\n\t\ts_Data.QuadIndexCount = 0;\n\t\ts_Data.QuadVertexBufferPtr = s_Data.QuadVertexBufferBase;\n\n\t\ts_Data.CircleIndexCount = 0;\n\t\ts_Data.CircleVertexBufferPtr = s_Data.CircleVertexBufferBase;\n\n\t\ts_Data.LineVertexCount = 0;\n\t\ts_Data.LineVertexBufferPtr = s_Data.LineVertexBufferBase;\t\n\t\t\n\t\ts_Data.TextIndexCount = 0;\n\t\ts_Data.TextVertexBufferPtr = s_Data.TextVertexBufferBase;\n\n\t\ts_Data.TextureSlotIndex = 1;\n\t}\n\n\tvoid Renderer2D::Flush()\n\t{\n\t\tif (s_Data.QuadIndexCount)\n\t\t{\n\t\t\tuint32_t dataSize = (uint32_t)((uint8_t*)s_Data.QuadVertexBufferPtr - (uint8_t*)s_Data.QuadVertexBufferBase);\n\t\t\ts_Data.QuadVertexBuffer->SetData(s_Data.QuadVertexBufferBase, dataSize);\n\n\t\t\t// Bind textures\n\t\t\tfor (uint32_t i = 0; i < s_Data.TextureSlotIndex; i++)\n\t\t\t\ts_Data.TextureSlots[i]->Bind(i);\n\n\t\t\ts_Data.QuadShader->Bind();\n\t\t\tRenderCommand::DrawIndexed(s_Data.QuadVertexArray, s_Data.QuadIndexCount);\n\t\t\ts_Data.Stats.DrawCalls++;\n\t\t}\n\n\t\tif (s_Data.CircleIndexCount)\n\t\t{\n\t\t\tuint32_t dataSize = (uint32_t)((uint8_t*)s_Data.CircleVertexBufferPtr - (uint8_t*)s_Data.CircleVertexBufferBase);\n\t\t\ts_Data.CircleVertexBuffer->SetData(s_Data.CircleVertexBufferBase, dataSize);\n\n\t\t\ts_Data.CircleShader->Bind();\n\t\t\tRenderCommand::DrawIndexed(s_Data.CircleVertexArray, s_Data.CircleIndexCount);\n\t\t\ts_Data.Stats.DrawCalls++;\n\t\t}\n\n\t\tif (s_Data.LineVertexCount)\n\t\t{\n\t\t\tuint32_t dataSize = (uint32_t)((uint8_t*)s_Data.LineVertexBufferPtr - (uint8_t*)s_Data.LineVertexBufferBase);\n\t\t\ts_Data.LineVertexBuffer->SetData(s_Data.LineVertexBufferBase, dataSize);\n\n\t\t\ts_Data.LineShader->Bind();\n\t\t\tRenderCommand::SetLineWidth(s_Data.LineWidth);\n\t\t\tRenderCommand::DrawLines(s_Data.LineVertexArray, s_Data.LineVertexCount);\n\t\t\ts_Data.Stats.DrawCalls++;\n\t\t}\n\t\t\n\t\tif (s_Data.TextIndexCount)\n\t\t{\n\t\t\tuint32_t dataSize = (uint32_t)((uint8_t*)s_Data.TextVertexBufferPtr - (uint8_t*)s_Data.TextVertexBufferBase);\n\t\t\ts_Data.TextVertexBuffer->SetData(s_Data.TextVertexBufferBase, dataSize);\n\n\t\t\tauto buf = s_Data.TextVertexBufferBase;\n\t\t\ts_Data.FontAtlasTexture->Bind(0);\n\n\t\t\ts_Data.TextShader->Bind();\n\t\t\tRenderCommand::DrawIndexed(s_Data.TextVertexArray, s_Data.TextIndexCount);\n\t\t\ts_Data.Stats.DrawCalls++;\n\t\t}\n\t}\n\n\tvoid Renderer2D::NextBatch()\n\t{\n\t\tFlush();\n\t\tStartBatch();\n\t}\n\n\tvoid Renderer2D::DrawQuad(const glm::vec2& position, const glm::vec2& size, const glm::vec4& color)\n\t{\n\t\tDrawQuad({ position.x, position.y, 0.0f }, size, color);\n\t}\n\n\tvoid Renderer2D::DrawQuad(const glm::vec3& position, const glm::vec2& size, const glm::vec4& color)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), position)\n\t\t\t* glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f });\n\t\t\n\t\tDrawQuad(transform, color);\n\t}\n\n\tvoid Renderer2D::DrawQuad(const glm::vec2& position, const glm::vec2& size, const Ref<Texture2D>& texture, float tilingFactor, const glm::vec4& tintColor)\n\t{\n\t\tDrawQuad({ position.x, position.y, 0.0f }, size, texture, tilingFactor, tintColor);\n\t}\n\n\tvoid Renderer2D::DrawQuad(const glm::vec3& position, const glm::vec2& size, const Ref<Texture2D>& texture, float tilingFactor, const glm::vec4& tintColor)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), position)\n\t\t\t* glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f });\n\n\t\tDrawQuad(transform, texture, tilingFactor, tintColor);\n\t}\n\n\tvoid Renderer2D::DrawQuad(const glm::mat4& transform, const glm::vec4& color, int entityID)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tconstexpr size_t quadVertexCount = 4;\n\t\tconst float textureIndex = 0.0f; // White Texture\n\t\tconstexpr glm::vec2 textureCoords[] = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f } };\n\t\tconst float tilingFactor = 1.0f;\n\n\t\tif (s_Data.QuadIndexCount >= Renderer2DData::MaxIndices)\n\t\t\tNextBatch();\n\n\t\tfor (size_t i = 0; i < quadVertexCount; i++)\n\t\t{\n\t\t\ts_Data.QuadVertexBufferPtr->Position = transform * s_Data.QuadVertexPositions[i];\n\t\t\ts_Data.QuadVertexBufferPtr->Color = color;\n\t\t\ts_Data.QuadVertexBufferPtr->TexCoord = textureCoords[i];\n\t\t\ts_Data.QuadVertexBufferPtr->TexIndex = textureIndex;\n\t\t\ts_Data.QuadVertexBufferPtr->TilingFactor = tilingFactor;\n\t\t\ts_Data.QuadVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.QuadVertexBufferPtr++;\n\t\t}\n\n\t\ts_Data.QuadIndexCount += 6;\n\n\t\ts_Data.Stats.QuadCount++;\n\t}\n\n\tvoid Renderer2D::DrawQuad(const glm::mat4& transform, const Ref<Texture2D>& texture, float tilingFactor, const glm::vec4& tintColor, int entityID)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tconstexpr size_t quadVertexCount = 4;\n\t\tconstexpr glm::vec2 textureCoords[] = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f } };\n\n\t\tif (s_Data.QuadIndexCount >= Renderer2DData::MaxIndices)\n\t\t\tNextBatch();\n\n\t\tfloat textureIndex = 0.0f;\n\t\tfor (uint32_t i = 1; i < s_Data.TextureSlotIndex; i++)\n\t\t{\n\t\t\tif (*s_Data.TextureSlots[i] == *texture)\n\t\t\t{\n\t\t\t\ttextureIndex = (float)i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (textureIndex == 0.0f)\n\t\t{\n\t\t\tif (s_Data.TextureSlotIndex >= Renderer2DData::MaxTextureSlots)\n\t\t\t\tNextBatch();\n\n\t\t\ttextureIndex = (float)s_Data.TextureSlotIndex;\n\t\t\ts_Data.TextureSlots[s_Data.TextureSlotIndex] = texture;\n\t\t\ts_Data.TextureSlotIndex++;\n\t\t}\n\n\t\tfor (size_t i = 0; i < quadVertexCount; i++)\n\t\t{\n\t\t\ts_Data.QuadVertexBufferPtr->Position = transform * s_Data.QuadVertexPositions[i];\n\t\t\ts_Data.QuadVertexBufferPtr->Color = tintColor;\n\t\t\ts_Data.QuadVertexBufferPtr->TexCoord = textureCoords[i];\n\t\t\ts_Data.QuadVertexBufferPtr->TexIndex = textureIndex;\n\t\t\ts_Data.QuadVertexBufferPtr->TilingFactor = tilingFactor;\n\t\t\ts_Data.QuadVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.QuadVertexBufferPtr++;\n\t\t}\n\n\t\ts_Data.QuadIndexCount += 6;\n\n\t\ts_Data.Stats.QuadCount++;\n\t}\n\n\tvoid Renderer2D::DrawRotatedQuad(const glm::vec2& position, const glm::vec2& size, float rotation, const glm::vec4& color)\n\t{\n\t\tDrawRotatedQuad({ position.x, position.y, 0.0f }, size, rotation, color);\n\t}\n\n\tvoid Renderer2D::DrawRotatedQuad(const glm::vec3& position, const glm::vec2& size, float rotation, const glm::vec4& color)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), position)\n\t\t\t* glm::rotate(glm::mat4(1.0f), glm::radians(rotation), { 0.0f, 0.0f, 1.0f })\n\t\t\t* glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f });\n\n\t\tDrawQuad(transform, color);\n\t}\n\n\tvoid Renderer2D::DrawRotatedQuad(const glm::vec2& position, const glm::vec2& size, float rotation, const Ref<Texture2D>& texture, float tilingFactor, const glm::vec4& tintColor)\n\t{\n\t\tDrawRotatedQuad({ position.x, position.y, 0.0f }, size, rotation, texture, tilingFactor, tintColor);\n\t}\n\n\tvoid Renderer2D::DrawRotatedQuad(const glm::vec3& position, const glm::vec2& size, float rotation, const Ref<Texture2D>& texture, float tilingFactor, const glm::vec4& tintColor)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), position)\n\t\t\t* glm::rotate(glm::mat4(1.0f), glm::radians(rotation), { 0.0f, 0.0f, 1.0f })\n\t\t\t* glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f });\n\n\t\tDrawQuad(transform, texture, tilingFactor, tintColor);\n\t}\n\n\tvoid Renderer2D::DrawCircle(const glm::mat4& transform, const glm::vec4& color, float thickness /*= 1.0f*/, float fade /*= 0.005f*/, int entityID /*= -1*/)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\t// TODO: implement for circles\n\t\t// if (s_Data.QuadIndexCount >= Renderer2DData::MaxIndices)\n\t\t// \tNextBatch();\n\n\t\tfor (size_t i = 0; i < 4; i++)\n\t\t{\n\t\t\ts_Data.CircleVertexBufferPtr->WorldPosition = transform * s_Data.QuadVertexPositions[i];\n\t\t\ts_Data.CircleVertexBufferPtr->LocalPosition = s_Data.QuadVertexPositions[i] * 2.0f;\n\t\t\ts_Data.CircleVertexBufferPtr->Color = color;\n\t\t\ts_Data.CircleVertexBufferPtr->Thickness = thickness;\n\t\t\ts_Data.CircleVertexBufferPtr->Fade = fade;\n\t\t\ts_Data.CircleVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.CircleVertexBufferPtr++;\n\t\t}\n\n\t\ts_Data.CircleIndexCount += 6;\n\n\t\ts_Data.Stats.QuadCount++;\n\t}\n\n\tvoid Renderer2D::DrawLine(const glm::vec3& p0, glm::vec3& p1, const glm::vec4& color, int entityID)\n\t{\n\t\ts_Data.LineVertexBufferPtr->Position = p0;\n\t\ts_Data.LineVertexBufferPtr->Color = color;\n\t\ts_Data.LineVertexBufferPtr->EntityID = entityID;\n\t\ts_Data.LineVertexBufferPtr++;\n\n\t\ts_Data.LineVertexBufferPtr->Position = p1;\n\t\ts_Data.LineVertexBufferPtr->Color = color;\n\t\ts_Data.LineVertexBufferPtr->EntityID = entityID;\n\t\ts_Data.LineVertexBufferPtr++;\n\n\t\ts_Data.LineVertexCount += 2;\n\t}\n\n\tvoid Renderer2D::DrawRect(const glm::vec3& position, const glm::vec2& size, const glm::vec4& color, int entityID)\n\t{\n\t\tglm::vec3 p0 = glm::vec3(position.x - size.x * 0.5f, position.y - size.y * 0.5f, position.z);\n\t\tglm::vec3 p1 = glm::vec3(position.x + size.x * 0.5f, position.y - size.y * 0.5f, position.z);\n\t\tglm::vec3 p2 = glm::vec3(position.x + size.x * 0.5f, position.y + size.y * 0.5f, position.z);\n\t\tglm::vec3 p3 = glm::vec3(position.x - size.x * 0.5f, position.y + size.y * 0.5f, position.z);\n\n\t\tDrawLine(p0, p1, color, entityID);\n\t\tDrawLine(p1, p2, color, entityID);\n\t\tDrawLine(p2, p3, color, entityID);\n\t\tDrawLine(p3, p0, color, entityID);\n\t}\n\n\tvoid Renderer2D::DrawRect(const glm::mat4& transform, const glm::vec4& color, int entityID)\n\t{\n\t\tglm::vec3 lineVertices[4];\n\t\tfor (size_t i = 0; i < 4; i++)\n\t\t\tlineVertices[i] = transform * s_Data.QuadVertexPositions[i];\n\n\t\tDrawLine(lineVertices[0], lineVertices[1], color, entityID);\n\t\tDrawLine(lineVertices[1], lineVertices[2], color, entityID);\n\t\tDrawLine(lineVertices[2], lineVertices[3], color, entityID);\n\t\tDrawLine(lineVertices[3], lineVertices[0], color, entityID);\n\t}\n\n\tvoid Renderer2D::DrawSprite(const glm::mat4& transform, SpriteRendererComponent& src, int entityID)\n\t{\n\t\tif (src.Texture)\n\t\t\tDrawQuad(transform, src.Texture, src.TilingFactor, src.Color, entityID);\n\t\telse\n\t\t\tDrawQuad(transform, src.Color, entityID);\n\t}\n\n\tvoid Renderer2D::DrawString(const std::string& string, Ref<Font> font, const glm::mat4& transform, const TextParams& textParams, int entityID)\n\t{\n\t\tconst auto& fontGeometry = font->GetMSDFData()->FontGeometry;\n\t\tconst auto& metrics = fontGeometry.getMetrics();\n\t\tRef<Texture2D> fontAtlas = font->GetAtlasTexture();\n\n\t\ts_Data.FontAtlasTexture = fontAtlas;\n\n\t\tdouble x = 0.0;\n\t\tdouble fsScale = 1.0 / (metrics.ascenderY - metrics.descenderY);\n\t\tdouble y = 0.0;\n\n\t\tconst float spaceGlyphAdvance = fontGeometry.getGlyph(' ')->getAdvance();\n\t\t\n\t\tfor (size_t i = 0; i < string.size(); i++)\n\t\t{\n\t\t\tchar character = string[i];\n\t\t\tif (character == '\\r')\n\t\t\t\tcontinue;\n\n\t\t\tif (character == '\\n')\n\t\t\t{\n\t\t\t\tx = 0;\n\t\t\t\ty -= fsScale * metrics.lineHeight + textParams.LineSpacing;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (character == ' ')\n\t\t\t{\n\t\t\t\tfloat advance = spaceGlyphAdvance;\n\t\t\t\tif (i < string.size() - 1)\n\t\t\t\t{\n\t\t\t\t\tchar nextCharacter = string[i + 1];\n\t\t\t\t\tdouble dAdvance;\n\t\t\t\t\tfontGeometry.getAdvance(dAdvance, character, nextCharacter);\n\t\t\t\t\tadvance = (float)dAdvance;\n\t\t\t\t}\n\n\t\t\t\tx += fsScale * advance + textParams.Kerning;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (character == '\\t')\n\t\t\t{\n\t\t\t\t// NOTE(Yan): is this right?\n\t\t\t\tx += 4.0f * (fsScale * spaceGlyphAdvance + textParams.Kerning);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tauto glyph = fontGeometry.getGlyph(character);\n\t\t\tif (!glyph)\n\t\t\t\tglyph = fontGeometry.getGlyph('?');\n\t\t\tif (!glyph)\n\t\t\t\treturn;\n\n\t\t\tdouble al, ab, ar, at;\n\t\t\tglyph->getQuadAtlasBounds(al, ab, ar, at);\n\t\t\tglm::vec2 texCoordMin((float)al, (float)ab);\n\t\t\tglm::vec2 texCoordMax((float)ar, (float)at);\n\n\t\t\tdouble pl, pb, pr, pt;\n\t\t\tglyph->getQuadPlaneBounds(pl, pb, pr, pt);\n\t\t\tglm::vec2 quadMin((float)pl, (float)pb);\n\t\t\tglm::vec2 quadMax((float)pr, (float)pt);\n\n\t\t\tquadMin *= fsScale, quadMax *= fsScale;\n\t\t\tquadMin += glm::vec2(x, y);\n\t\t\tquadMax += glm::vec2(x, y);\n\n\t\t\tfloat texelWidth = 1.0f / fontAtlas->GetWidth();\n\t\t\tfloat texelHeight = 1.0f / fontAtlas->GetHeight();\n\t\t\ttexCoordMin *= glm::vec2(texelWidth, texelHeight);\n\t\t\ttexCoordMax *= glm::vec2(texelWidth, texelHeight);\n\n\t\t\t// render here\n\t\t\ts_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMin, 0.0f, 1.0f);\n\t\t\ts_Data.TextVertexBufferPtr->Color = textParams.Color;\n\t\t\ts_Data.TextVertexBufferPtr->TexCoord = texCoordMin;\n\t\t\ts_Data.TextVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.TextVertexBufferPtr++;\n\n\t\t\ts_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMin.x, quadMax.y, 0.0f, 1.0f);\n\t\t\ts_Data.TextVertexBufferPtr->Color = textParams.Color;\n\t\t\ts_Data.TextVertexBufferPtr->TexCoord = { texCoordMin.x, texCoordMax.y };\n\t\t\ts_Data.TextVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.TextVertexBufferPtr++;\n\n\t\t\ts_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMax, 0.0f, 1.0f);\n\t\t\ts_Data.TextVertexBufferPtr->Color = textParams.Color;\n\t\t\ts_Data.TextVertexBufferPtr->TexCoord = texCoordMax;\n\t\t\ts_Data.TextVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.TextVertexBufferPtr++;\n\n\t\t\ts_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMax.x, quadMin.y, 0.0f, 1.0f);\n\t\t\ts_Data.TextVertexBufferPtr->Color = textParams.Color;\n\t\t\ts_Data.TextVertexBufferPtr->TexCoord = { texCoordMax.x, texCoordMin.y };\n\t\t\ts_Data.TextVertexBufferPtr->EntityID = entityID;\n\t\t\ts_Data.TextVertexBufferPtr++;\n\n\t\t\ts_Data.TextIndexCount += 6;\n\t\t\ts_Data.Stats.QuadCount++;\n\n\t\t\tif (i < string.size() - 1)\n\t\t\t{\n\t\t\t\tdouble advance = glyph->getAdvance();\n\t\t\t\tchar nextCharacter = string[i + 1];\n\t\t\t\tfontGeometry.getAdvance(advance, character, nextCharacter);\n\n\t\t\t\tx += fsScale * advance + textParams.Kerning;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid Renderer2D::DrawString(const std::string& string, const glm::mat4& transform, const TextComponent& component, int entityID)\n\t{\n\t\tDrawString(string, component.FontAsset, transform, { component.Color, component.Kerning, component.LineSpacing }, entityID);\n\t}\n\n\tfloat Renderer2D::GetLineWidth()\n\t{\n\t\treturn s_Data.LineWidth;\n\t}\n\n\tvoid Renderer2D::SetLineWidth(float width)\n\t{\n\t\ts_Data.LineWidth = width;\n\t}\n\n\tvoid Renderer2D::ResetStats()\n\t{\n\t\tmemset(&s_Data.Stats, 0, sizeof(Statistics));\n\t}\n\n\tRenderer2D::Statistics Renderer2D::GetStats()\n\t{\n\t\treturn s_Data.Stats;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Renderer2D.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/OrthographicCamera.h\"\n\n#include \"Hazel/Renderer/Texture.h\"\n\n#include \"Hazel/Renderer/Camera.h\"\n#include \"Hazel/Renderer/EditorCamera.h\"\n#include \"Hazel/Renderer/Font.h\"\n\n#include \"Hazel/Scene/Components.h\"\n\nnamespace Hazel {\n\n\tclass Renderer2D\n\t{\n\tpublic:\n\t\tstatic void Init();\n\t\tstatic void Shutdown();\n\n\t\tstatic void BeginScene(const Camera& camera, const glm::mat4& transform);\n\t\tstatic void BeginScene(const EditorCamera& camera);\n\t\tstatic void BeginScene(const OrthographicCamera& camera); // TODO: Remove\n\t\tstatic void EndScene();\n\t\tstatic void Flush();\n\n\t\t// Primitives\n\t\tstatic void DrawQuad(const glm::vec2& position, const glm::vec2& size, const glm::vec4& color);\n\t\tstatic void DrawQuad(const glm::vec3& position, const glm::vec2& size, const glm::vec4& color);\n\t\tstatic void DrawQuad(const glm::vec2& position, const glm::vec2& size, const Ref<Texture2D>& texture, float tilingFactor = 1.0f, const glm::vec4& tintColor = glm::vec4(1.0f));\n\t\tstatic void DrawQuad(const glm::vec3& position, const glm::vec2& size, const Ref<Texture2D>& texture, float tilingFactor = 1.0f, const glm::vec4& tintColor = glm::vec4(1.0f));\n\n\t\tstatic void DrawQuad(const glm::mat4& transform, const glm::vec4& color, int entityID = -1);\n\t\tstatic void DrawQuad(const glm::mat4& transform, const Ref<Texture2D>& texture, float tilingFactor = 1.0f, const glm::vec4& tintColor = glm::vec4(1.0f), int entityID = -1);\n\n\t\tstatic void DrawRotatedQuad(const glm::vec2& position, const glm::vec2& size, float rotation, const glm::vec4& color);\n\t\tstatic void DrawRotatedQuad(const glm::vec3& position, const glm::vec2& size, float rotation, const glm::vec4& color);\n\t\tstatic void DrawRotatedQuad(const glm::vec2& position, const glm::vec2& size, float rotation, const Ref<Texture2D>& texture, float tilingFactor = 1.0f, const glm::vec4& tintColor = glm::vec4(1.0f));\n\t\tstatic void DrawRotatedQuad(const glm::vec3& position, const glm::vec2& size, float rotation, const Ref<Texture2D>& texture, float tilingFactor = 1.0f, const glm::vec4& tintColor = glm::vec4(1.0f));\n\n\t\tstatic void DrawCircle(const glm::mat4& transform, const glm::vec4& color, float thickness = 1.0f, float fade = 0.005f, int entityID = -1);\n\t\t\n\t\tstatic void DrawLine(const glm::vec3& p0, glm::vec3& p1, const glm::vec4& color, int entityID = -1);\n\n\t\tstatic void DrawRect(const glm::vec3& position, const glm::vec2& size, const glm::vec4& color, int entityID = -1);\n\t\tstatic void DrawRect(const glm::mat4& transform, const glm::vec4& color, int entityID = -1);\n\n\t\tstatic void DrawSprite(const glm::mat4& transform, SpriteRendererComponent& src, int entityID);\n\n\t\tstruct TextParams\n\t\t{\n\t\t\tglm::vec4 Color{ 1.0f };\n\t\t\tfloat Kerning = 0.0f;\n\t\t\tfloat LineSpacing = 0.0f;\n\t\t};\n\t\tstatic void DrawString(const std::string& string, Ref<Font> font, const glm::mat4& transform, const TextParams& textParams, int entityID = -1);\n\t\tstatic void DrawString(const std::string& string, const glm::mat4& transform, const TextComponent& component, int entityID = -1);\n\n\t\tstatic float GetLineWidth();\n\t\tstatic void SetLineWidth(float width);\n\n\t\t// Stats\n\t\tstruct Statistics\n\t\t{\n\t\t\tuint32_t DrawCalls = 0;\n\t\t\tuint32_t QuadCount = 0;\n\n\t\t\tuint32_t GetTotalVertexCount() const { return QuadCount * 4; }\n\t\t\tuint32_t GetTotalIndexCount() const { return QuadCount * 6; }\n\t\t};\n\t\tstatic void ResetStats();\n\t\tstatic Statistics GetStats();\n\n\tprivate:\n\t\tstatic void StartBatch();\n\t\tstatic void NextBatch();\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/RendererAPI.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/RendererAPI.h\"\n\n#include \"Platform/OpenGL/OpenGLRendererAPI.h\"\n\nnamespace Hazel {\n\n\tRendererAPI::API RendererAPI::s_API = RendererAPI::API::OpenGL;\n\n\tScope<RendererAPI> RendererAPI::Create()\n\t{\n\t\tswitch (s_API)\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateScope<OpenGLRendererAPI>();\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/RendererAPI.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/VertexArray.h\"\n\n#include <glm/glm.hpp>\n\nnamespace Hazel {\n\n\tclass RendererAPI\n\t{\n\tpublic:\n\t\tenum class API\n\t\t{\n\t\t\tNone = 0, OpenGL = 1\n\t\t};\n\tpublic:\n\t\tvirtual ~RendererAPI() = default;\n\n\t\tvirtual void Init() = 0;\n\t\tvirtual void SetViewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) = 0;\n\t\tvirtual void SetClearColor(const glm::vec4& color) = 0;\n\t\tvirtual void Clear() = 0;\n\n\t\tvirtual void DrawIndexed(const Ref<VertexArray>& vertexArray, uint32_t indexCount = 0) = 0;\n\t\tvirtual void DrawLines(const Ref<VertexArray>& vertexArray, uint32_t vertexCount) = 0;\n\t\t\n\t\tvirtual void SetLineWidth(float width) = 0;\n\n\t\tstatic API GetAPI() { return s_API; }\n\t\tstatic Scope<RendererAPI> Create();\n\tprivate:\n\t\tstatic API s_API;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Shader.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/Shader.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Platform/OpenGL/OpenGLShader.h\"\n\nnamespace Hazel {\n\n\tRef<Shader> Shader::Create(const std::string& filepath)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLShader>(filepath);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n\tRef<Shader> Shader::Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLShader>(name, vertexSrc, fragmentSrc);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n\tvoid ShaderLibrary::Add(const std::string& name, const Ref<Shader>& shader)\n\t{\n\t\tHZ_CORE_ASSERT(!Exists(name), \"Shader already exists!\");\n\t\tm_Shaders[name] = shader;\n\t}\n\n\tvoid ShaderLibrary::Add(const Ref<Shader>& shader)\n\t{\n\t\tauto& name = shader->GetName();\n\t\tAdd(name, shader);\n\t}\n\n\tRef<Shader> ShaderLibrary::Load(const std::string& filepath)\n\t{\n\t\tauto shader = Shader::Create(filepath);\n\t\tAdd(shader);\n\t\treturn shader;\n\t}\n\n\tRef<Shader> ShaderLibrary::Load(const std::string& name, const std::string& filepath)\n\t{\n\t\tauto shader = Shader::Create(filepath);\n\t\tAdd(name, shader);\n\t\treturn shader;\n\t}\n\n\tRef<Shader> ShaderLibrary::Get(const std::string& name)\n\t{\n\t\tHZ_CORE_ASSERT(Exists(name), \"Shader not found!\");\n\t\treturn m_Shaders[name];\n\t}\n\n\tbool ShaderLibrary::Exists(const std::string& name) const\n\t{\n\t\treturn m_Shaders.find(name) != m_Shaders.end();\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Shader.h",
    "content": "#pragma once\n\n#include <string>\n#include <unordered_map>\n\n#include <glm/glm.hpp>\n\nnamespace Hazel {\n\n\tclass Shader\n\t{\n\tpublic:\n\t\tvirtual ~Shader() = default;\n\n\t\tvirtual void Bind() const = 0;\n\t\tvirtual void Unbind() const = 0;\n\n\t\tvirtual void SetInt(const std::string& name, int value) = 0;\n\t\tvirtual void SetIntArray(const std::string& name, int* values, uint32_t count) = 0;\n\t\tvirtual void SetFloat(const std::string& name, float value) = 0;\n\t\tvirtual void SetFloat2(const std::string& name, const glm::vec2& value) = 0;\n\t\tvirtual void SetFloat3(const std::string& name, const glm::vec3& value) = 0;\n\t\tvirtual void SetFloat4(const std::string& name, const glm::vec4& value) = 0;\n\t\tvirtual void SetMat4(const std::string& name, const glm::mat4& value) = 0;\n\n\t\tvirtual const std::string& GetName() const = 0;\n\n\t\tstatic Ref<Shader> Create(const std::string& filepath);\n\t\tstatic Ref<Shader> Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc);\n\t};\n\n\tclass ShaderLibrary\n\t{\n\tpublic:\n\t\tvoid Add(const std::string& name, const Ref<Shader>& shader);\n\t\tvoid Add(const Ref<Shader>& shader);\n\t\tRef<Shader> Load(const std::string& filepath);\n\t\tRef<Shader> Load(const std::string& name, const std::string& filepath);\n\n\t\tRef<Shader> Get(const std::string& name);\n\n\t\tbool Exists(const std::string& name) const;\n\tprivate:\n\t\tstd::unordered_map<std::string, Ref<Shader>> m_Shaders;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Texture.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/Texture.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Platform/OpenGL/OpenGLTexture.h\"\n\nnamespace Hazel {\n\n\tRef<Texture2D> Texture2D::Create(const TextureSpecification& specification)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLTexture2D>(specification);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n\tRef<Texture2D> Texture2D::Create(const std::string& path)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLTexture2D>(path);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/Texture.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n\n#include <string>\n\nnamespace Hazel {\n\n\tenum class ImageFormat\n\t{\n\t\tNone = 0,\n\t\tR8,\n\t\tRGB8,\n\t\tRGBA8,\n\t\tRGBA32F\n\t};\n\n\tstruct TextureSpecification\n\t{\n\t\tuint32_t Width = 1;\n\t\tuint32_t Height = 1;\n\t\tImageFormat Format = ImageFormat::RGBA8;\n\t\tbool GenerateMips = true;\n\t};\n\n\tclass Texture\n\t{\n\tpublic:\n\t\tvirtual ~Texture() = default;\n\n\t\tvirtual const TextureSpecification& GetSpecification() const = 0;\n\n\t\tvirtual uint32_t GetWidth() const = 0;\n\t\tvirtual uint32_t GetHeight() const = 0;\n\t\tvirtual uint32_t GetRendererID() const = 0;\n\n\t\tvirtual const std::string& GetPath() const = 0;\n\n\t\tvirtual void SetData(void* data, uint32_t size) = 0;\n\n\t\tvirtual void Bind(uint32_t slot = 0) const = 0;\n\n\t\tvirtual bool IsLoaded() const = 0;\n\n\t\tvirtual bool operator==(const Texture& other) const = 0;\n\t};\n\n\tclass Texture2D : public Texture\n\t{\n\tpublic:\n\t\tstatic Ref<Texture2D> Create(const TextureSpecification& specification);\n\t\tstatic Ref<Texture2D> Create(const std::string& path);\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/UniformBuffer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"UniformBuffer.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Platform/OpenGL/OpenGLUniformBuffer.h\"\n\nnamespace Hazel {\n\n\tRef<UniformBuffer> UniformBuffer::Create(uint32_t size, uint32_t binding)\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLUniformBuffer>(size, binding);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/UniformBuffer.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n\nnamespace Hazel {\n\n\tclass UniformBuffer\n\t{\n\tpublic:\n\t\tvirtual ~UniformBuffer() {}\n\t\tvirtual void SetData(const void* data, uint32_t size, uint32_t offset = 0) = 0;\n\t\t\n\t\tstatic Ref<UniformBuffer> Create(uint32_t size, uint32_t binding);\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/VertexArray.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Renderer/VertexArray.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Platform/OpenGL/OpenGLVertexArray.h\"\n\nnamespace Hazel {\n\n\tRef<VertexArray> VertexArray::Create()\n\t{\n\t\tswitch (Renderer::GetAPI())\n\t\t{\n\t\t\tcase RendererAPI::API::None:    HZ_CORE_ASSERT(false, \"RendererAPI::None is currently not supported!\"); return nullptr;\n\t\t\tcase RendererAPI::API::OpenGL:  return CreateRef<OpenGLVertexArray>();\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown RendererAPI!\");\n\t\treturn nullptr;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Renderer/VertexArray.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Buffer.h\"\n\n#include <memory>\n\nnamespace Hazel {\n\n\tclass VertexArray\n\t{\n\tpublic:\n\t\tvirtual ~VertexArray() = default;\n\n\t\tvirtual void Bind() const = 0;\n\t\tvirtual void Unbind() const = 0;\n\n\t\tvirtual void AddVertexBuffer(const Ref<VertexBuffer>& vertexBuffer) = 0;\n\t\tvirtual void SetIndexBuffer(const Ref<IndexBuffer>& indexBuffer) = 0;\n\n\t\tvirtual const std::vector<Ref<VertexBuffer>>& GetVertexBuffers() const = 0;\n\t\tvirtual const Ref<IndexBuffer>& GetIndexBuffer() const = 0;\n\n\t\tstatic Ref<VertexArray> Create();\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/Components.h",
    "content": "#pragma once\n\n#include \"SceneCamera.h\"\n#include \"Hazel/Core/UUID.h\"\n#include \"Hazel/Renderer/Texture.h\"\n#include \"Hazel/Renderer/Font.h\"\n\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/quaternion.hpp>\n\nnamespace Hazel {\n\n\tstruct IDComponent\n\t{\n\t\tUUID ID;\n\n\t\tIDComponent() = default;\n\t\tIDComponent(const IDComponent&) = default;\n\t};\n\n\tstruct TagComponent\n\t{\n\t\tstd::string Tag;\n\n\t\tTagComponent() = default;\n\t\tTagComponent(const TagComponent&) = default;\n\t\tTagComponent(const std::string& tag)\n\t\t\t: Tag(tag) {}\n\t};\n\n\tstruct TransformComponent\n\t{\n\t\tglm::vec3 Translation = { 0.0f, 0.0f, 0.0f };\n\t\tglm::vec3 Rotation = { 0.0f, 0.0f, 0.0f };\n\t\tglm::vec3 Scale = { 1.0f, 1.0f, 1.0f };\n\n\t\tTransformComponent() = default;\n\t\tTransformComponent(const TransformComponent&) = default;\n\t\tTransformComponent(const glm::vec3& translation)\n\t\t\t: Translation(translation) {}\n\n\t\tglm::mat4 GetTransform() const\n\t\t{\n\t\t\tglm::mat4 rotation = glm::toMat4(glm::quat(Rotation));\n\n\t\t\treturn glm::translate(glm::mat4(1.0f), Translation)\n\t\t\t\t* rotation\n\t\t\t\t* glm::scale(glm::mat4(1.0f), Scale);\n\t\t}\n\t};\n\n\tstruct SpriteRendererComponent\n\t{\n\t\tglm::vec4 Color{ 1.0f, 1.0f, 1.0f, 1.0f };\n\t\tRef<Texture2D> Texture;\n\t\tfloat TilingFactor = 1.0f;\n\n\t\tSpriteRendererComponent() = default;\n\t\tSpriteRendererComponent(const SpriteRendererComponent&) = default;\n\t\tSpriteRendererComponent(const glm::vec4& color)\n\t\t\t: Color(color) {}\n\t};\n\n\tstruct CircleRendererComponent\n\t{\n\t\tglm::vec4 Color{ 1.0f, 1.0f, 1.0f, 1.0f };\n\t\tfloat Thickness = 1.0f;\n\t\tfloat Fade = 0.005f;\n\n\t\tCircleRendererComponent() = default;\n\t\tCircleRendererComponent(const CircleRendererComponent&) = default;\n\t};\n\n\tstruct CameraComponent\n\t{\n\t\tSceneCamera Camera;\n\t\tbool Primary = true; // TODO: think about moving to Scene\n\t\tbool FixedAspectRatio = false;\n\n\t\tCameraComponent() = default;\n\t\tCameraComponent(const CameraComponent&) = default;\n\t};\n\n\tstruct ScriptComponent\n\t{\n\t\tstd::string ClassName;\n\n\t\tScriptComponent() = default;\n\t\tScriptComponent(const ScriptComponent&) = default;\n\t};\n\n\t// Forward declaration\n\tclass ScriptableEntity;\n\n\tstruct NativeScriptComponent\n\t{\n\t\tScriptableEntity* Instance = nullptr;\n\n\t\tScriptableEntity*(*InstantiateScript)();\n\t\tvoid (*DestroyScript)(NativeScriptComponent*);\n\n\t\ttemplate<typename T>\n\t\tvoid Bind()\n\t\t{\n\t\t\tInstantiateScript = []() { return static_cast<ScriptableEntity*>(new T()); };\n\t\t\tDestroyScript = [](NativeScriptComponent* nsc) { delete nsc->Instance; nsc->Instance = nullptr; };\n\t\t}\n\t};\n\n\t// Physics\n\n\tstruct Rigidbody2DComponent\n\t{\n\t\tenum class BodyType { Static = 0, Dynamic, Kinematic };\n\t\tBodyType Type = BodyType::Static;\n\t\tbool FixedRotation = false;\n\n\t\t// Storage for runtime\n\t\tvoid* RuntimeBody = nullptr;\n\n\t\tRigidbody2DComponent() = default;\n\t\tRigidbody2DComponent(const Rigidbody2DComponent&) = default;\n\t};\n\n\tstruct BoxCollider2DComponent\n\t{\n\t\tglm::vec2 Offset = { 0.0f, 0.0f };\n\t\tglm::vec2 Size = { 0.5f, 0.5f };\n\n\t\t// TODO(Yan): move into physics material in the future maybe\n\t\tfloat Density = 1.0f;\n\t\tfloat Friction = 0.5f;\n\t\tfloat Restitution = 0.0f;\n\t\tfloat RestitutionThreshold = 0.5f;\n\n\t\t// Storage for runtime\n\t\tvoid* RuntimeFixture = nullptr;\n\n\t\tBoxCollider2DComponent() = default;\n\t\tBoxCollider2DComponent(const BoxCollider2DComponent&) = default;\n\t};\n\n\tstruct CircleCollider2DComponent\n\t{\n\t\tglm::vec2 Offset = { 0.0f, 0.0f };\n\t\tfloat Radius = 0.5f;\n\n\t\t// TODO(Yan): move into physics material in the future maybe\n\t\tfloat Density = 1.0f;\n\t\tfloat Friction = 0.5f;\n\t\tfloat Restitution = 0.0f;\n\t\tfloat RestitutionThreshold = 0.5f;\n\n\t\t// Storage for runtime\n\t\tvoid* RuntimeFixture = nullptr;\n\n\t\tCircleCollider2DComponent() = default;\n\t\tCircleCollider2DComponent(const CircleCollider2DComponent&) = default;\n\t};\n\n\tstruct TextComponent\n\t{\n\t\tstd::string TextString;\n\t\tRef<Font> FontAsset = Font::GetDefault();\n\t\tglm::vec4 Color{ 1.0f };\n\t\tfloat Kerning = 0.0f;\n\t\tfloat LineSpacing = 0.0f;\n\t};\n\n\ttemplate<typename... Component>\n\tstruct ComponentGroup\n\t{\n\t};\n\n\tusing AllComponents = \n\t\tComponentGroup<TransformComponent, SpriteRendererComponent,\n\t\t\tCircleRendererComponent, CameraComponent, ScriptComponent,\n\t\t\tNativeScriptComponent, Rigidbody2DComponent, BoxCollider2DComponent,\n\t\t\tCircleCollider2DComponent, TextComponent>;\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/Entity.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Entity.h\"\n\nnamespace Hazel {\n\n\tEntity::Entity(entt::entity handle, Scene* scene)\n\t\t: m_EntityHandle(handle), m_Scene(scene)\n\t{\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Hazel/Scene/Entity.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/UUID.h\"\n#include \"Scene.h\"\n#include \"Components.h\"\n\n#include \"entt.hpp\"\n\nnamespace Hazel {\n\n\tclass Entity\n\t{\n\tpublic:\n\t\tEntity() = default;\n\t\tEntity(entt::entity handle, Scene* scene);\n\t\tEntity(const Entity& other) = default;\n\n\t\ttemplate<typename T, typename... Args>\n\t\tT& AddComponent(Args&&... args)\n\t\t{\n\t\t\tHZ_CORE_ASSERT(!HasComponent<T>(), \"Entity already has component!\");\n\t\t\tT& component = m_Scene->m_Registry.emplace<T>(m_EntityHandle, std::forward<Args>(args)...);\n\t\t\tm_Scene->OnComponentAdded<T>(*this, component);\n\t\t\treturn component;\n\t\t}\n\n\t\ttemplate<typename T, typename... Args>\n\t\tT& AddOrReplaceComponent(Args&&... args)\n\t\t{\n\t\t\tT& component = m_Scene->m_Registry.emplace_or_replace<T>(m_EntityHandle, std::forward<Args>(args)...);\n\t\t\tm_Scene->OnComponentAdded<T>(*this, component);\n\t\t\treturn component;\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tT& GetComponent()\n\t\t{\n\t\t\tHZ_CORE_ASSERT(HasComponent<T>(), \"Entity does not have component!\");\n\t\t\treturn m_Scene->m_Registry.get<T>(m_EntityHandle);\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tbool HasComponent()\n\t\t{\n\t\t\treturn m_Scene->m_Registry.has<T>(m_EntityHandle);\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tvoid RemoveComponent()\n\t\t{\n\t\t\tHZ_CORE_ASSERT(HasComponent<T>(), \"Entity does not have component!\");\n\t\t\tm_Scene->m_Registry.remove<T>(m_EntityHandle);\n\t\t}\n\n\t\toperator bool() const { return m_EntityHandle != entt::null; }\n\t\toperator entt::entity() const { return m_EntityHandle; }\n\t\toperator uint32_t() const { return (uint32_t)m_EntityHandle; }\n\n\t\tUUID GetUUID() { return GetComponent<IDComponent>().ID; }\n\t\tconst std::string& GetName() { return GetComponent<TagComponent>().Tag; }\n\n\t\tbool operator==(const Entity& other) const\n\t\t{\n\t\t\treturn m_EntityHandle == other.m_EntityHandle && m_Scene == other.m_Scene;\n\t\t}\n\n\t\tbool operator!=(const Entity& other) const\n\t\t{\n\t\t\treturn !(*this == other);\n\t\t}\n\tprivate:\n\t\tentt::entity m_EntityHandle{ entt::null };\n\t\tScene* m_Scene = nullptr;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/Scene.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Scene.h\"\n#include \"Entity.h\"\n\n#include \"Components.h\"\n#include \"ScriptableEntity.h\"\n#include \"Hazel/Scripting/ScriptEngine.h\"\n#include \"Hazel/Renderer/Renderer2D.h\"\n#include \"Hazel/Physics/Physics2D.h\"\n\n#include <glm/glm.hpp>\n\n#include \"Entity.h\"\n\n// Box2D\n#include \"box2d/b2_world.h\"\n#include \"box2d/b2_body.h\"\n#include \"box2d/b2_fixture.h\"\n#include \"box2d/b2_polygon_shape.h\"\n#include \"box2d/b2_circle_shape.h\"\n\nnamespace Hazel {\n\n\tScene::Scene()\n\t{\n\t}\n\n\tScene::~Scene()\n\t{\n\t\tdelete m_PhysicsWorld;\n\t}\n\n\ttemplate<typename... Component>\n\tstatic void CopyComponent(entt::registry& dst, entt::registry& src, const std::unordered_map<UUID, entt::entity>& enttMap)\n\t{\n\t\t([&]()\n\t\t{\n\t\t\tauto view = src.view<Component>();\n\t\t\tfor (auto srcEntity : view)\n\t\t\t{\n\t\t\t\tentt::entity dstEntity = enttMap.at(src.get<IDComponent>(srcEntity).ID);\n\n\t\t\t\tauto& srcComponent = src.get<Component>(srcEntity);\n\t\t\t\tdst.emplace_or_replace<Component>(dstEntity, srcComponent);\n\t\t\t}\n\t\t}(), ...);\n\t}\n\n\ttemplate<typename... Component>\n\tstatic void CopyComponent(ComponentGroup<Component...>, entt::registry& dst, entt::registry& src, const std::unordered_map<UUID, entt::entity>& enttMap)\n\t{\n\t\tCopyComponent<Component...>(dst, src, enttMap);\n\t}\n\n\ttemplate<typename... Component>\n\tstatic void CopyComponentIfExists(Entity dst, Entity src)\n\t{\n\t\t([&]()\n\t\t{\n\t\t\tif (src.HasComponent<Component>())\n\t\t\t\tdst.AddOrReplaceComponent<Component>(src.GetComponent<Component>());\n\t\t}(), ...);\n\t}\n\n\ttemplate<typename... Component>\n\tstatic void CopyComponentIfExists(ComponentGroup<Component...>, Entity dst, Entity src)\n\t{\n\t\tCopyComponentIfExists<Component...>(dst, src);\n\t}\n\n\tRef<Scene> Scene::Copy(Ref<Scene> other)\n\t{\n\t\tRef<Scene> newScene = CreateRef<Scene>();\n\n\t\tnewScene->m_ViewportWidth = other->m_ViewportWidth;\n\t\tnewScene->m_ViewportHeight = other->m_ViewportHeight;\n\n\t\tauto& srcSceneRegistry = other->m_Registry;\n\t\tauto& dstSceneRegistry = newScene->m_Registry;\n\t\tstd::unordered_map<UUID, entt::entity> enttMap;\n\n\t\t// Create entities in new scene\n\t\tauto idView = srcSceneRegistry.view<IDComponent>();\n\t\tfor (auto e : idView)\n\t\t{\n\t\t\tUUID uuid = srcSceneRegistry.get<IDComponent>(e).ID;\n\t\t\tconst auto& name = srcSceneRegistry.get<TagComponent>(e).Tag;\n\t\t\tEntity newEntity = newScene->CreateEntityWithUUID(uuid, name);\n\t\t\tenttMap[uuid] = (entt::entity)newEntity;\n\t\t}\n\n\t\t// Copy components (except IDComponent and TagComponent)\n\t\tCopyComponent(AllComponents{}, dstSceneRegistry, srcSceneRegistry, enttMap);\n\n\t\treturn newScene;\n\t}\n\n\tEntity Scene::CreateEntity(const std::string& name)\n\t{\n\t\treturn CreateEntityWithUUID(UUID(), name);\n\t}\n\n\tEntity Scene::CreateEntityWithUUID(UUID uuid, const std::string& name)\n\t{\n\t\tEntity entity = { m_Registry.create(), this };\n\t\tentity.AddComponent<IDComponent>(uuid);\n\t\tentity.AddComponent<TransformComponent>();\n\t\tauto& tag = entity.AddComponent<TagComponent>();\n\t\ttag.Tag = name.empty() ? \"Entity\" : name;\n\n\t\tm_EntityMap[uuid] = entity;\n\n\t\treturn entity;\n\t}\n\n\tvoid Scene::DestroyEntity(Entity entity)\n\t{\n\t\tm_EntityMap.erase(entity.GetUUID());\n\t\tm_Registry.destroy(entity);\n\t}\n\n\tvoid Scene::OnRuntimeStart()\n\t{\n\t\tm_IsRunning = true;\n\n\t\tOnPhysics2DStart();\n\n\t\t// Scripting\n\t\t{\n\t\t\tScriptEngine::OnRuntimeStart(this);\n\t\t\t// Instantiate all script entities\n\n\t\t\tauto view = m_Registry.view<ScriptComponent>();\n\t\t\tfor (auto e : view)\n\t\t\t{\n\t\t\t\tEntity entity = { e, this };\n\t\t\t\tScriptEngine::OnCreateEntity(entity);\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid Scene::OnRuntimeStop()\n\t{\n\t\tm_IsRunning = false;\n\n\t\tOnPhysics2DStop();\n\n\t\tScriptEngine::OnRuntimeStop();\n\t}\n\n\tvoid Scene::OnSimulationStart()\n\t{\n\t\tOnPhysics2DStart();\n\t}\n\n\tvoid Scene::OnSimulationStop()\n\t{\n\t\tOnPhysics2DStop();\n\t}\n\n\tvoid Scene::OnUpdateRuntime(Timestep ts)\n\t{\n\t\tif (!m_IsPaused || m_StepFrames-- > 0)\n\t\t{\n\t\t\t// Update scripts\n\t\t\t{\n\t\t\t\t// C# Entity OnUpdate\n\t\t\t\tauto view = m_Registry.view<ScriptComponent>();\n\t\t\t\tfor (auto e : view)\n\t\t\t\t{\n\t\t\t\t\tEntity entity = { e, this };\n\t\t\t\t\tScriptEngine::OnUpdateEntity(entity, ts);\n\t\t\t\t}\n\n\t\t\t\tm_Registry.view<NativeScriptComponent>().each([=](auto entity, auto& nsc)\n\t\t\t\t\t{\n\t\t\t\t\t\t// TODO: Move to Scene::OnScenePlay\n\t\t\t\t\t\tif (!nsc.Instance)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnsc.Instance = nsc.InstantiateScript();\n\t\t\t\t\t\t\tnsc.Instance->m_Entity = Entity{ entity, this };\n\t\t\t\t\t\t\tnsc.Instance->OnCreate();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnsc.Instance->OnUpdate(ts);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Physics\n\t\t\t{\n\t\t\t\tconst int32_t velocityIterations = 6;\n\t\t\t\tconst int32_t positionIterations = 2;\n\t\t\t\tm_PhysicsWorld->Step(ts, velocityIterations, positionIterations);\n\n\t\t\t\t// Retrieve transform from Box2D\n\t\t\t\tauto view = m_Registry.view<Rigidbody2DComponent>();\n\t\t\t\tfor (auto e : view)\n\t\t\t\t{\n\t\t\t\t\tEntity entity = { e, this };\n\t\t\t\t\tauto& transform = entity.GetComponent<TransformComponent>();\n\t\t\t\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\n\t\t\t\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\n\t\t\t\t\tconst auto& position = body->GetPosition();\n\t\t\t\t\ttransform.Translation.x = position.x;\n\t\t\t\t\ttransform.Translation.y = position.y;\n\t\t\t\t\ttransform.Rotation.z = body->GetAngle();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Render 2D\n\t\tCamera* mainCamera = nullptr;\n\t\tglm::mat4 cameraTransform;\n\t\t{\n\t\t\tauto view = m_Registry.view<TransformComponent, CameraComponent>();\n\t\t\tfor (auto entity : view)\n\t\t\t{\n\t\t\t\tauto [transform, camera] = view.get<TransformComponent, CameraComponent>(entity);\n\t\t\t\t\n\t\t\t\tif (camera.Primary)\n\t\t\t\t{\n\t\t\t\t\tmainCamera = &camera.Camera;\n\t\t\t\t\tcameraTransform = transform.GetTransform();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (mainCamera)\n\t\t{\n\t\t\tRenderer2D::BeginScene(*mainCamera, cameraTransform);\n\n\t\t\t// Draw sprites\n\t\t\t{\n\t\t\t\tauto group = m_Registry.group<TransformComponent>(entt::get<SpriteRendererComponent>);\n\t\t\t\tfor (auto entity : group)\n\t\t\t\t{\n\t\t\t\t\tauto [transform, sprite] = group.get<TransformComponent, SpriteRendererComponent>(entity);\n\n\t\t\t\t\tRenderer2D::DrawSprite(transform.GetTransform(), sprite, (int)entity);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Draw circles\n\t\t\t{\n\t\t\t\tauto view = m_Registry.view<TransformComponent, CircleRendererComponent>();\n\t\t\t\tfor (auto entity : view)\n\t\t\t\t{\n\t\t\t\t\tauto [transform, circle] = view.get<TransformComponent, CircleRendererComponent>(entity);\n\n\t\t\t\t\tRenderer2D::DrawCircle(transform.GetTransform(), circle.Color, circle.Thickness, circle.Fade, (int)entity);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Draw text\n\t\t\t{\n\t\t\t\tauto view = m_Registry.view<TransformComponent, TextComponent>();\n\t\t\t\tfor (auto entity : view)\n\t\t\t\t{\n\t\t\t\t\tauto [transform, text] = view.get<TransformComponent, TextComponent>(entity);\n\n\t\t\t\t\tRenderer2D::DrawString(text.TextString, transform.GetTransform(), text, (int)entity);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tRenderer2D::EndScene();\n\t\t}\n\n\t}\n\n\tvoid Scene::OnUpdateSimulation(Timestep ts, EditorCamera& camera)\n\t{\n\t\tif (!m_IsPaused || m_StepFrames-- > 0)\n\t\t{\n\t\t\t// Physics\n\t\t\t{\n\t\t\t\tconst int32_t velocityIterations = 6;\n\t\t\t\tconst int32_t positionIterations = 2;\n\t\t\t\tm_PhysicsWorld->Step(ts, velocityIterations, positionIterations);\n\n\t\t\t\t// Retrieve transform from Box2D\n\t\t\t\tauto view = m_Registry.view<Rigidbody2DComponent>();\n\t\t\t\tfor (auto e : view)\n\t\t\t\t{\n\t\t\t\t\tEntity entity = { e, this };\n\t\t\t\t\tauto& transform = entity.GetComponent<TransformComponent>();\n\t\t\t\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\n\t\t\t\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\t\t\t\t\tconst auto& position = body->GetPosition();\n\t\t\t\t\ttransform.Translation.x = position.x;\n\t\t\t\t\ttransform.Translation.y = position.y;\n\t\t\t\t\ttransform.Rotation.z = body->GetAngle();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Render\n\t\tRenderScene(camera);\n\t}\n\n\tvoid Scene::OnUpdateEditor(Timestep ts, EditorCamera& camera)\n\t{\n\t\t// Render\n\t\tRenderScene(camera);\n\t}\n\n\tvoid Scene::OnViewportResize(uint32_t width, uint32_t height)\n\t{\n\t\tif (m_ViewportWidth == width && m_ViewportHeight == height)\n\t\t\treturn;\n\n\t\tm_ViewportWidth = width;\n\t\tm_ViewportHeight = height;\n\n\t\t// Resize our non-FixedAspectRatio cameras\n\t\tauto view = m_Registry.view<CameraComponent>();\n\t\tfor (auto entity : view)\n\t\t{\n\t\t\tauto& cameraComponent = view.get<CameraComponent>(entity);\n\t\t\tif (!cameraComponent.FixedAspectRatio)\n\t\t\t\tcameraComponent.Camera.SetViewportSize(width, height);\n\t\t}\n\t}\n\n\tEntity Scene::GetPrimaryCameraEntity()\n\t{\n\t\tauto view = m_Registry.view<CameraComponent>();\n\t\tfor (auto entity : view)\n\t\t{\n\t\t\tconst auto& camera = view.get<CameraComponent>(entity);\n\t\t\tif (camera.Primary)\n\t\t\t\treturn Entity{entity, this};\n\t\t}\n\t\treturn {};\n\t}\n\n\tvoid Scene::Step(int frames)\n\t{\n\t\tm_StepFrames = frames;\n\t}\n\n\tEntity Scene::DuplicateEntity(Entity entity)\n\t{\n\t\t// Copy name because we're going to modify component data structure\n\t\tstd::string name = entity.GetName();\n\t\tEntity newEntity = CreateEntity(name);\n\t\tCopyComponentIfExists(AllComponents{}, newEntity, entity);\n\t\treturn newEntity;\n\t}\n\n\tEntity Scene::FindEntityByName(std::string_view name)\n\t{\n\t\tauto view = m_Registry.view<TagComponent>();\n\t\tfor (auto entity : view)\n\t\t{\n\t\t\tconst TagComponent& tc = view.get<TagComponent>(entity);\n\t\t\tif (tc.Tag == name)\n\t\t\t\treturn Entity{ entity, this };\n\t\t}\n\t\treturn {};\n\t}\n\n\tEntity Scene::GetEntityByUUID(UUID uuid)\n\t{\n\t\t// TODO(Yan): Maybe should be assert\n\t\tif (m_EntityMap.find(uuid) != m_EntityMap.end())\n\t\t\treturn { m_EntityMap.at(uuid), this };\n\n\t\treturn {};\n\t}\n\n\tvoid Scene::OnPhysics2DStart()\n\t{\n\t\tm_PhysicsWorld = new b2World({ 0.0f, -9.8f });\n\n\t\tauto view = m_Registry.view<Rigidbody2DComponent>();\n\t\tfor (auto e : view)\n\t\t{\n\t\t\tEntity entity = { e, this };\n\t\t\tauto& transform = entity.GetComponent<TransformComponent>();\n\t\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\n\t\t\tb2BodyDef bodyDef;\n\t\t\tbodyDef.type = Utils::Rigidbody2DTypeToBox2DBody(rb2d.Type);\n\t\t\tbodyDef.position.Set(transform.Translation.x, transform.Translation.y);\n\t\t\tbodyDef.angle = transform.Rotation.z;\n\n\t\t\tb2Body* body = m_PhysicsWorld->CreateBody(&bodyDef);\n\t\t\tbody->SetFixedRotation(rb2d.FixedRotation);\n\t\t\trb2d.RuntimeBody = body;\n\n\t\t\tif (entity.HasComponent<BoxCollider2DComponent>())\n\t\t\t{\n\t\t\t\tauto& bc2d = entity.GetComponent<BoxCollider2DComponent>();\n\n\t\t\t\tb2PolygonShape boxShape;\n\t\t\t\tboxShape.SetAsBox(bc2d.Size.x * transform.Scale.x, bc2d.Size.y * transform.Scale.y, b2Vec2(bc2d.Offset.x, bc2d.Offset.y), 0.0f);\n\n\t\t\t\tb2FixtureDef fixtureDef;\n\t\t\t\tfixtureDef.shape = &boxShape;\n\t\t\t\tfixtureDef.density = bc2d.Density;\n\t\t\t\tfixtureDef.friction = bc2d.Friction;\n\t\t\t\tfixtureDef.restitution = bc2d.Restitution;\n\t\t\t\tfixtureDef.restitutionThreshold = bc2d.RestitutionThreshold;\n\t\t\t\tbody->CreateFixture(&fixtureDef);\n\t\t\t}\n\n\t\t\tif (entity.HasComponent<CircleCollider2DComponent>())\n\t\t\t{\n\t\t\t\tauto& cc2d = entity.GetComponent<CircleCollider2DComponent>();\n\n\t\t\t\tb2CircleShape circleShape;\n\t\t\t\tcircleShape.m_p.Set(cc2d.Offset.x, cc2d.Offset.y);\n\t\t\t\tcircleShape.m_radius = transform.Scale.x * cc2d.Radius;\n\n\t\t\t\tb2FixtureDef fixtureDef;\n\t\t\t\tfixtureDef.shape = &circleShape;\n\t\t\t\tfixtureDef.density = cc2d.Density;\n\t\t\t\tfixtureDef.friction = cc2d.Friction;\n\t\t\t\tfixtureDef.restitution = cc2d.Restitution;\n\t\t\t\tfixtureDef.restitutionThreshold = cc2d.RestitutionThreshold;\n\t\t\t\tbody->CreateFixture(&fixtureDef);\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid Scene::OnPhysics2DStop()\n\t{\n\t\tdelete m_PhysicsWorld;\n\t\tm_PhysicsWorld = nullptr;\n\t}\n\n\tvoid Scene::RenderScene(EditorCamera& camera)\n\t{\n\t\tRenderer2D::BeginScene(camera);\n\n\t\t// Draw sprites\n\t\t{\n\t\t\tauto group = m_Registry.group<TransformComponent>(entt::get<SpriteRendererComponent>);\n\t\t\tfor (auto entity : group)\n\t\t\t{\n\t\t\t\tauto [transform, sprite] = group.get<TransformComponent, SpriteRendererComponent>(entity);\n\n\t\t\t\tRenderer2D::DrawSprite(transform.GetTransform(), sprite, (int)entity);\n\t\t\t}\n\t\t}\n\n\t\t// Draw circles\n\t\t{\n\t\t\tauto view = m_Registry.view<TransformComponent, CircleRendererComponent>();\n\t\t\tfor (auto entity : view)\n\t\t\t{\n\t\t\t\tauto [transform, circle] = view.get<TransformComponent, CircleRendererComponent>(entity);\n\n\t\t\t\tRenderer2D::DrawCircle(transform.GetTransform(), circle.Color, circle.Thickness, circle.Fade, (int)entity);\n\t\t\t}\n\t\t}\n\n\t\t// Draw text\n\t\t{\n\t\t\tauto view = m_Registry.view<TransformComponent, TextComponent>();\n\t\t\tfor (auto entity : view)\n\t\t\t{\n\t\t\t\tauto [transform, text] = view.get<TransformComponent, TextComponent>(entity);\n\n\t\t\t\tRenderer2D::DrawString(text.TextString, transform.GetTransform(), text, (int)entity);\n\t\t\t}\n\t\t}\n\n\t\tRenderer2D::EndScene();\n\t}\n  \n  template<typename T>\n\tvoid Scene::OnComponentAdded(Entity entity, T& component)\n\t{\n\t\tstatic_assert(sizeof(T) == 0);\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<IDComponent>(Entity entity, IDComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<TransformComponent>(Entity entity, TransformComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<CameraComponent>(Entity entity, CameraComponent& component)\n\t{\n\t\tif (m_ViewportWidth > 0 && m_ViewportHeight > 0)\n\t\t\tcomponent.Camera.SetViewportSize(m_ViewportWidth, m_ViewportHeight);\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<ScriptComponent>(Entity entity, ScriptComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<SpriteRendererComponent>(Entity entity, SpriteRendererComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<CircleRendererComponent>(Entity entity, CircleRendererComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<TagComponent>(Entity entity, TagComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<NativeScriptComponent>(Entity entity, NativeScriptComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<Rigidbody2DComponent>(Entity entity, Rigidbody2DComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<BoxCollider2DComponent>(Entity entity, BoxCollider2DComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<CircleCollider2DComponent>(Entity entity, CircleCollider2DComponent& component)\n\t{\n\t}\n\n\ttemplate<>\n\tvoid Scene::OnComponentAdded<TextComponent>(Entity entity, TextComponent& component)\n\t{\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/Scene.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Timestep.h\"\n#include \"Hazel/Core/UUID.h\"\n#include \"Hazel/Renderer/EditorCamera.h\"\n\n#include \"entt.hpp\"\n\nclass b2World;\n\nnamespace Hazel {\n\n\tclass Entity;\n\n\tclass Scene\n\t{\n\tpublic:\n\t\tScene();\n\t\t~Scene();\n\n\t\tstatic Ref<Scene> Copy(Ref<Scene> other);\n\n\t\tEntity CreateEntity(const std::string& name = std::string());\n\t\tEntity CreateEntityWithUUID(UUID uuid, const std::string& name = std::string());\n\t\tvoid DestroyEntity(Entity entity);\n\n\t\tvoid OnRuntimeStart();\n\t\tvoid OnRuntimeStop();\n\n\t\tvoid OnSimulationStart();\n\t\tvoid OnSimulationStop();\n\n\t\tvoid OnUpdateRuntime(Timestep ts);\n\t\tvoid OnUpdateSimulation(Timestep ts, EditorCamera& camera);\n\t\tvoid OnUpdateEditor(Timestep ts, EditorCamera& camera);\n\t\tvoid OnViewportResize(uint32_t width, uint32_t height);\n\n\t\tEntity DuplicateEntity(Entity entity);\n\n\t\tEntity FindEntityByName(std::string_view name);\n\t\tEntity GetEntityByUUID(UUID uuid);\n\n\t\tEntity GetPrimaryCameraEntity();\n\n\t\tbool IsRunning() const { return m_IsRunning; }\n\t\tbool IsPaused() const { return m_IsPaused; }\n\n\t\tvoid SetPaused(bool paused) { m_IsPaused = paused; }\n\n\t\tvoid Step(int frames = 1);\n\n\t\ttemplate<typename... Components>\n\t\tauto GetAllEntitiesWith()\n\t\t{\n\t\t\treturn m_Registry.view<Components...>();\n\t\t}\n\tprivate:\n\t\ttemplate<typename T>\n\t\tvoid OnComponentAdded(Entity entity, T& component);\n\n\t\tvoid OnPhysics2DStart();\n\t\tvoid OnPhysics2DStop();\n\n\t\tvoid RenderScene(EditorCamera& camera);\n\tprivate:\n\t\tentt::registry m_Registry;\n\t\tuint32_t m_ViewportWidth = 0, m_ViewportHeight = 0;\n\t\tbool m_IsRunning = false;\n\t\tbool m_IsPaused = false;\n\t\tint m_StepFrames = 0;\n\n\t\tb2World* m_PhysicsWorld = nullptr;\n\n\t\tstd::unordered_map<UUID, entt::entity> m_EntityMap;\n\n\t\tfriend class Entity;\n\t\tfriend class SceneSerializer;\n\t\tfriend class SceneHierarchyPanel;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/SceneCamera.cpp",
    "content": "#include \"hzpch.h\"\n#include \"SceneCamera.h\"\n\n#include <glm/gtc/matrix_transform.hpp>\n\nnamespace Hazel {\n\n\tSceneCamera::SceneCamera()\n\t{\n\t\tRecalculateProjection();\n\t}\n\n\tvoid SceneCamera::SetPerspective(float verticalFOV, float nearClip, float farClip)\n\t{\n\t\tm_ProjectionType = ProjectionType::Perspective;\n\t\tm_PerspectiveFOV = verticalFOV;\n\t\tm_PerspectiveNear = nearClip;\n\t\tm_PerspectiveFar = farClip;\n\t\tRecalculateProjection();\n\t}\n\n\tvoid SceneCamera::SetOrthographic(float size, float nearClip, float farClip)\n\t{\n\t\tm_ProjectionType = ProjectionType::Orthographic;\n\t\tm_OrthographicSize = size;\n\t\tm_OrthographicNear = nearClip;\n\t\tm_OrthographicFar = farClip;\n\t\tRecalculateProjection();\n\t}\n\n\tvoid SceneCamera::SetViewportSize(uint32_t width, uint32_t height)\n\t{\n\t\tHZ_CORE_ASSERT(width > 0 && height > 0);\n\t\tm_AspectRatio = (float)width / (float)height;\n\t\tRecalculateProjection();\n\t}\n\n\tvoid SceneCamera::RecalculateProjection()\n\t{\n\t\tif (m_ProjectionType == ProjectionType::Perspective)\n\t\t{\n\t\t\tm_Projection = glm::perspective(m_PerspectiveFOV, m_AspectRatio, m_PerspectiveNear, m_PerspectiveFar);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfloat orthoLeft = -m_OrthographicSize * m_AspectRatio * 0.5f;\n\t\t\tfloat orthoRight = m_OrthographicSize * m_AspectRatio * 0.5f;\n\t\t\tfloat orthoBottom = -m_OrthographicSize * 0.5f;\n\t\t\tfloat orthoTop = m_OrthographicSize * 0.5f;\n\n\t\t\tm_Projection = glm::ortho(orthoLeft, orthoRight,\n\t\t\t\torthoBottom, orthoTop, m_OrthographicNear, m_OrthographicFar);\n\t\t}\n\t\t\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/SceneCamera.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Camera.h\"\n\nnamespace Hazel {\n\n\tclass SceneCamera : public Camera\n\t{\n\tpublic:\n\t\tenum class ProjectionType { Perspective = 0, Orthographic = 1 };\n\tpublic:\n\t\tSceneCamera();\n\t\tvirtual ~SceneCamera() = default;\n\n\t\tvoid SetPerspective(float verticalFOV, float nearClip, float farClip);\n\t\tvoid SetOrthographic(float size, float nearClip, float farClip);\n\n\t\tvoid SetViewportSize(uint32_t width, uint32_t height);\n\n\t\tfloat GetPerspectiveVerticalFOV() const { return m_PerspectiveFOV; }\n\t\tvoid SetPerspectiveVerticalFOV(float verticalFov) { m_PerspectiveFOV = verticalFov; RecalculateProjection(); }\n\t\tfloat GetPerspectiveNearClip() const { return m_PerspectiveNear; }\n\t\tvoid SetPerspectiveNearClip(float nearClip) { m_PerspectiveNear = nearClip; RecalculateProjection(); }\n\t\tfloat GetPerspectiveFarClip() const { return m_PerspectiveFar; }\n\t\tvoid SetPerspectiveFarClip(float farClip) { m_PerspectiveFar = farClip; RecalculateProjection(); }\n\n\t\tfloat GetOrthographicSize() const { return m_OrthographicSize; }\n\t\tvoid SetOrthographicSize(float size) { m_OrthographicSize = size; RecalculateProjection(); }\n\t\tfloat GetOrthographicNearClip() const { return m_OrthographicNear; }\n\t\tvoid SetOrthographicNearClip(float nearClip) { m_OrthographicNear = nearClip; RecalculateProjection(); }\n\t\tfloat GetOrthographicFarClip() const { return m_OrthographicFar; }\n\t\tvoid SetOrthographicFarClip(float farClip) { m_OrthographicFar = farClip; RecalculateProjection(); }\n\n\t\tProjectionType GetProjectionType() const { return m_ProjectionType; }\n\t\tvoid SetProjectionType(ProjectionType type) { m_ProjectionType = type; RecalculateProjection(); }\n\tprivate:\n\t\tvoid RecalculateProjection();\n\tprivate:\n\t\tProjectionType m_ProjectionType = ProjectionType::Orthographic;\n\n\t\tfloat m_PerspectiveFOV = glm::radians(45.0f);\n\t\tfloat m_PerspectiveNear = 0.01f, m_PerspectiveFar = 1000.0f;\n\n\t\tfloat m_OrthographicSize = 10.0f;\n\t\tfloat m_OrthographicNear = -1.0f, m_OrthographicFar = 1.0f;\n\n\t\tfloat m_AspectRatio = 0.0f;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/SceneSerializer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"SceneSerializer.h\"\n\n#include \"Entity.h\"\n#include \"Components.h\"\n#include \"Hazel/Scripting/ScriptEngine.h\"\n#include \"Hazel/Core/UUID.h\"\n\n#include \"Hazel/Project/Project.h\"\n\n#include <fstream>\n\n#include <yaml-cpp/yaml.h>\n\nnamespace YAML {\n\n\ttemplate<>\n\tstruct convert<glm::vec2>\n\t{\n\t\tstatic Node encode(const glm::vec2& rhs)\n\t\t{\n\t\t\tNode node;\n\t\t\tnode.push_back(rhs.x);\n\t\t\tnode.push_back(rhs.y);\n\t\t\tnode.SetStyle(EmitterStyle::Flow);\n\t\t\treturn node;\n\t\t}\n\n\t\tstatic bool decode(const Node& node, glm::vec2& rhs)\n\t\t{\n\t\t\tif (!node.IsSequence() || node.size() != 2)\n\t\t\t\treturn false;\n\n\t\t\trhs.x = node[0].as<float>();\n\t\t\trhs.y = node[1].as<float>();\n\t\t\treturn true;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct convert<glm::vec3>\n\t{\n\t\tstatic Node encode(const glm::vec3& rhs)\n\t\t{\n\t\t\tNode node;\n\t\t\tnode.push_back(rhs.x);\n\t\t\tnode.push_back(rhs.y);\n\t\t\tnode.push_back(rhs.z);\n\t\t\tnode.SetStyle(EmitterStyle::Flow);\n\t\t\treturn node;\n\t\t}\n\n\t\tstatic bool decode(const Node& node, glm::vec3& rhs)\n\t\t{\n\t\t\tif (!node.IsSequence() || node.size() != 3)\n\t\t\t\treturn false;\n\n\t\t\trhs.x = node[0].as<float>();\n\t\t\trhs.y = node[1].as<float>();\n\t\t\trhs.z = node[2].as<float>();\n\t\t\treturn true;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct convert<glm::vec4>\n\t{\n\t\tstatic Node encode(const glm::vec4& rhs)\n\t\t{\n\t\t\tNode node;\n\t\t\tnode.push_back(rhs.x);\n\t\t\tnode.push_back(rhs.y);\n\t\t\tnode.push_back(rhs.z);\n\t\t\tnode.push_back(rhs.w);\n\t\t\tnode.SetStyle(EmitterStyle::Flow);\n\t\t\treturn node;\n\t\t}\n\n\t\tstatic bool decode(const Node& node, glm::vec4& rhs)\n\t\t{\n\t\t\tif (!node.IsSequence() || node.size() != 4)\n\t\t\t\treturn false;\n\n\t\t\trhs.x = node[0].as<float>();\n\t\t\trhs.y = node[1].as<float>();\n\t\t\trhs.z = node[2].as<float>();\n\t\t\trhs.w = node[3].as<float>();\n\t\t\treturn true;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct convert<Hazel::UUID>\n\t{\n\t\tstatic Node encode(const Hazel::UUID& uuid)\n\t\t{\n\t\t\tNode node;\n\t\t\tnode.push_back((uint64_t)uuid);\n\t\t\treturn node;\n\t\t}\n\n\t\tstatic bool decode(const Node& node, Hazel::UUID& uuid)\n\t\t{\n\t\t\tuuid = node.as<uint64_t>();\n\t\t\treturn true;\n\t\t}\n\t};\n\n}\n\nnamespace Hazel {\n\n#define WRITE_SCRIPT_FIELD(FieldType, Type)           \\\n\t\t\tcase ScriptFieldType::FieldType:          \\\n\t\t\t\tout << scriptField.GetValue<Type>();  \\\n\t\t\t\tbreak\n\n#define READ_SCRIPT_FIELD(FieldType, Type)             \\\n\tcase ScriptFieldType::FieldType:                   \\\n\t{                                                  \\\n\t\tType data = scriptField[\"Data\"].as<Type>();    \\\n\t\tfieldInstance.SetValue(data);                  \\\n\t\tbreak;                                         \\\n\t}\n\n\tYAML::Emitter& operator<<(YAML::Emitter& out, const glm::vec2& v)\n\t{\n\t\tout << YAML::Flow;\n\t\tout << YAML::BeginSeq << v.x << v.y << YAML::EndSeq;\n\t\treturn out;\n\t}\n\n\tYAML::Emitter& operator<<(YAML::Emitter& out, const glm::vec3& v)\n\t{\n\t\tout << YAML::Flow;\n\t\tout << YAML::BeginSeq << v.x << v.y << v.z << YAML::EndSeq;\n\t\treturn out;\n\t}\n\n\tYAML::Emitter& operator<<(YAML::Emitter& out, const glm::vec4& v)\n\t{\n\t\tout << YAML::Flow;\n\t\tout << YAML::BeginSeq << v.x << v.y << v.z << v.w << YAML::EndSeq;\n\t\treturn out;\n\t}\n\n\tstatic std::string RigidBody2DBodyTypeToString(Rigidbody2DComponent::BodyType bodyType)\n\t{\n\t\tswitch (bodyType)\n\t\t{\n\t\t\tcase Rigidbody2DComponent::BodyType::Static:    return \"Static\";\n\t\t\tcase Rigidbody2DComponent::BodyType::Dynamic:   return \"Dynamic\";\n\t\t\tcase Rigidbody2DComponent::BodyType::Kinematic: return \"Kinematic\";\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown body type\");\n\t\treturn {};\n\t}\n\n\tstatic Rigidbody2DComponent::BodyType RigidBody2DBodyTypeFromString(const std::string& bodyTypeString)\n\t{\n\t\tif (bodyTypeString == \"Static\")    return Rigidbody2DComponent::BodyType::Static;\n\t\tif (bodyTypeString == \"Dynamic\")   return Rigidbody2DComponent::BodyType::Dynamic;\n\t\tif (bodyTypeString == \"Kinematic\") return Rigidbody2DComponent::BodyType::Kinematic;\n\t\n\t\tHZ_CORE_ASSERT(false, \"Unknown body type\");\n\t\treturn Rigidbody2DComponent::BodyType::Static;\n\t}\n\n\tSceneSerializer::SceneSerializer(const Ref<Scene>& scene)\n\t\t: m_Scene(scene)\n\t{\n\t}\n\n\tstatic void SerializeEntity(YAML::Emitter& out, Entity entity)\n\t{\n\t\tHZ_CORE_ASSERT(entity.HasComponent<IDComponent>());\n\n\t\tout << YAML::BeginMap; // Entity\n\t\tout << YAML::Key << \"Entity\" << YAML::Value << entity.GetUUID();\n\n\t\tif (entity.HasComponent<TagComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"TagComponent\";\n\t\t\tout << YAML::BeginMap; // TagComponent\n\n\t\t\tauto& tag = entity.GetComponent<TagComponent>().Tag;\n\t\t\tout << YAML::Key << \"Tag\" << YAML::Value << tag;\n\n\t\t\tout << YAML::EndMap; // TagComponent\n\t\t}\n\n\t\tif (entity.HasComponent<TransformComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"TransformComponent\";\n\t\t\tout << YAML::BeginMap; // TransformComponent\n\n\t\t\tauto& tc = entity.GetComponent<TransformComponent>();\n\t\t\tout << YAML::Key << \"Translation\" << YAML::Value << tc.Translation;\n\t\t\tout << YAML::Key << \"Rotation\" << YAML::Value << tc.Rotation;\n\t\t\tout << YAML::Key << \"Scale\" << YAML::Value << tc.Scale;\n\n\t\t\tout << YAML::EndMap; // TransformComponent\n\t\t}\n\n\t\tif (entity.HasComponent<CameraComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"CameraComponent\";\n\t\t\tout << YAML::BeginMap; // CameraComponent\n\n\t\t\tauto& cameraComponent = entity.GetComponent<CameraComponent>();\n\t\t\tauto& camera = cameraComponent.Camera;\n\n\t\t\tout << YAML::Key << \"Camera\" << YAML::Value;\n\t\t\tout << YAML::BeginMap; // Camera\n\t\t\tout << YAML::Key << \"ProjectionType\" << YAML::Value << (int)camera.GetProjectionType();\n\t\t\tout << YAML::Key << \"PerspectiveFOV\" << YAML::Value << camera.GetPerspectiveVerticalFOV();\n\t\t\tout << YAML::Key << \"PerspectiveNear\" << YAML::Value << camera.GetPerspectiveNearClip();\n\t\t\tout << YAML::Key << \"PerspectiveFar\" << YAML::Value << camera.GetPerspectiveFarClip();\n\t\t\tout << YAML::Key << \"OrthographicSize\" << YAML::Value << camera.GetOrthographicSize();\n\t\t\tout << YAML::Key << \"OrthographicNear\" << YAML::Value << camera.GetOrthographicNearClip();\n\t\t\tout << YAML::Key << \"OrthographicFar\" << YAML::Value << camera.GetOrthographicFarClip();\n\t\t\tout << YAML::EndMap; // Camera\n\n\t\t\tout << YAML::Key << \"Primary\" << YAML::Value << cameraComponent.Primary;\n\t\t\tout << YAML::Key << \"FixedAspectRatio\" << YAML::Value << cameraComponent.FixedAspectRatio;\n\n\t\t\tout << YAML::EndMap; // CameraComponent\n\t\t}\n\n\t\tif (entity.HasComponent<ScriptComponent>())\n\t\t{\n\t\t\tauto& scriptComponent = entity.GetComponent<ScriptComponent>();\n\n\t\t\tout << YAML::Key << \"ScriptComponent\";\n\t\t\tout << YAML::BeginMap; // ScriptComponent\n\t\t\tout << YAML::Key << \"ClassName\" << YAML::Value << scriptComponent.ClassName;\n\n\t\t\t// Fields\n\t\t\tRef<ScriptClass> entityClass = ScriptEngine::GetEntityClass(scriptComponent.ClassName);\n\t\t\tconst auto& fields = entityClass->GetFields();\n\t\t\tif (fields.size() > 0)\n\t\t\t{\n\t\t\t\tout << YAML::Key << \"ScriptFields\" << YAML::Value;\n\t\t\t\tauto& entityFields = ScriptEngine::GetScriptFieldMap(entity);\n\t\t\t\tout << YAML::BeginSeq;\n\t\t\t\tfor (const auto& [name, field] : fields)\n\t\t\t\t{\n\t\t\t\t\tif (entityFields.find(name) == entityFields.end())\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tout << YAML::BeginMap; // ScriptField\n\t\t\t\t\tout << YAML::Key << \"Name\" << YAML::Value << name;\n\t\t\t\t\tout << YAML::Key << \"Type\" << YAML::Value << Utils::ScriptFieldTypeToString(field.Type);\n\n\t\t\t\t\tout << YAML::Key << \"Data\" << YAML::Value;\n\t\t\t\t\tScriptFieldInstance& scriptField = entityFields.at(name);\n\n\t\t\t\t\tswitch (field.Type)\n\t\t\t\t\t{\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Float,   float     );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Double,  double    );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Bool,    bool      );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Char,    char      );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Byte,    int8_t    );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Short,   int16_t   );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Int,     int32_t   );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Long,    int64_t   );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(UByte,   uint8_t   );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(UShort,  uint16_t  );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(UInt,    uint32_t  );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(ULong,   uint64_t  );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Vector2, glm::vec2 );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Vector3, glm::vec3 );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Vector4, glm::vec4 );\n\t\t\t\t\t\tWRITE_SCRIPT_FIELD(Entity,  UUID      );\n\t\t\t\t\t}\n\t\t\t\t\tout << YAML::EndMap; // ScriptFields\n\t\t\t\t}\n\t\t\t\tout << YAML::EndSeq;\n\t\t\t}\n\n\t\t\tout << YAML::EndMap; // ScriptComponent\n\t\t}\n\n\t\tif (entity.HasComponent<SpriteRendererComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"SpriteRendererComponent\";\n\t\t\tout << YAML::BeginMap; // SpriteRendererComponent\n\n\t\t\tauto& spriteRendererComponent = entity.GetComponent<SpriteRendererComponent>();\n\t\t\tout << YAML::Key << \"Color\" << YAML::Value << spriteRendererComponent.Color;\n\t\t\tif (spriteRendererComponent.Texture)\n\t\t\t\tout << YAML::Key << \"TexturePath\" << YAML::Value << spriteRendererComponent.Texture->GetPath();\n\n\t\t\tout << YAML::Key << \"TilingFactor\" << YAML::Value << spriteRendererComponent.TilingFactor;\n\n\t\t\tout << YAML::EndMap; // SpriteRendererComponent\n\t\t}\n\n\t\tif (entity.HasComponent<CircleRendererComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"CircleRendererComponent\";\n\t\t\tout << YAML::BeginMap; // CircleRendererComponent\n\n\t\t\tauto& circleRendererComponent = entity.GetComponent<CircleRendererComponent>();\n\t\t\tout << YAML::Key << \"Color\" << YAML::Value << circleRendererComponent.Color;\n\t\t\tout << YAML::Key << \"Thickness\" << YAML::Value << circleRendererComponent.Thickness;\n\t\t\tout << YAML::Key << \"Fade\" << YAML::Value << circleRendererComponent.Fade;\n\n\t\t\tout << YAML::EndMap; // CircleRendererComponent\n\t\t}\n\n\t\tif (entity.HasComponent<Rigidbody2DComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"Rigidbody2DComponent\";\n\t\t\tout << YAML::BeginMap; // Rigidbody2DComponent\n\n\t\t\tauto& rb2dComponent = entity.GetComponent<Rigidbody2DComponent>();\n\t\t\tout << YAML::Key << \"BodyType\" << YAML::Value << RigidBody2DBodyTypeToString(rb2dComponent.Type);\n\t\t\tout << YAML::Key << \"FixedRotation\" << YAML::Value << rb2dComponent.FixedRotation;\n\n\t\t\tout << YAML::EndMap; // Rigidbody2DComponent\n\t\t}\n\n\t\tif (entity.HasComponent<BoxCollider2DComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"BoxCollider2DComponent\";\n\t\t\tout << YAML::BeginMap; // BoxCollider2DComponent\n\n\t\t\tauto& bc2dComponent = entity.GetComponent<BoxCollider2DComponent>();\n\t\t\tout << YAML::Key << \"Offset\" << YAML::Value << bc2dComponent.Offset;\n\t\t\tout << YAML::Key << \"Size\" << YAML::Value << bc2dComponent.Size;\n\t\t\tout << YAML::Key << \"Density\" << YAML::Value << bc2dComponent.Density;\n\t\t\tout << YAML::Key << \"Friction\" << YAML::Value << bc2dComponent.Friction;\n\t\t\tout << YAML::Key << \"Restitution\" << YAML::Value << bc2dComponent.Restitution;\n\t\t\tout << YAML::Key << \"RestitutionThreshold\" << YAML::Value << bc2dComponent.RestitutionThreshold;\n\n\t\t\tout << YAML::EndMap; // BoxCollider2DComponent\n\t\t}\n\n\t\tif (entity.HasComponent<CircleCollider2DComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"CircleCollider2DComponent\";\n\t\t\tout << YAML::BeginMap; // CircleCollider2DComponent\n\n\t\t\tauto& cc2dComponent = entity.GetComponent<CircleCollider2DComponent>();\n\t\t\tout << YAML::Key << \"Offset\" << YAML::Value << cc2dComponent.Offset;\n\t\t\tout << YAML::Key << \"Radius\" << YAML::Value << cc2dComponent.Radius;\n\t\t\tout << YAML::Key << \"Density\" << YAML::Value << cc2dComponent.Density;\n\t\t\tout << YAML::Key << \"Friction\" << YAML::Value << cc2dComponent.Friction;\n\t\t\tout << YAML::Key << \"Restitution\" << YAML::Value << cc2dComponent.Restitution;\n\t\t\tout << YAML::Key << \"RestitutionThreshold\" << YAML::Value << cc2dComponent.RestitutionThreshold;\n\n\t\t\tout << YAML::EndMap; // CircleCollider2DComponent\n\t\t}\n\n\t\tif (entity.HasComponent<TextComponent>())\n\t\t{\n\t\t\tout << YAML::Key << \"TextComponent\";\n\t\t\tout << YAML::BeginMap; // TextComponent\n\n\t\t\tauto& textComponent = entity.GetComponent<TextComponent>();\n\t\t\tout << YAML::Key << \"TextString\" << YAML::Value << textComponent.TextString;\n\t\t\t// TODO: textComponent.FontAsset\n\t\t\tout << YAML::Key << \"Color\" << YAML::Value << textComponent.Color;\n\t\t\tout << YAML::Key << \"Kerning\" << YAML::Value << textComponent.Kerning;\n\t\t\tout << YAML::Key << \"LineSpacing\" << YAML::Value << textComponent.LineSpacing;\n\n\t\t\tout << YAML::EndMap; // TextComponent\n\t\t}\n\n\t\tout << YAML::EndMap; // Entity\n\t}\n\n\tvoid SceneSerializer::Serialize(const std::string& filepath)\n\t{\n\t\tYAML::Emitter out;\n\t\tout << YAML::BeginMap;\n\t\tout << YAML::Key << \"Scene\" << YAML::Value << \"Untitled\";\n\t\tout << YAML::Key << \"Entities\" << YAML::Value << YAML::BeginSeq;\n\t\tm_Scene->m_Registry.each([&](auto entityID)\n\t\t{\n\t\t\tEntity entity = { entityID, m_Scene.get() };\n\t\t\tif (!entity)\n\t\t\t\treturn;\n\n\t\t\tSerializeEntity(out, entity);\n\t\t});\n\t\tout << YAML::EndSeq;\n\t\tout << YAML::EndMap;\n\n\t\tstd::ofstream fout(filepath);\n\t\tfout << out.c_str();\n\t}\n\n\tvoid SceneSerializer::SerializeRuntime(const std::string& filepath)\n\t{\n\t\t// Not implemented\n\t\tHZ_CORE_ASSERT(false);\n\t}\n\n\tbool SceneSerializer::Deserialize(const std::string& filepath)\n\t{\n\t\tYAML::Node data;\n\t\ttry\n\t\t{\n\t\t\tdata = YAML::LoadFile(filepath);\n\t\t}\n\t\tcatch (YAML::ParserException e)\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"Failed to load .hazel file '{0}'\\n     {1}\", filepath, e.what());\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!data[\"Scene\"])\n\t\t\treturn false;\n\n\t\tstd::string sceneName = data[\"Scene\"].as<std::string>();\n\t\tHZ_CORE_TRACE(\"Deserializing scene '{0}'\", sceneName);\n\n\t\tauto entities = data[\"Entities\"];\n\t\tif (entities)\n\t\t{\n\t\t\tfor (auto entity : entities)\n\t\t\t{\n\t\t\t\tuint64_t uuid = entity[\"Entity\"].as<uint64_t>();\n\n\t\t\t\tstd::string name;\n\t\t\t\tauto tagComponent = entity[\"TagComponent\"];\n\t\t\t\tif (tagComponent)\n\t\t\t\t\tname = tagComponent[\"Tag\"].as<std::string>();\n\n\t\t\t\tHZ_CORE_TRACE(\"Deserialized entity with ID = {0}, name = {1}\", uuid, name);\n\n\t\t\t\tEntity deserializedEntity = m_Scene->CreateEntityWithUUID(uuid, name);\n\n\t\t\t\tauto transformComponent = entity[\"TransformComponent\"];\n\t\t\t\tif (transformComponent)\n\t\t\t\t{\n\t\t\t\t\t// Entities always have transforms\n\t\t\t\t\tauto& tc = deserializedEntity.GetComponent<TransformComponent>();\n\t\t\t\t\ttc.Translation = transformComponent[\"Translation\"].as<glm::vec3>();\n\t\t\t\t\ttc.Rotation = transformComponent[\"Rotation\"].as<glm::vec3>();\n\t\t\t\t\ttc.Scale = transformComponent[\"Scale\"].as<glm::vec3>();\n\t\t\t\t}\n\n\t\t\t\tauto cameraComponent = entity[\"CameraComponent\"];\n\t\t\t\tif (cameraComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& cc = deserializedEntity.AddComponent<CameraComponent>();\n\n\t\t\t\t\tauto& cameraProps = cameraComponent[\"Camera\"];\n\t\t\t\t\tcc.Camera.SetProjectionType((SceneCamera::ProjectionType)cameraProps[\"ProjectionType\"].as<int>());\n\n\t\t\t\t\tcc.Camera.SetPerspectiveVerticalFOV(cameraProps[\"PerspectiveFOV\"].as<float>());\n\t\t\t\t\tcc.Camera.SetPerspectiveNearClip(cameraProps[\"PerspectiveNear\"].as<float>());\n\t\t\t\t\tcc.Camera.SetPerspectiveFarClip(cameraProps[\"PerspectiveFar\"].as<float>());\n\n\t\t\t\t\tcc.Camera.SetOrthographicSize(cameraProps[\"OrthographicSize\"].as<float>());\n\t\t\t\t\tcc.Camera.SetOrthographicNearClip(cameraProps[\"OrthographicNear\"].as<float>());\n\t\t\t\t\tcc.Camera.SetOrthographicFarClip(cameraProps[\"OrthographicFar\"].as<float>());\n\n\t\t\t\t\tcc.Primary = cameraComponent[\"Primary\"].as<bool>();\n\t\t\t\t\tcc.FixedAspectRatio = cameraComponent[\"FixedAspectRatio\"].as<bool>();\n\t\t\t\t}\n\n\t\t\t\tauto scriptComponent = entity[\"ScriptComponent\"];\n\t\t\t\tif (scriptComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& sc = deserializedEntity.AddComponent<ScriptComponent>();\n\t\t\t\t\tsc.ClassName = scriptComponent[\"ClassName\"].as<std::string>();\n\n\t\t\t\t\tauto scriptFields = scriptComponent[\"ScriptFields\"];\n\t\t\t\t\tif (scriptFields)\n\t\t\t\t\t{\n\t\t\t\t\t\tRef<ScriptClass> entityClass = ScriptEngine::GetEntityClass(sc.ClassName);\n\t\t\t\t\t\tif (entityClass)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst auto& fields = entityClass->GetFields();\n\t\t\t\t\t\t\tauto& entityFields = ScriptEngine::GetScriptFieldMap(deserializedEntity);\n\n\t\t\t\t\t\t\tfor (auto scriptField : scriptFields)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstd::string name = scriptField[\"Name\"].as<std::string>();\n\t\t\t\t\t\t\t\tstd::string typeString = scriptField[\"Type\"].as<std::string>();\n\t\t\t\t\t\t\t\tScriptFieldType type = Utils::ScriptFieldTypeFromString(typeString);\n\n\t\t\t\t\t\t\t\tScriptFieldInstance& fieldInstance = entityFields[name];\n\n\t\t\t\t\t\t\t\t// TODO(Yan): turn this assert into Hazelnut log warning\n\t\t\t\t\t\t\t\tHZ_CORE_ASSERT(fields.find(name) != fields.end());\n\n\t\t\t\t\t\t\t\tif (fields.find(name) == fields.end())\n\t\t\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t\t\tfieldInstance.Field = fields.at(name);\n\n\t\t\t\t\t\t\t\tswitch (type)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Float, float);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Double, double);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Bool, bool);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Char, char);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Byte, int8_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Short, int16_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Int, int32_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Long, int64_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(UByte, uint8_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(UShort, uint16_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(UInt, uint32_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(ULong, uint64_t);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Vector2, glm::vec2);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Vector3, glm::vec3);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Vector4, glm::vec4);\n\t\t\t\t\t\t\t\t\tREAD_SCRIPT_FIELD(Entity, UUID);\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}\n\n\t\t\t\t}\n\n\t\t\t\tauto spriteRendererComponent = entity[\"SpriteRendererComponent\"];\n\t\t\t\tif (spriteRendererComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& src = deserializedEntity.AddComponent<SpriteRendererComponent>();\n\t\t\t\t\tsrc.Color = spriteRendererComponent[\"Color\"].as<glm::vec4>();\n\t\t\t\t\tif (spriteRendererComponent[\"TexturePath\"])\n\t\t\t\t\t{\n\t\t\t\t\t\tstd::string texturePath = spriteRendererComponent[\"TexturePath\"].as<std::string>();\n\t\t\t\t\t\tauto path = Project::GetAssetFileSystemPath(texturePath);\n\t\t\t\t\t\tsrc.Texture = Texture2D::Create(path.string());\n\t\t\t\t\t}\n\n\t\t\t\t\tif (spriteRendererComponent[\"TilingFactor\"])\n\t\t\t\t\t\tsrc.TilingFactor = spriteRendererComponent[\"TilingFactor\"].as<float>();\n\t\t\t\t}\n\n\t\t\t\tauto circleRendererComponent = entity[\"CircleRendererComponent\"];\n\t\t\t\tif (circleRendererComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& crc = deserializedEntity.AddComponent<CircleRendererComponent>();\n\t\t\t\t\tcrc.Color = circleRendererComponent[\"Color\"].as<glm::vec4>();\n\t\t\t\t\tcrc.Thickness = circleRendererComponent[\"Thickness\"].as<float>();\n\t\t\t\t\tcrc.Fade = circleRendererComponent[\"Fade\"].as<float>();\n\t\t\t\t}\n\n\t\t\t\tauto rigidbody2DComponent = entity[\"Rigidbody2DComponent\"];\n\t\t\t\tif (rigidbody2DComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& rb2d = deserializedEntity.AddComponent<Rigidbody2DComponent>();\n\t\t\t\t\trb2d.Type = RigidBody2DBodyTypeFromString(rigidbody2DComponent[\"BodyType\"].as<std::string>());\n\t\t\t\t\trb2d.FixedRotation = rigidbody2DComponent[\"FixedRotation\"].as<bool>();\n\t\t\t\t}\n\n\t\t\t\tauto boxCollider2DComponent = entity[\"BoxCollider2DComponent\"];\n\t\t\t\tif (boxCollider2DComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& bc2d = deserializedEntity.AddComponent<BoxCollider2DComponent>();\n\t\t\t\t\tbc2d.Offset = boxCollider2DComponent[\"Offset\"].as<glm::vec2>();\n\t\t\t\t\tbc2d.Size = boxCollider2DComponent[\"Size\"].as<glm::vec2>();\n\t\t\t\t\tbc2d.Density = boxCollider2DComponent[\"Density\"].as<float>();\n\t\t\t\t\tbc2d.Friction = boxCollider2DComponent[\"Friction\"].as<float>();\n\t\t\t\t\tbc2d.Restitution = boxCollider2DComponent[\"Restitution\"].as<float>();\n\t\t\t\t\tbc2d.RestitutionThreshold = boxCollider2DComponent[\"RestitutionThreshold\"].as<float>();\n\t\t\t\t}\n\n\t\t\t\tauto circleCollider2DComponent = entity[\"CircleCollider2DComponent\"];\n\t\t\t\tif (circleCollider2DComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& cc2d = deserializedEntity.AddComponent<CircleCollider2DComponent>();\n\t\t\t\t\tcc2d.Offset = circleCollider2DComponent[\"Offset\"].as<glm::vec2>();\n\t\t\t\t\tcc2d.Radius = circleCollider2DComponent[\"Radius\"].as<float>();\n\t\t\t\t\tcc2d.Density = circleCollider2DComponent[\"Density\"].as<float>();\n\t\t\t\t\tcc2d.Friction = circleCollider2DComponent[\"Friction\"].as<float>();\n\t\t\t\t\tcc2d.Restitution = circleCollider2DComponent[\"Restitution\"].as<float>();\n\t\t\t\t\tcc2d.RestitutionThreshold = circleCollider2DComponent[\"RestitutionThreshold\"].as<float>();\n\t\t\t\t}\n\n\t\t\t\tauto textComponent = entity[\"TextComponent\"];\n\t\t\t\tif (textComponent)\n\t\t\t\t{\n\t\t\t\t\tauto& tc = deserializedEntity.AddComponent<TextComponent>();\n\t\t\t\t\ttc.TextString = textComponent[\"TextString\"].as<std::string>();\n\t\t\t\t\t// tc.FontAsset // TODO\n\t\t\t\t\ttc.Color = textComponent[\"Color\"].as<glm::vec4>();\n\t\t\t\t\ttc.Kerning = textComponent[\"Kerning\"].as<float>();\n\t\t\t\t\ttc.LineSpacing = textComponent[\"LineSpacing\"].as<float>();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tbool SceneSerializer::DeserializeRuntime(const std::string& filepath)\n\t{\n\t\t// Not implemented\n\t\tHZ_CORE_ASSERT(false);\n\t\treturn false;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/SceneSerializer.h",
    "content": "#pragma once\n\n#include \"Scene.h\"\n\nnamespace Hazel {\n\n\tclass SceneSerializer\n\t{\n\tpublic:\n\t\tSceneSerializer(const Ref<Scene>& scene);\n\n\t\tvoid Serialize(const std::string& filepath);\n\t\tvoid SerializeRuntime(const std::string& filepath);\n\n\t\tbool Deserialize(const std::string& filepath);\n\t\tbool DeserializeRuntime(const std::string& filepath);\n\tprivate:\n\t\tRef<Scene> m_Scene;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scene/ScriptableEntity.h",
    "content": "#pragma once\n\n#include \"Entity.h\"\n\nnamespace Hazel {\n\n\tclass ScriptableEntity\n\t{\n\tpublic:\n\t\tvirtual ~ScriptableEntity() {}\n\n\t\ttemplate<typename T>\n\t\tT& GetComponent()\n\t\t{\n\t\t\treturn m_Entity.GetComponent<T>();\n\t\t}\n\tprotected:\n\t\tvirtual void OnCreate() {}\n\t\tvirtual void OnDestroy() {}\n\t\tvirtual void OnUpdate(Timestep ts) {}\n\tprivate:\n\t\tEntity m_Entity;\n\t\tfriend class Scene;\n\t};\n\n}\n\n"
  },
  {
    "path": "Hazel/src/Hazel/Scripting/ScriptEngine.cpp",
    "content": "#include \"hzpch.h\"\n#include \"ScriptEngine.h\"\n\n#include \"ScriptGlue.h\"\n\n#include \"mono/jit/jit.h\"\n#include \"mono/metadata/assembly.h\"\n#include \"mono/metadata/object.h\"\n#include \"mono/metadata/tabledefs.h\"\n#include \"mono/metadata/mono-debug.h\"\n#include \"mono/metadata/threads.h\"\n\n#include \"FileWatch.h\"\n\n#include \"Hazel/Core/Application.h\"\n#include \"Hazel/Core/Timer.h\"\n#include \"Hazel/Core/Buffer.h\"\n#include \"Hazel/Core/FileSystem.h\"\n\n#include \"Hazel/Project/Project.h\"\n\nnamespace Hazel {\n\n\tstatic std::unordered_map<std::string, ScriptFieldType> s_ScriptFieldTypeMap =\n\t{\n\t\t{ \"System.Single\", ScriptFieldType::Float },\n\t\t{ \"System.Double\", ScriptFieldType::Double },\n\t\t{ \"System.Boolean\", ScriptFieldType::Bool },\n\t\t{ \"System.Char\", ScriptFieldType::Char },\n\t\t{ \"System.Int16\", ScriptFieldType::Short },\n\t\t{ \"System.Int32\", ScriptFieldType::Int },\n\t\t{ \"System.Int64\", ScriptFieldType::Long },\n\t\t{ \"System.Byte\", ScriptFieldType::Byte },\n\t\t{ \"System.UInt16\", ScriptFieldType::UShort },\n\t\t{ \"System.UInt32\", ScriptFieldType::UInt },\n\t\t{ \"System.UInt64\", ScriptFieldType::ULong },\n\n\t\t{ \"Hazel.Vector2\", ScriptFieldType::Vector2 },\n\t\t{ \"Hazel.Vector3\", ScriptFieldType::Vector3 },\n\t\t{ \"Hazel.Vector4\", ScriptFieldType::Vector4 },\n\n\t\t{ \"Hazel.Entity\", ScriptFieldType::Entity },\n\t};\n\n\tnamespace Utils {\n\n\t\tstatic MonoAssembly* LoadMonoAssembly(const std::filesystem::path& assemblyPath, bool loadPDB = false)\n\t\t{\n\t\t\tScopedBuffer fileData = FileSystem::ReadFileBinary(assemblyPath);\n\n\t\t\t// NOTE: We can't use this image for anything other than loading the assembly because this image doesn't have a reference to the assembly\n\t\t\tMonoImageOpenStatus status;\n\t\t\tMonoImage* image = mono_image_open_from_data_full(fileData.As<char>(), fileData.Size(), 1, &status, 0);\n\n\t\t\tif (status != MONO_IMAGE_OK)\n\t\t\t{\n\t\t\t\tconst char* errorMessage = mono_image_strerror(status);\n\t\t\t\t// Log some error message using the errorMessage data\n\t\t\t\treturn nullptr;\n\t\t\t}\n\n\t\t\tif (loadPDB)\n\t\t\t{\n\t\t\t\tstd::filesystem::path pdbPath = assemblyPath;\n\t\t\t\tpdbPath.replace_extension(\".pdb\");\n\n\t\t\t\tif (std::filesystem::exists(pdbPath))\n\t\t\t\t{\n\t\t\t\t\tScopedBuffer pdbFileData = FileSystem::ReadFileBinary(pdbPath);\n\t\t\t\t\tmono_debug_open_image_from_memory(image, pdbFileData.As<const mono_byte>(), pdbFileData.Size());\n\t\t\t\t\tHZ_CORE_INFO(\"Loaded PDB {}\", pdbPath);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstd::string pathString = assemblyPath.string();\n\t\t\tMonoAssembly* assembly = mono_assembly_load_from_full(image, pathString.c_str(), &status, 0);\n\t\t\tmono_image_close(image);\n\n\t\t\treturn assembly;\n\t\t}\n\n\t\tvoid PrintAssemblyTypes(MonoAssembly* assembly)\n\t\t{\n\t\t\tMonoImage* image = mono_assembly_get_image(assembly);\n\t\t\tconst MonoTableInfo* typeDefinitionsTable = mono_image_get_table_info(image, MONO_TABLE_TYPEDEF);\n\t\t\tint32_t numTypes = mono_table_info_get_rows(typeDefinitionsTable);\n\n\t\t\tfor (int32_t i = 0; i < numTypes; i++)\n\t\t\t{\n\t\t\t\tuint32_t cols[MONO_TYPEDEF_SIZE];\n\t\t\t\tmono_metadata_decode_row(typeDefinitionsTable, i, cols, MONO_TYPEDEF_SIZE);\n\n\t\t\t\tconst char* nameSpace = mono_metadata_string_heap(image, cols[MONO_TYPEDEF_NAMESPACE]);\n\t\t\t\tconst char* name = mono_metadata_string_heap(image, cols[MONO_TYPEDEF_NAME]);\n\t\t\t\tHZ_CORE_TRACE(\"{}.{}\", nameSpace, name);\n\t\t\t}\n\t\t}\n\n\t\tScriptFieldType MonoTypeToScriptFieldType(MonoType* monoType)\n\t\t{\n\t\t\tstd::string typeName = mono_type_get_name(monoType);\n\n\t\t\tauto it = s_ScriptFieldTypeMap.find(typeName);\n\t\t\tif (it == s_ScriptFieldTypeMap.end())\n\t\t\t{\n\t\t\t\tHZ_CORE_ERROR(\"Unknown type: {}\", typeName);\n\t\t\t\treturn ScriptFieldType::None;\n\t\t\t}\n\n\t\t\treturn it->second;\n\t\t}\n\n\t}\n\n\tstruct ScriptEngineData\n\t{\n\t\tMonoDomain* RootDomain = nullptr;\n\t\tMonoDomain* AppDomain = nullptr;\n\n\t\tMonoAssembly* CoreAssembly = nullptr;\n\t\tMonoImage* CoreAssemblyImage = nullptr;\n\n\t\tMonoAssembly* AppAssembly = nullptr;\n\t\tMonoImage* AppAssemblyImage = nullptr;\n\n\t\tstd::filesystem::path CoreAssemblyFilepath;\n\t\tstd::filesystem::path AppAssemblyFilepath;\n\n\t\tScriptClass EntityClass;\n\n\t\tstd::unordered_map<std::string, Ref<ScriptClass>> EntityClasses;\n\t\tstd::unordered_map<UUID, Ref<ScriptInstance>> EntityInstances;\n\t\tstd::unordered_map<UUID, ScriptFieldMap> EntityScriptFields;\n\n\t\tScope<filewatch::FileWatch<std::string>> AppAssemblyFileWatcher;\n\t\tbool AssemblyReloadPending = false;\n\n#ifdef HZ_DEBUG\n\t\tbool EnableDebugging = true;\n#else\n\t\tbool EnableDebugging = false;\n#endif\n\t\t// Runtime\n\n\t\tScene* SceneContext = nullptr;\n\t};\n\n\tstatic ScriptEngineData* s_Data = nullptr;\n\n\tstatic void OnAppAssemblyFileSystemEvent(const std::string& path, const filewatch::Event change_type)\n\t{\n\t\tif (!s_Data->AssemblyReloadPending && change_type == filewatch::Event::modified)\n\t\t{\n\t\t\ts_Data->AssemblyReloadPending = true;\n\n\t\t\tApplication::Get().SubmitToMainThread([]()\n\t\t\t{\n\t\t\t\ts_Data->AppAssemblyFileWatcher.reset();\n\t\t\t\tScriptEngine::ReloadAssembly();\n\t\t\t});\n\t\t}\n\t}\n\n\tvoid ScriptEngine::Init()\n\t{\n\t\ts_Data = new ScriptEngineData();\n\n\t\tInitMono();\n\t\tScriptGlue::RegisterFunctions();\n\n\t\tbool status = LoadAssembly(\"Resources/Scripts/Hazel-ScriptCore.dll\");\n\t\tif (!status)\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"[ScriptEngine] Could not load Hazel-ScriptCore assembly.\");\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tauto scriptModulePath = Project::GetAssetDirectory() / Project::GetActive()->GetConfig().ScriptModulePath;\n\t\tstatus = LoadAppAssembly(scriptModulePath);\n\t\tif (!status)\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"[ScriptEngine] Could not load app assembly.\");\n\t\t\treturn;\n\t\t}\n\n\t\tLoadAssemblyClasses();\n\n\t\tScriptGlue::RegisterComponents();\n\n\t\t// Retrieve and instantiate class\n\t\ts_Data->EntityClass = ScriptClass(\"Hazel\", \"Entity\", true);\n\t}\n\n\tvoid ScriptEngine::Shutdown()\n\t{\n\t\tShutdownMono();\n\t\tdelete s_Data;\n\t}\n\n\tvoid ScriptEngine::InitMono()\n\t{\n\t\tmono_set_assemblies_path(\"mono/lib\");\n\n\t\tif (s_Data->EnableDebugging)\n\t\t{\n\t\t\tconst char* argv[2] = {\n\t\t\t\t\"--debugger-agent=transport=dt_socket,address=127.0.0.1:2550,server=y,suspend=n,loglevel=3,logfile=MonoDebugger.log\",\n\t\t\t\t\"--soft-breakpoints\"\n\t\t\t};\n\n\t\t\tmono_jit_parse_options(2, (char**)argv);\n\t\t\tmono_debug_init(MONO_DEBUG_FORMAT_MONO);\n\t\t}\n\n\t\tMonoDomain* rootDomain = mono_jit_init(\"HazelJITRuntime\");\n\t\tHZ_CORE_ASSERT(rootDomain);\n\n\t\t// Store the root domain pointer\n\t\ts_Data->RootDomain = rootDomain;\n\n\t\tif (s_Data->EnableDebugging)\n\t\t\tmono_debug_domain_create(s_Data->RootDomain);\n\n\t\tmono_thread_set_main(mono_thread_current());\n\t}\n\n\tvoid ScriptEngine::ShutdownMono()\n\t{\n\t\tmono_domain_set(mono_get_root_domain(), false);\n\n\t\tmono_domain_unload(s_Data->AppDomain);\n\t\ts_Data->AppDomain = nullptr;\n\t\t\n\t\tmono_jit_cleanup(s_Data->RootDomain);\n\t\ts_Data->RootDomain = nullptr;\n\t}\n\n\tbool ScriptEngine::LoadAssembly(const std::filesystem::path& filepath)\n\t{\n\t\t// Create an App Domain\n\t\ts_Data->AppDomain = mono_domain_create_appdomain(\"HazelScriptRuntime\", nullptr);\n\t\tmono_domain_set(s_Data->AppDomain, true);\n\n\t\ts_Data->CoreAssemblyFilepath = filepath;\n\t\ts_Data->CoreAssembly = Utils::LoadMonoAssembly(filepath, s_Data->EnableDebugging);\n\t\tif (s_Data->CoreAssembly == nullptr)\n\t\t\treturn false;\n\n\t\ts_Data->CoreAssemblyImage = mono_assembly_get_image(s_Data->CoreAssembly);\n\t\treturn true;\n\t}\n\n\tbool ScriptEngine::LoadAppAssembly(const std::filesystem::path& filepath)\n\t{\n\t\ts_Data->AppAssemblyFilepath = filepath;\n\t\ts_Data->AppAssembly = Utils::LoadMonoAssembly(filepath, s_Data->EnableDebugging);\n\t\tif (s_Data->AppAssembly == nullptr)\n\t\t\treturn false;\n\n\t\ts_Data->AppAssemblyImage = mono_assembly_get_image(s_Data->AppAssembly);\n\n\t\ts_Data->AppAssemblyFileWatcher = CreateScope<filewatch::FileWatch<std::string>>(filepath.string(), OnAppAssemblyFileSystemEvent);\n\t\ts_Data->AssemblyReloadPending = false;\n\t\treturn true;\n\t}\n\n\tvoid ScriptEngine::ReloadAssembly()\n\t{\n\t\tmono_domain_set(mono_get_root_domain(), false);\n\n\t\tmono_domain_unload(s_Data->AppDomain);\n\n\t\tLoadAssembly(s_Data->CoreAssemblyFilepath);\n\t\tLoadAppAssembly(s_Data->AppAssemblyFilepath);\n\t\tLoadAssemblyClasses();\n\n\t\tScriptGlue::RegisterComponents();\n\n\t\t// Retrieve and instantiate class\n\t\ts_Data->EntityClass = ScriptClass(\"Hazel\", \"Entity\", true);\n\t}\n\n\tvoid ScriptEngine::OnRuntimeStart(Scene* scene)\n\t{\n\t\ts_Data->SceneContext = scene;\n\t}\n\n\tbool ScriptEngine::EntityClassExists(const std::string& fullClassName)\n\t{\n\t\treturn s_Data->EntityClasses.find(fullClassName) != s_Data->EntityClasses.end();\n\t}\n\n\tvoid ScriptEngine::OnCreateEntity(Entity entity)\n\t{\n\t\tconst auto& sc = entity.GetComponent<ScriptComponent>();\n\t\tif (ScriptEngine::EntityClassExists(sc.ClassName))\n\t\t{\n\t\t\tUUID entityID = entity.GetUUID();\n\n\t\t\tRef<ScriptInstance> instance = CreateRef<ScriptInstance>(s_Data->EntityClasses[sc.ClassName], entity);\n\t\t\ts_Data->EntityInstances[entityID] = instance;\n\n\t\t\t// Copy field values\n\t\t\tif (s_Data->EntityScriptFields.find(entityID) != s_Data->EntityScriptFields.end())\n\t\t\t{\n\t\t\t\tconst ScriptFieldMap& fieldMap = s_Data->EntityScriptFields.at(entityID);\n\t\t\t\tfor (const auto& [name, fieldInstance] : fieldMap)\n\t\t\t\t\tinstance->SetFieldValueInternal(name, fieldInstance.m_Buffer);\n\t\t\t}\n\n\t\t\tinstance->InvokeOnCreate();\n\t\t}\n\t}\n\n\tvoid ScriptEngine::OnUpdateEntity(Entity entity, Timestep ts)\n\t{\n\t\tUUID entityUUID = entity.GetUUID();\n\t\tif (s_Data->EntityInstances.find(entityUUID) != s_Data->EntityInstances.end())\n\t\t{\n\t\t\tRef<ScriptInstance> instance = s_Data->EntityInstances[entityUUID];\n\t\t\tinstance->InvokeOnUpdate((float)ts);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"Could not find ScriptInstance for entity {}\",  entityUUID);\n\t\t}\n\t}\n\n\tScene* ScriptEngine::GetSceneContext()\n\t{\n\t\treturn s_Data->SceneContext;\n\t}\n\n\tRef<ScriptInstance> ScriptEngine::GetEntityScriptInstance(UUID entityID)\n\t{\n\t\tauto it = s_Data->EntityInstances.find(entityID);\n\t\tif (it == s_Data->EntityInstances.end())\n\t\t\treturn nullptr;\n\n\t\treturn it->second;\n\t}\n\n\n\tRef<ScriptClass> ScriptEngine::GetEntityClass(const std::string& name)\n\t{\n\t\tif (s_Data->EntityClasses.find(name) == s_Data->EntityClasses.end())\n\t\t\treturn nullptr;\n\n\t\treturn s_Data->EntityClasses.at(name);\n\t}\n\n\tvoid ScriptEngine::OnRuntimeStop()\n\t{\n\t\ts_Data->SceneContext = nullptr;\n\n\t\ts_Data->EntityInstances.clear();\n\t}\n\n\tstd::unordered_map<std::string, Ref<ScriptClass>> ScriptEngine::GetEntityClasses()\n\t{\n\t\treturn s_Data->EntityClasses;\n\t}\n\n\tScriptFieldMap& ScriptEngine::GetScriptFieldMap(Entity entity)\n\t{\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tUUID entityID = entity.GetUUID();\n\t\treturn s_Data->EntityScriptFields[entityID];\n\t}\n\n\tvoid ScriptEngine::LoadAssemblyClasses()\n\t{\n\t\ts_Data->EntityClasses.clear();\n\n\t\tconst MonoTableInfo* typeDefinitionsTable = mono_image_get_table_info(s_Data->AppAssemblyImage, MONO_TABLE_TYPEDEF);\n\t\tint32_t numTypes = mono_table_info_get_rows(typeDefinitionsTable);\n\t\tMonoClass* entityClass = mono_class_from_name(s_Data->CoreAssemblyImage, \"Hazel\", \"Entity\");\n\n\t\tfor (int32_t i = 0; i < numTypes; i++)\n\t\t{\n\t\t\tuint32_t cols[MONO_TYPEDEF_SIZE];\n\t\t\tmono_metadata_decode_row(typeDefinitionsTable, i, cols, MONO_TYPEDEF_SIZE);\n\n\t\t\tconst char* nameSpace = mono_metadata_string_heap(s_Data->AppAssemblyImage, cols[MONO_TYPEDEF_NAMESPACE]);\n\t\t\tconst char* className = mono_metadata_string_heap(s_Data->AppAssemblyImage, cols[MONO_TYPEDEF_NAME]);\n\t\t\tstd::string fullName;\n\t\t\tif (strlen(nameSpace) != 0)\n\t\t\t\tfullName = fmt::format(\"{}.{}\", nameSpace, className);\n\t\t\telse\n\t\t\t\tfullName = className;\n\n\t\t\tMonoClass* monoClass = mono_class_from_name(s_Data->AppAssemblyImage, nameSpace, className);\n\n\t\t\tif (monoClass == entityClass)\n\t\t\t\tcontinue;\n\n\t\t\tbool isEntity = mono_class_is_subclass_of(monoClass, entityClass, false);\n\t\t\tif (!isEntity)\n\t\t\t\tcontinue;\n\n\t\t\tRef<ScriptClass> scriptClass = CreateRef<ScriptClass>(nameSpace, className);\n\t\t\ts_Data->EntityClasses[fullName] = scriptClass;\n\n\n\t\t\t// This routine is an iterator routine for retrieving the fields in a class.\n\t\t\t// You must pass a gpointer that points to zero and is treated as an opaque handle\n\t\t\t// to iterate over all of the elements. When no more values are available, the return value is NULL.\n\n\t\t\tint fieldCount = mono_class_num_fields(monoClass);\n\t\t\tHZ_CORE_WARN(\"{} has {} fields:\", className, fieldCount);\n\t\t\tvoid* iterator = nullptr;\n\t\t\twhile (MonoClassField* field = mono_class_get_fields(monoClass, &iterator))\n\t\t\t{\n\t\t\t\tconst char* fieldName = mono_field_get_name(field);\n\t\t\t\tuint32_t flags = mono_field_get_flags(field);\n\t\t\t\tif (flags & FIELD_ATTRIBUTE_PUBLIC)\n\t\t\t\t{\n\t\t\t\t\tMonoType* type = mono_field_get_type(field);\n\t\t\t\t\tScriptFieldType fieldType = Utils::MonoTypeToScriptFieldType(type);\n\t\t\t\t\tHZ_CORE_WARN(\"  {} ({})\", fieldName, Utils::ScriptFieldTypeToString(fieldType));\n\n\t\t\t\t\tscriptClass->m_Fields[fieldName] = { fieldType, fieldName, field };\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tauto& entityClasses = s_Data->EntityClasses;\n\n\t\t//mono_field_get_value()\n\n\t}\n\n\tMonoImage* ScriptEngine::GetCoreAssemblyImage()\n\t{\n\t\treturn s_Data->CoreAssemblyImage;\n\t}\n\n\n\tMonoObject* ScriptEngine::GetManagedInstance(UUID uuid)\n\t{\n\t\tHZ_CORE_ASSERT(s_Data->EntityInstances.find(uuid) != s_Data->EntityInstances.end());\n\t\treturn s_Data->EntityInstances.at(uuid)->GetManagedObject();\n\t}\n\n\tMonoString* ScriptEngine::CreateString(const char* string)\n\t{\n\t\treturn mono_string_new(s_Data->AppDomain, string);\n\t}\n\n\tMonoObject* ScriptEngine::InstantiateClass(MonoClass* monoClass)\n\t{\n\t\tMonoObject* instance = mono_object_new(s_Data->AppDomain, monoClass);\n\t\tmono_runtime_object_init(instance);\n\t\treturn instance;\n\t}\n\n\tScriptClass::ScriptClass(const std::string& classNamespace, const std::string& className, bool isCore)\n\t\t: m_ClassNamespace(classNamespace), m_ClassName(className)\n\t{\n\t\tm_MonoClass = mono_class_from_name(isCore ? s_Data->CoreAssemblyImage : s_Data->AppAssemblyImage, classNamespace.c_str(), className.c_str());\n\t}\n\n\tMonoObject* ScriptClass::Instantiate()\n\t{\n\t\treturn ScriptEngine::InstantiateClass(m_MonoClass);\n\t}\n\n\tMonoMethod* ScriptClass::GetMethod(const std::string& name, int parameterCount)\n\t{\n\t\treturn mono_class_get_method_from_name(m_MonoClass, name.c_str(), parameterCount);\n\t}\n\n\tMonoObject* ScriptClass::InvokeMethod(MonoObject* instance, MonoMethod* method, void** params)\n\t{\n\t\tMonoObject* exception = nullptr;\n\t\treturn mono_runtime_invoke(method, instance, params, &exception);\n\t}\n\n\tScriptInstance::ScriptInstance(Ref<ScriptClass> scriptClass, Entity entity)\n\t\t: m_ScriptClass(scriptClass)\n\t{\n\t\tm_Instance = scriptClass->Instantiate();\n\n\t\tm_Constructor = s_Data->EntityClass.GetMethod(\".ctor\", 1);\n\t\tm_OnCreateMethod = scriptClass->GetMethod(\"OnCreate\", 0);\n\t\tm_OnUpdateMethod = scriptClass->GetMethod(\"OnUpdate\", 1);\n\n\t\t// Call Entity constructor\n\t\t{\n\t\t\tUUID entityID = entity.GetUUID();\n\t\t\tvoid* param = &entityID;\n\t\t\tm_ScriptClass->InvokeMethod(m_Instance, m_Constructor, &param);\n\t\t}\n\t}\n\n\tvoid ScriptInstance::InvokeOnCreate()\n\t{\n\t\tif (m_OnCreateMethod)\n\t\t\tm_ScriptClass->InvokeMethod(m_Instance, m_OnCreateMethod);\n\t}\n\n\tvoid ScriptInstance::InvokeOnUpdate(float ts)\n\t{\n\t\tif (m_OnUpdateMethod)\n\t\t{\n\t\t\tvoid* param = &ts;\n\t\t\tm_ScriptClass->InvokeMethod(m_Instance, m_OnUpdateMethod, &param);\n\t\t}\n\t}\n\n\tbool ScriptInstance::GetFieldValueInternal(const std::string& name, void* buffer)\n\t{\n\t\tconst auto& fields = m_ScriptClass->GetFields();\n\t\tauto it = fields.find(name);\n\t\tif (it == fields.end())\n\t\t\treturn false;\n\n\t\tconst ScriptField& field = it->second;\n\t\tmono_field_get_value(m_Instance, field.ClassField, buffer);\n\t\treturn true;\n\t}\n\n\tbool ScriptInstance::SetFieldValueInternal(const std::string& name, const void* value)\n\t{\n\t\tconst auto& fields = m_ScriptClass->GetFields();\n\t\tauto it = fields.find(name);\n\t\tif (it == fields.end())\n\t\t\treturn false;\n\n\t\tconst ScriptField& field = it->second;\n\t\tmono_field_set_value(m_Instance, field.ClassField, (void*)value);\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scripting/ScriptEngine.h",
    "content": "#pragma once\n\n#include \"Hazel/Scene/Scene.h\"\n#include \"Hazel/Scene/Entity.h\"\n\n#include <filesystem>\n#include <string>\n#include <map>\n\nextern \"C\" {\n\ttypedef struct _MonoClass MonoClass;\n\ttypedef struct _MonoObject MonoObject;\n\ttypedef struct _MonoMethod MonoMethod;\n\ttypedef struct _MonoAssembly MonoAssembly;\n\ttypedef struct _MonoImage MonoImage;\n\ttypedef struct _MonoClassField MonoClassField;\n\ttypedef struct _MonoString MonoString;\n}\n\nnamespace Hazel {\n\n\tenum class ScriptFieldType\n\t{\n\t\tNone = 0,\n\t\tFloat, Double,\n\t\tBool, Char, Byte, Short, Int, Long,\n\t\tUByte, UShort, UInt, ULong,\n\t\tVector2, Vector3, Vector4,\n\t\tEntity\n\t};\n\n\tstruct ScriptField\n\t{\n\t\tScriptFieldType Type;\n\t\tstd::string Name;\n\t\t\n\t\tMonoClassField* ClassField;\n\t};\n\n\t// ScriptField + data storage\n\tstruct ScriptFieldInstance\n\t{\n\t\tScriptField Field;\n\n\t\tScriptFieldInstance()\n\t\t{\n\t\t\tmemset(m_Buffer, 0, sizeof(m_Buffer));\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tT GetValue()\n\t\t{\n\t\t\tstatic_assert(sizeof(T) <= 16, \"Type too large!\");\n\t\t\treturn *(T*)m_Buffer;\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tvoid SetValue(T value)\n\t\t{\n\t\t\tstatic_assert(sizeof(T) <= 16, \"Type too large!\");\n\t\t\tmemcpy(m_Buffer, &value, sizeof(T));\n\t\t}\n\tprivate:\n\t\tuint8_t m_Buffer[16];\n\n\t\tfriend class ScriptEngine;\n\t\tfriend class ScriptInstance;\n\t};\n\n\tusing ScriptFieldMap = std::unordered_map<std::string, ScriptFieldInstance>;\n\n\tclass ScriptClass\n\t{\n\tpublic:\n\t\tScriptClass() = default;\n\t\tScriptClass(const std::string& classNamespace, const std::string& className, bool isCore = false);\n\n\t\tMonoObject* Instantiate();\n\t\tMonoMethod* GetMethod(const std::string& name, int parameterCount);\n\t\tMonoObject* InvokeMethod(MonoObject* instance, MonoMethod* method, void** params = nullptr);\n\n\t\tconst std::map<std::string, ScriptField>& GetFields() const { return m_Fields; }\n\tprivate:\n\t\tstd::string m_ClassNamespace;\n\t\tstd::string m_ClassName;\n\n\t\tstd::map<std::string, ScriptField> m_Fields;\n\n\t\tMonoClass* m_MonoClass = nullptr;\n\n\t\tfriend class ScriptEngine;\n\t};\n\n\tclass ScriptInstance\n\t{\n\tpublic:\n\t\tScriptInstance(Ref<ScriptClass> scriptClass, Entity entity);\n\n\t\tvoid InvokeOnCreate();\n\t\tvoid InvokeOnUpdate(float ts);\n\n\t\tRef<ScriptClass> GetScriptClass() { return m_ScriptClass; }\n\n\t\ttemplate<typename T>\n\t\tT GetFieldValue(const std::string& name)\n\t\t{\n\t\t\tstatic_assert(sizeof(T) <= 16, \"Type too large!\");\n\n\t\t\tbool success = GetFieldValueInternal(name, s_FieldValueBuffer);\t\n\t\t\tif (!success)\n\t\t\t\treturn T();\n\n\t\t\treturn *(T*)s_FieldValueBuffer;\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tvoid SetFieldValue(const std::string& name, T value)\n\t\t{\n\t\t\tstatic_assert(sizeof(T) <= 16, \"Type too large!\");\n\n\t\t\tSetFieldValueInternal(name, &value);\n\t\t}\n\n\t\tMonoObject* GetManagedObject() { return m_Instance; }\n\tprivate:\n\t\tbool GetFieldValueInternal(const std::string& name, void* buffer);\n\t\tbool SetFieldValueInternal(const std::string& name, const void* value);\n\tprivate:\n\t\tRef<ScriptClass> m_ScriptClass;\n\n\t\tMonoObject* m_Instance = nullptr;\n\t\tMonoMethod* m_Constructor = nullptr;\n\t\tMonoMethod* m_OnCreateMethod = nullptr;\n\t\tMonoMethod* m_OnUpdateMethod = nullptr;\n\n\t\tinline static char s_FieldValueBuffer[16];\n\n\t\tfriend class ScriptEngine;\n\t\tfriend struct ScriptFieldInstance;\n\t};\n\n\tclass ScriptEngine\n\t{\n\tpublic:\n\t\tstatic void Init();\n\t\tstatic void Shutdown();\n\n\t\tstatic bool LoadAssembly(const std::filesystem::path& filepath);\n\t\tstatic bool LoadAppAssembly(const std::filesystem::path& filepath);\n\t\t\n\t\tstatic void ReloadAssembly();\n\n\t\tstatic void OnRuntimeStart(Scene* scene);\n\t\tstatic void OnRuntimeStop();\n\n\t\tstatic bool EntityClassExists(const std::string& fullClassName);\n\t\tstatic void OnCreateEntity(Entity entity);\n\t\tstatic void OnUpdateEntity(Entity entity, Timestep ts);\n\n\t\tstatic Scene* GetSceneContext();\n\t\tstatic Ref<ScriptInstance> GetEntityScriptInstance(UUID entityID);\n\t\t\n\t\tstatic Ref<ScriptClass> GetEntityClass(const std::string& name);\n\t\tstatic std::unordered_map<std::string, Ref<ScriptClass>> GetEntityClasses();\n\t\tstatic ScriptFieldMap& GetScriptFieldMap(Entity entity);\n\t\t\n\t\tstatic MonoImage* GetCoreAssemblyImage();\n\n\t\tstatic MonoObject* GetManagedInstance(UUID uuid);\n\n\t\tstatic MonoString* CreateString(const char* string);\n\tprivate:\n\t\tstatic void InitMono();\n\t\tstatic void ShutdownMono();\n\n\t\tstatic MonoObject* InstantiateClass(MonoClass* monoClass);\n\t\tstatic void LoadAssemblyClasses();\n\n\t\tfriend class ScriptClass;\n\t\tfriend class ScriptGlue;\n\t};\n\n\tnamespace Utils {\n\n\t\tinline const char* ScriptFieldTypeToString(ScriptFieldType fieldType)\n\t\t{\n\t\t\tswitch (fieldType)\n\t\t\t{\n\t\t\t\tcase ScriptFieldType::None:    return \"None\";\n\t\t\t\tcase ScriptFieldType::Float:   return \"Float\";\n\t\t\t\tcase ScriptFieldType::Double:  return \"Double\";\n\t\t\t\tcase ScriptFieldType::Bool:    return \"Bool\";\n\t\t\t\tcase ScriptFieldType::Char:    return \"Char\";\n\t\t\t\tcase ScriptFieldType::Byte:    return \"Byte\";\n\t\t\t\tcase ScriptFieldType::Short:   return \"Short\";\n\t\t\t\tcase ScriptFieldType::Int:     return \"Int\";\n\t\t\t\tcase ScriptFieldType::Long:    return \"Long\";\n\t\t\t\tcase ScriptFieldType::UByte:   return \"UByte\";\n\t\t\t\tcase ScriptFieldType::UShort:  return \"UShort\";\n\t\t\t\tcase ScriptFieldType::UInt:    return \"UInt\";\n\t\t\t\tcase ScriptFieldType::ULong:   return \"ULong\";\n\t\t\t\tcase ScriptFieldType::Vector2: return \"Vector2\";\n\t\t\t\tcase ScriptFieldType::Vector3: return \"Vector3\";\n\t\t\t\tcase ScriptFieldType::Vector4: return \"Vector4\";\n\t\t\t\tcase ScriptFieldType::Entity:  return \"Entity\";\n\t\t\t}\n\t\t\tHZ_CORE_ASSERT(false, \"Unknown ScriptFieldType\");\n\t\t\treturn \"None\";\n\t\t}\n\n\t\tinline ScriptFieldType ScriptFieldTypeFromString(std::string_view fieldType)\n\t\t{\n\t\t\tif (fieldType == \"None\")    return ScriptFieldType::None;\n\t\t\tif (fieldType == \"Float\")   return ScriptFieldType::Float;\n\t\t\tif (fieldType == \"Double\")  return ScriptFieldType::Double;\n\t\t\tif (fieldType == \"Bool\")    return ScriptFieldType::Bool;\n\t\t\tif (fieldType == \"Char\")    return ScriptFieldType::Char;\n\t\t\tif (fieldType == \"Byte\")    return ScriptFieldType::Byte;\n\t\t\tif (fieldType == \"Short\")   return ScriptFieldType::Short;\n\t\t\tif (fieldType == \"Int\")     return ScriptFieldType::Int;\n\t\t\tif (fieldType == \"Long\")    return ScriptFieldType::Long;\n\t\t\tif (fieldType == \"UByte\")   return ScriptFieldType::UByte;\n\t\t\tif (fieldType == \"UShort\")  return ScriptFieldType::UShort;\n\t\t\tif (fieldType == \"UInt\")    return ScriptFieldType::UInt;\n\t\t\tif (fieldType == \"ULong\")   return ScriptFieldType::ULong;\n\t\t\tif (fieldType == \"Vector2\") return ScriptFieldType::Vector2;\n\t\t\tif (fieldType == \"Vector3\") return ScriptFieldType::Vector3;\n\t\t\tif (fieldType == \"Vector4\") return ScriptFieldType::Vector4;\n\t\t\tif (fieldType == \"Entity\")  return ScriptFieldType::Entity;\n\n\t\t\tHZ_CORE_ASSERT(false, \"Unknown ScriptFieldType\");\n\t\t\treturn ScriptFieldType::None;\n\t\t}\n\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scripting/ScriptGlue.cpp",
    "content": "#include \"hzpch.h\"\n#include \"ScriptGlue.h\"\n#include \"ScriptEngine.h\"\n\n#include \"Hazel/Core/UUID.h\"\n#include \"Hazel/Core/KeyCodes.h\"\n#include \"Hazel/Core/Input.h\"\n\n#include \"Hazel/Scene/Scene.h\"\n#include \"Hazel/Scene/Entity.h\"\n\n#include \"Hazel/Physics/Physics2D.h\"\n\n#include \"mono/metadata/object.h\"\n#include \"mono/metadata/reflection.h\"\n\n#include \"box2d/b2_body.h\"\n\nnamespace Hazel {\n\n\tnamespace Utils {\n\n\t\tstd::string MonoStringToString(MonoString* string)\n\t\t{\n\t\t\tchar* cStr = mono_string_to_utf8(string);\n\t\t\tstd::string str(cStr);\n\t\t\tmono_free(cStr);\n\t\t\treturn str;\n\t\t}\n\n\t}\n\n\tstatic std::unordered_map<MonoType*, std::function<bool(Entity)>> s_EntityHasComponentFuncs;\n\n#define HZ_ADD_INTERNAL_CALL(Name) mono_add_internal_call(\"Hazel.InternalCalls::\" #Name, Name)\n\n\tstatic void NativeLog(MonoString* string, int parameter)\n\t{\n\t\tstd::string str = Utils::MonoStringToString(string);\n\t\tstd::cout << str << \", \" << parameter << std::endl;\n\t}\n\n\tstatic void NativeLog_Vector(glm::vec3* parameter, glm::vec3* outResult)\n\t{\n\t\tHZ_CORE_WARN(\"Value: {0}\", *parameter);\n\t\t*outResult = glm::normalize(*parameter);\n\t}\n\n\tstatic float NativeLog_VectorDot(glm::vec3* parameter)\n\t{\n\t\tHZ_CORE_WARN(\"Value: {0}\", *parameter);\n\t\treturn glm::dot(*parameter, *parameter);\n\t}\n\n\tstatic MonoObject* GetScriptInstance(UUID entityID)\n\t{\n\t\treturn ScriptEngine::GetManagedInstance(entityID);\n\t}\n\n\tstatic bool Entity_HasComponent(UUID entityID, MonoReflectionType* componentType)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tMonoType* managedType = mono_reflection_type_get_type(componentType);\n\t\tHZ_CORE_ASSERT(s_EntityHasComponentFuncs.find(managedType) != s_EntityHasComponentFuncs.end());\n\t\treturn s_EntityHasComponentFuncs.at(managedType)(entity);\n\t}\n\n\tstatic uint64_t Entity_FindEntityByName(MonoString* name)\n\t{\n\t\tchar* nameCStr = mono_string_to_utf8(name);\n\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->FindEntityByName(nameCStr);\n\t\tmono_free(nameCStr);\n\n\t\tif (!entity)\n\t\t\treturn 0;\n\t\t\n\t\treturn entity.GetUUID();\n\t}\n\n\tstatic void TransformComponent_GetTranslation(UUID entityID, glm::vec3* outTranslation)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\t*outTranslation = entity.GetComponent<TransformComponent>().Translation;\n\t}\n\n\tstatic void TransformComponent_SetTranslation(UUID entityID, glm::vec3* translation)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tentity.GetComponent<TransformComponent>().Translation = *translation;\n\t}\n\n\tstatic void Rigidbody2DComponent_ApplyLinearImpulse(UUID entityID, glm::vec2* impulse, glm::vec2* point, bool wake)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\t\tbody->ApplyLinearImpulse(b2Vec2(impulse->x, impulse->y), b2Vec2(point->x, point->y), wake);\n\t}\n\n\tstatic void Rigidbody2DComponent_ApplyLinearImpulseToCenter(UUID entityID, glm::vec2* impulse, bool wake)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\t\tbody->ApplyLinearImpulseToCenter(b2Vec2(impulse->x, impulse->y), wake);\n\t}\n\t\n\tstatic void Rigidbody2DComponent_GetLinearVelocity(UUID entityID, glm::vec2* outLinearVelocity)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\t\tconst b2Vec2& linearVelocity = body->GetLinearVelocity();\n\t\t*outLinearVelocity = glm::vec2(linearVelocity.x, linearVelocity.y);\n\t}\n\n\tstatic Rigidbody2DComponent::BodyType Rigidbody2DComponent_GetType(UUID entityID)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\t\treturn Utils::Rigidbody2DTypeFromBox2DBody(body->GetType());\n\t}\n\t\n\tstatic void Rigidbody2DComponent_SetType(UUID entityID, Rigidbody2DComponent::BodyType bodyType)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\n\t\tauto& rb2d = entity.GetComponent<Rigidbody2DComponent>();\n\t\tb2Body* body = (b2Body*)rb2d.RuntimeBody;\n\t\tbody->SetType(Utils::Rigidbody2DTypeToBox2DBody(bodyType));\n\t}\n\n\tstatic MonoString* TextComponent_GetText(UUID entityID)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\treturn ScriptEngine::CreateString(tc.TextString.c_str());\n\t}\n\n\tstatic void TextComponent_SetText(UUID entityID, MonoString* textString)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\ttc.TextString = Utils::MonoStringToString(textString);\n\t}\n\n\tstatic void TextComponent_GetColor(UUID entityID, glm::vec4* color)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\t*color = tc.Color;\n\t}\n\n\tstatic void TextComponent_SetColor(UUID entityID, glm::vec4* color)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\ttc.Color = *color;\n\t}\n\n\tstatic float TextComponent_GetKerning(UUID entityID)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\treturn tc.Kerning;\n\t}\n\n\tstatic void TextComponent_SetKerning(UUID entityID, float kerning)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\ttc.Kerning = kerning;\n\t}\n\n\tstatic float TextComponent_GetLineSpacing(UUID entityID)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\treturn tc.LineSpacing;\n\t}\n\n\tstatic void TextComponent_SetLineSpacing(UUID entityID, float lineSpacing)\n\t{\n\t\tScene* scene = ScriptEngine::GetSceneContext();\n\t\tHZ_CORE_ASSERT(scene);\n\t\tEntity entity = scene->GetEntityByUUID(entityID);\n\t\tHZ_CORE_ASSERT(entity);\n\t\tHZ_CORE_ASSERT(entity.HasComponent<TextComponent>());\n\n\t\tauto& tc = entity.GetComponent<TextComponent>();\n\t\ttc.LineSpacing = lineSpacing;\n\t}\n\n\tstatic bool Input_IsKeyDown(KeyCode keycode)\n\t{\n\t\treturn Input::IsKeyPressed(keycode);\n\t}\n\n\ttemplate<typename... Component>\n\tstatic void RegisterComponent()\n\t{\n\t\t([]()\n\t\t{\n\t\t\tstd::string_view typeName = typeid(Component).name();\n\t\t\tsize_t pos = typeName.find_last_of(':');\n\t\t\tstd::string_view structName = typeName.substr(pos + 1);\n\t\t\tstd::string managedTypename = fmt::format(\"Hazel.{}\", structName);\n\n\t\t\tMonoType* managedType = mono_reflection_type_from_name(managedTypename.data(), ScriptEngine::GetCoreAssemblyImage());\n\t\t\tif (!managedType)\n\t\t\t{\n\t\t\t\tHZ_CORE_ERROR(\"Could not find component type {}\", managedTypename);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ts_EntityHasComponentFuncs[managedType] = [](Entity entity) { return entity.HasComponent<Component>(); };\n\t\t}(), ...);\n\t}\n\n\ttemplate<typename... Component>\n\tstatic void RegisterComponent(ComponentGroup<Component...>)\n\t{\n\t\tRegisterComponent<Component...>();\n\t}\n\n\tvoid ScriptGlue::RegisterComponents()\n\t{\n\t\ts_EntityHasComponentFuncs.clear();\n\t\tRegisterComponent(AllComponents{});\n\t}\n\n\tvoid ScriptGlue::RegisterFunctions()\n\t{\n\t\tHZ_ADD_INTERNAL_CALL(NativeLog);\n\t\tHZ_ADD_INTERNAL_CALL(NativeLog_Vector);\n\t\tHZ_ADD_INTERNAL_CALL(NativeLog_VectorDot);\n\n\t\tHZ_ADD_INTERNAL_CALL(GetScriptInstance);\n\n\t\tHZ_ADD_INTERNAL_CALL(Entity_HasComponent);\n\t\tHZ_ADD_INTERNAL_CALL(Entity_FindEntityByName);\n\n\t\tHZ_ADD_INTERNAL_CALL(TransformComponent_GetTranslation);\n\t\tHZ_ADD_INTERNAL_CALL(TransformComponent_SetTranslation);\n\t\t\n\t\tHZ_ADD_INTERNAL_CALL(Rigidbody2DComponent_ApplyLinearImpulse);\n\t\tHZ_ADD_INTERNAL_CALL(Rigidbody2DComponent_ApplyLinearImpulseToCenter);\n\t\tHZ_ADD_INTERNAL_CALL(Rigidbody2DComponent_GetLinearVelocity);\n\t\tHZ_ADD_INTERNAL_CALL(Rigidbody2DComponent_GetType);\n\t\tHZ_ADD_INTERNAL_CALL(Rigidbody2DComponent_SetType);\n\t\t\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_GetText);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_SetText);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_GetColor);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_SetColor);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_GetKerning);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_SetKerning);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_GetLineSpacing);\n\t\tHZ_ADD_INTERNAL_CALL(TextComponent_SetLineSpacing);\n\n\t\tHZ_ADD_INTERNAL_CALL(Input_IsKeyDown);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Scripting/ScriptGlue.h",
    "content": "#pragma once\n\nnamespace Hazel {\n\n\tclass ScriptGlue\n\t{\n\tpublic:\n\t\tstatic void RegisterComponents();\n\t\tstatic void RegisterFunctions();\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/UI/UI.h",
    "content": "#pragma once\n\n#include <imgui/imgui.h>\n\nnamespace Hazel::UI {\n\n\tstruct ScopedStyleColor\n\t{\n\t\tScopedStyleColor() = default;\n\n\t\tScopedStyleColor(ImGuiCol idx, ImVec4 color, bool predicate = true)\n\t\t\t: m_Set(predicate)\n\t\t{\n\t\t\tif (predicate)\n\t\t\t\tImGui::PushStyleColor(idx, color);\n\t\t}\n\n\t\tScopedStyleColor(ImGuiCol idx, ImU32 color, bool predicate = true)\n\t\t\t: m_Set(predicate)\n\t\t{\n\t\t\tif (predicate)\n\t\t\t\tImGui::PushStyleColor(idx, color);\n\t\t}\n\n\t\t~ScopedStyleColor()\n\t\t{\n\t\t\tif (m_Set)\n\t\t\t\tImGui::PopStyleColor();\n\t\t}\n\tprivate:\n\t\tbool m_Set = false;\n\t};\n\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel/Utils/PlatformUtils.h",
    "content": "#pragma once\n\n#include <string>\n\nnamespace Hazel {\n\n\tclass FileDialogs\n\t{\n\tpublic:\n\t\t// These return empty strings if cancelled\n\t\tstatic std::string OpenFile(const char* filter);\n\t\tstatic std::string SaveFile(const char* filter);\n\t};\n\n\tclass Time\n\t{\n\tpublic:\n\t\tstatic float GetTime();\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Hazel.h",
    "content": "#pragma once\n\n// For use by Hazel applications\n\n#include \"Hazel/Core/Base.h\"\n\n#include \"Hazel/Core/Application.h\"\n#include \"Hazel/Core/Layer.h\"\n#include \"Hazel/Core/Log.h\"\n#include \"Hazel/Core/Assert.h\"\n\n#include \"Hazel/Core/Timestep.h\"\n\n#include \"Hazel/Core/Input.h\"\n#include \"Hazel/Core/KeyCodes.h\"\n#include \"Hazel/Core/MouseCodes.h\"\n#include \"Hazel/Renderer/OrthographicCameraController.h\"\n\n#include \"Hazel/ImGui/ImGuiLayer.h\"\n\n#include \"Hazel/Scene/Scene.h\"\n#include \"Hazel/Scene/Entity.h\"\n#include \"Hazel/Scene/ScriptableEntity.h\"\n#include \"Hazel/Scene/Components.h\"\n\n#include \"Hazel/Project/Project.h\"\n\n// ---Renderer------------------------\n#include \"Hazel/Renderer/Renderer.h\"\n#include \"Hazel/Renderer/Renderer2D.h\"\n#include \"Hazel/Renderer/RenderCommand.h\"\n\n#include \"Hazel/Renderer/Buffer.h\"\n#include \"Hazel/Renderer/Shader.h\"\n#include \"Hazel/Renderer/Framebuffer.h\"\n#include \"Hazel/Renderer/Texture.h\"\n#include \"Hazel/Renderer/VertexArray.h\"\n\n#include \"Hazel/Renderer/OrthographicCamera.h\"\n// -----------------------------------\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLBuffer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLBuffer.h\"\n\n#include <glad/glad.h>\n\nnamespace Hazel {\n\n\t/////////////////////////////////////////////////////////////////////////////\n\t// VertexBuffer /////////////////////////////////////////////////////////////\n\t/////////////////////////////////////////////////////////////////////////////\n\n\tOpenGLVertexBuffer::OpenGLVertexBuffer(uint32_t size)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglCreateBuffers(1, &m_RendererID);\n\t\tglBindBuffer(GL_ARRAY_BUFFER, m_RendererID);\n\t\tglBufferData(GL_ARRAY_BUFFER, size, nullptr, GL_DYNAMIC_DRAW);\n\t}\n\n\tOpenGLVertexBuffer::OpenGLVertexBuffer(float* vertices, uint32_t size)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglCreateBuffers(1, &m_RendererID);\n\t\tglBindBuffer(GL_ARRAY_BUFFER, m_RendererID);\n\t\tglBufferData(GL_ARRAY_BUFFER, size, vertices, GL_STATIC_DRAW);\n\t}\n\n\tOpenGLVertexBuffer::~OpenGLVertexBuffer()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglDeleteBuffers(1, &m_RendererID);\n\t}\n\n\tvoid OpenGLVertexBuffer::Bind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindBuffer(GL_ARRAY_BUFFER, m_RendererID);\n\t}\n\n\tvoid OpenGLVertexBuffer::Unbind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindBuffer(GL_ARRAY_BUFFER, 0);\n\t}\n\n\tvoid OpenGLVertexBuffer::SetData(const void* data, uint32_t size)\n\t{\n\t\tglBindBuffer(GL_ARRAY_BUFFER, m_RendererID);\n\t\tglBufferSubData(GL_ARRAY_BUFFER, 0, size, data);\n\t}\n\n\t/////////////////////////////////////////////////////////////////////////////\n\t// IndexBuffer //////////////////////////////////////////////////////////////\n\t/////////////////////////////////////////////////////////////////////////////\n\n\tOpenGLIndexBuffer::OpenGLIndexBuffer(uint32_t* indices, uint32_t count)\n\t\t: m_Count(count)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglCreateBuffers(1, &m_RendererID);\n\t\t\n\t\t// GL_ELEMENT_ARRAY_BUFFER is not valid without an actively bound VAO\n\t\t// Binding with GL_ARRAY_BUFFER allows the data to be loaded regardless of VAO state. \n\t\tglBindBuffer(GL_ARRAY_BUFFER, m_RendererID);\n\t\tglBufferData(GL_ARRAY_BUFFER, count * sizeof(uint32_t), indices, GL_STATIC_DRAW);\n\t}\n\n\tOpenGLIndexBuffer::~OpenGLIndexBuffer()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglDeleteBuffers(1, &m_RendererID);\n\t}\n\n\tvoid OpenGLIndexBuffer::Bind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_RendererID);\n\t}\n\n\tvoid OpenGLIndexBuffer::Unbind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLBuffer.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Buffer.h\"\n\nnamespace Hazel {\n\n\tclass OpenGLVertexBuffer : public VertexBuffer\n\t{\n\tpublic:\n\t\tOpenGLVertexBuffer(uint32_t size);\n\t\tOpenGLVertexBuffer(float* vertices, uint32_t size);\n\t\tvirtual ~OpenGLVertexBuffer();\n\n\t\tvirtual void Bind() const override;\n\t\tvirtual void Unbind() const override;\n\t\t\n\t\tvirtual void SetData(const void* data, uint32_t size) override;\n\n\t\tvirtual const BufferLayout& GetLayout() const override { return m_Layout; }\n\t\tvirtual void SetLayout(const BufferLayout& layout) override { m_Layout = layout; }\n\tprivate:\n\t\tuint32_t m_RendererID;\n\t\tBufferLayout m_Layout;\n\t};\n\n\tclass OpenGLIndexBuffer : public IndexBuffer\n\t{\n\tpublic:\n\t\tOpenGLIndexBuffer(uint32_t* indices, uint32_t count);\n\t\tvirtual ~OpenGLIndexBuffer();\n\n\t\tvirtual void Bind() const;\n\t\tvirtual void Unbind() const;\n\n\t\tvirtual uint32_t GetCount() const { return m_Count; }\n\tprivate:\n\t\tuint32_t m_RendererID;\n\t\tuint32_t m_Count;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLContext.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLContext.h\"\n\n#include <GLFW/glfw3.h>\n#include <glad/glad.h>\n\nnamespace Hazel {\n\n\tOpenGLContext::OpenGLContext(GLFWwindow* windowHandle)\n\t\t: m_WindowHandle(windowHandle)\n\t{\n\t\tHZ_CORE_ASSERT(windowHandle, \"Window handle is null!\")\n\t}\n\n\tvoid OpenGLContext::Init()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglfwMakeContextCurrent(m_WindowHandle);\n\t\tint status = gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);\n\t\tHZ_CORE_ASSERT(status, \"Failed to initialize Glad!\");\n\n\t\tHZ_CORE_INFO(\"OpenGL Info:\");\n\t\tHZ_CORE_INFO(\"  Vendor: {0}\", glGetString(GL_VENDOR));\n\t\tHZ_CORE_INFO(\"  Renderer: {0}\", glGetString(GL_RENDERER));\n\t\tHZ_CORE_INFO(\"  Version: {0}\", glGetString(GL_VERSION));\n\n\t\tHZ_CORE_ASSERT(GLVersion.major > 4 || (GLVersion.major == 4 && GLVersion.minor >= 5), \"Hazel requires at least OpenGL version 4.5!\");\n\t}\n\n\tvoid OpenGLContext::SwapBuffers()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglfwSwapBuffers(m_WindowHandle);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLContext.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/GraphicsContext.h\"\n\nstruct GLFWwindow;\n\nnamespace Hazel {\n\n\tclass OpenGLContext : public GraphicsContext\n\t{\n\tpublic:\n\t\tOpenGLContext(GLFWwindow* windowHandle);\n\n\t\tvirtual void Init() override;\n\t\tvirtual void SwapBuffers() override;\n\tprivate:\n\t\tGLFWwindow* m_WindowHandle;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLFramebuffer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLFramebuffer.h\"\n\n#include <glad/glad.h>\n\nnamespace Hazel {\n\n\tstatic const uint32_t s_MaxFramebufferSize = 8192;\n\n\tnamespace Utils {\n\n\t\tstatic GLenum TextureTarget(bool multisampled)\n\t\t{\n\t\t\treturn multisampled ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;\n\t\t}\n\n\t\tstatic void CreateTextures(bool multisampled, uint32_t* outID, uint32_t count)\n\t\t{\n\t\t\tglCreateTextures(TextureTarget(multisampled), count, outID);\n\t\t}\n\n\t\tstatic void BindTexture(bool multisampled, uint32_t id)\n\t\t{\n\t\t\tglBindTexture(TextureTarget(multisampled), id);\n\t\t}\n\n\t\tstatic void AttachColorTexture(uint32_t id, int samples, GLenum internalFormat, GLenum format, uint32_t width, uint32_t height, int index)\n\t\t{\n\t\t\tbool multisampled = samples > 1;\n\t\t\tif (multisampled)\n\t\t\t{\n\t\t\t\tglTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, internalFormat, width, height, GL_FALSE);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tglTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0, format, GL_UNSIGNED_BYTE, nullptr);\n\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n\t\t\t}\n\n\t\t\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, TextureTarget(multisampled), id, 0);\n\t\t}\n\n\t\tstatic void AttachDepthTexture(uint32_t id, int samples, GLenum format, GLenum attachmentType, uint32_t width, uint32_t height)\n\t\t{\n\t\t\tbool multisampled = samples > 1;\n\t\t\tif (multisampled)\n\t\t\t{\n\t\t\t\tglTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, format, width, height, GL_FALSE);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tglTexStorage2D(GL_TEXTURE_2D, 1, format, width, height);\n\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n\t\t\t}\n\n\t\t\tglFramebufferTexture2D(GL_FRAMEBUFFER, attachmentType, TextureTarget(multisampled), id, 0);\n\t\t}\n\n\t\tstatic bool IsDepthFormat(FramebufferTextureFormat format)\n\t\t{\n\t\t\tswitch (format)\n\t\t\t{\n\t\t\t\tcase FramebufferTextureFormat::DEPTH24STENCIL8:  return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tstatic GLenum HazelFBTextureFormatToGL(FramebufferTextureFormat format)\n\t\t{\n\t\t\tswitch (format)\n\t\t\t{\n\t\t\t\tcase FramebufferTextureFormat::RGBA8:       return GL_RGBA8;\n\t\t\t\tcase FramebufferTextureFormat::RED_INTEGER: return GL_RED_INTEGER;\n\t\t\t}\n\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\n\tOpenGLFramebuffer::OpenGLFramebuffer(const FramebufferSpecification& spec)\n\t\t: m_Specification(spec)\n\t{\n\t\tfor (auto spec : m_Specification.Attachments.Attachments)\n\t\t{\n\t\t\tif (!Utils::IsDepthFormat(spec.TextureFormat))\n\t\t\t\tm_ColorAttachmentSpecifications.emplace_back(spec);\n\t\t\telse\n\t\t\t\tm_DepthAttachmentSpecification = spec;\n\t\t}\n\n\t\tInvalidate();\n\t}\n\n\tOpenGLFramebuffer::~OpenGLFramebuffer()\n\t{\n\t\tglDeleteFramebuffers(1, &m_RendererID);\n\t\tglDeleteTextures(m_ColorAttachments.size(), m_ColorAttachments.data());\n\t\tglDeleteTextures(1, &m_DepthAttachment);\n\t}\n\n\tvoid OpenGLFramebuffer::Invalidate()\n\t{\n\t\tif (m_RendererID)\n\t\t{\n\t\t\tglDeleteFramebuffers(1, &m_RendererID);\n\t\t\tglDeleteTextures(m_ColorAttachments.size(), m_ColorAttachments.data());\n\t\t\tglDeleteTextures(1, &m_DepthAttachment);\n\t\t\t\n\t\t\tm_ColorAttachments.clear();\n\t\t\tm_DepthAttachment = 0;\n\t\t}\n\n\t\tglCreateFramebuffers(1, &m_RendererID);\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_RendererID);\n\n\t\tbool multisample = m_Specification.Samples > 1;\n\n\t\t// Attachments\n\t\tif (m_ColorAttachmentSpecifications.size())\n\t\t{\n\t\t\tm_ColorAttachments.resize(m_ColorAttachmentSpecifications.size());\n\t\t\tUtils::CreateTextures(multisample, m_ColorAttachments.data(), m_ColorAttachments.size());\n\n\t\t\tfor (size_t i = 0; i < m_ColorAttachments.size(); i++)\n\t\t\t{\n\t\t\t\tUtils::BindTexture(multisample, m_ColorAttachments[i]);\n\t\t\t\tswitch (m_ColorAttachmentSpecifications[i].TextureFormat)\n\t\t\t\t{\n\t\t\t\t\tcase FramebufferTextureFormat::RGBA8:\n\t\t\t\t\t\tUtils::AttachColorTexture(m_ColorAttachments[i], m_Specification.Samples, GL_RGBA8, GL_RGBA, m_Specification.Width, m_Specification.Height, i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase FramebufferTextureFormat::RED_INTEGER:\n\t\t\t\t\t\tUtils::AttachColorTexture(m_ColorAttachments[i], m_Specification.Samples, GL_R32I, GL_RED_INTEGER, m_Specification.Width, m_Specification.Height, i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (m_DepthAttachmentSpecification.TextureFormat != FramebufferTextureFormat::None)\n\t\t{\n\t\t\tUtils::CreateTextures(multisample, &m_DepthAttachment, 1);\n\t\t\tUtils::BindTexture(multisample, m_DepthAttachment);\n\t\t\tswitch (m_DepthAttachmentSpecification.TextureFormat)\n\t\t\t{\n\t\t\t\tcase FramebufferTextureFormat::DEPTH24STENCIL8:\n\t\t\t\t\tUtils::AttachDepthTexture(m_DepthAttachment, m_Specification.Samples, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL_ATTACHMENT, m_Specification.Width, m_Specification.Height);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (m_ColorAttachments.size() > 1)\n\t\t{\n\t\t\tHZ_CORE_ASSERT(m_ColorAttachments.size() <= 4);\n\t\t\tGLenum buffers[4] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };\n\t\t\tglDrawBuffers(m_ColorAttachments.size(), buffers);\n\t\t}\n\t\telse if (m_ColorAttachments.empty())\n\t\t{\n\t\t\t// Only depth-pass\n\t\t\tglDrawBuffer(GL_NONE);\n\t\t}\n\n\t\tHZ_CORE_ASSERT(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE, \"Framebuffer is incomplete!\");\n\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\t}\n\n\tvoid OpenGLFramebuffer::Bind()\n\t{\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_RendererID);\n\t\tglViewport(0, 0, m_Specification.Width, m_Specification.Height);\n\t}\n\n\tvoid OpenGLFramebuffer::Unbind()\n\t{\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\t}\n\n\tvoid OpenGLFramebuffer::Resize(uint32_t width, uint32_t height)\n\t{\n\t\tif (width == 0 || height == 0 || width > s_MaxFramebufferSize || height > s_MaxFramebufferSize)\n\t\t{\n\t\t\tHZ_CORE_WARN(\"Attempted to rezize framebuffer to {0}, {1}\", width, height);\n\t\t\treturn;\n\t\t}\n\t\tm_Specification.Width = width;\n\t\tm_Specification.Height = height;\n\t\t\n\t\tInvalidate();\n\t}\n\n\tint OpenGLFramebuffer::ReadPixel(uint32_t attachmentIndex, int x, int y)\n\t{\n\t\tHZ_CORE_ASSERT(attachmentIndex < m_ColorAttachments.size());\n\n\t\tglReadBuffer(GL_COLOR_ATTACHMENT0 + attachmentIndex);\n\t\tint pixelData;\n\t\tglReadPixels(x, y, 1, 1, GL_RED_INTEGER, GL_INT, &pixelData);\n\t\treturn pixelData;\n\n\t}\n\n\tvoid OpenGLFramebuffer::ClearAttachment(uint32_t attachmentIndex, int value)\n\t{\n\t\tHZ_CORE_ASSERT(attachmentIndex < m_ColorAttachments.size());\n\n\t\tauto& spec = m_ColorAttachmentSpecifications[attachmentIndex];\n\t\tglClearTexImage(m_ColorAttachments[attachmentIndex], 0,\n\t\t\tUtils::HazelFBTextureFormatToGL(spec.TextureFormat), GL_INT, &value);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLFramebuffer.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Framebuffer.h\"\n\nnamespace Hazel {\n\n\tclass OpenGLFramebuffer : public Framebuffer\n\t{\n\tpublic:\n\t\tOpenGLFramebuffer(const FramebufferSpecification& spec);\n\t\tvirtual ~OpenGLFramebuffer();\n\n\t\tvoid Invalidate();\n\n\t\tvirtual void Bind() override;\n\t\tvirtual void Unbind() override;\n\n\t\tvirtual void Resize(uint32_t width, uint32_t height) override;\n\t\tvirtual int ReadPixel(uint32_t attachmentIndex, int x, int y) override;\n\n\t\tvirtual void ClearAttachment(uint32_t attachmentIndex, int value) override;\n\n\t\tvirtual uint32_t GetColorAttachmentRendererID(uint32_t index = 0) const override { HZ_CORE_ASSERT(index < m_ColorAttachments.size()); return m_ColorAttachments[index]; }\n\n\t\tvirtual const FramebufferSpecification& GetSpecification() const override { return m_Specification; }\n\tprivate:\n\t\tuint32_t m_RendererID = 0;\n\t\tFramebufferSpecification m_Specification;\n\n\t\tstd::vector<FramebufferTextureSpecification> m_ColorAttachmentSpecifications;\n\t\tFramebufferTextureSpecification m_DepthAttachmentSpecification = FramebufferTextureFormat::None;\n\n\t\tstd::vector<uint32_t> m_ColorAttachments;\n\t\tuint32_t m_DepthAttachment = 0;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLRendererAPI.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLRendererAPI.h\"\n\n#include <glad/glad.h>\n\nnamespace Hazel {\n\t\n\tvoid OpenGLMessageCallback(\n\t\tunsigned source,\n\t\tunsigned type,\n\t\tunsigned id,\n\t\tunsigned severity,\n\t\tint length,\n\t\tconst char* message,\n\t\tconst void* userParam)\n\t{\n\t\tswitch (severity)\n\t\t{\n\t\t\tcase GL_DEBUG_SEVERITY_HIGH:         HZ_CORE_CRITICAL(message); return;\n\t\t\tcase GL_DEBUG_SEVERITY_MEDIUM:       HZ_CORE_ERROR(message); return;\n\t\t\tcase GL_DEBUG_SEVERITY_LOW:          HZ_CORE_WARN(message); return;\n\t\t\tcase GL_DEBUG_SEVERITY_NOTIFICATION: HZ_CORE_TRACE(message); return;\n\t\t}\n\t\t\n\t\tHZ_CORE_ASSERT(false, \"Unknown severity level!\");\n\t}\n\n\tvoid OpenGLRendererAPI::Init()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t#ifdef HZ_DEBUG\n\t\tglEnable(GL_DEBUG_OUTPUT);\n\t\tglEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);\n\t\tglDebugMessageCallback(OpenGLMessageCallback, nullptr);\n\t\t\n\t\tglDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION, 0, NULL, GL_FALSE);\n\t#endif\n\n\t\tglEnable(GL_BLEND);\n\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\n\t\tglEnable(GL_DEPTH_TEST);\n\t\tglEnable(GL_LINE_SMOOTH);\n\t}\n\n\tvoid OpenGLRendererAPI::SetViewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height)\n\t{\n\t\tglViewport(x, y, width, height);\n\t}\n\n\tvoid OpenGLRendererAPI::SetClearColor(const glm::vec4& color)\n\t{\n\t\tglClearColor(color.r, color.g, color.b, color.a);\n\t}\n\n\tvoid OpenGLRendererAPI::Clear()\n\t{\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\t}\n\n\tvoid OpenGLRendererAPI::DrawIndexed(const Ref<VertexArray>& vertexArray, uint32_t indexCount)\n\t{\n\t\tvertexArray->Bind();\n\t\tuint32_t count = indexCount ? indexCount : vertexArray->GetIndexBuffer()->GetCount();\n\t\tglDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, nullptr);\n\t}\n\n\tvoid OpenGLRendererAPI::DrawLines(const Ref<VertexArray>& vertexArray, uint32_t vertexCount)\n\t{\n\t\tvertexArray->Bind();\n\t\tglDrawArrays(GL_LINES, 0, vertexCount);\n\t}\n\n\tvoid OpenGLRendererAPI::SetLineWidth(float width)\n\t{\n\t\tglLineWidth(width);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLRendererAPI.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/RendererAPI.h\"\n\nnamespace Hazel {\n\n\tclass OpenGLRendererAPI : public RendererAPI\n\t{\n\tpublic:\n\t\tvirtual void Init() override;\n\t\tvirtual void SetViewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) override;\n\n\t\tvirtual void SetClearColor(const glm::vec4& color) override;\n\t\tvirtual void Clear() override;\n\n\t\tvirtual void DrawIndexed(const Ref<VertexArray>& vertexArray, uint32_t indexCount = 0) override;\n\t\tvirtual void DrawLines(const Ref<VertexArray>& vertexArray, uint32_t vertexCount) override;\n\t\t\n\t\tvirtual void SetLineWidth(float width) override;\n\t};\n\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLShader.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLShader.h\"\n#include \"Hazel/Core/Timer.h\"\n\n#include <fstream>\n#include <glad/glad.h>\n\n#include <glm/gtc/type_ptr.hpp>\n\n#include <shaderc/shaderc.hpp>\n#include <spirv_cross/spirv_cross.hpp>\n#include <spirv_cross/spirv_glsl.hpp>\n\nnamespace Hazel {\n\n\tnamespace Utils {\n\n\t\tstatic GLenum ShaderTypeFromString(const std::string& type)\n\t\t{\n\t\t\tif (type == \"vertex\")\n\t\t\t\treturn GL_VERTEX_SHADER;\n\t\t\tif (type == \"fragment\" || type == \"pixel\")\n\t\t\t\treturn GL_FRAGMENT_SHADER;\n\n\t\t\tHZ_CORE_ASSERT(false, \"Unknown shader type!\");\n\t\t\treturn 0;\n\t\t}\n\n\t\tstatic shaderc_shader_kind GLShaderStageToShaderC(GLenum stage)\n\t\t{\n\t\t\tswitch (stage)\n\t\t\t{\n\t\t\t\tcase GL_VERTEX_SHADER:   return shaderc_glsl_vertex_shader;\n\t\t\t\tcase GL_FRAGMENT_SHADER: return shaderc_glsl_fragment_shader;\n\t\t\t}\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn (shaderc_shader_kind)0;\n\t\t}\n\n\t\tstatic const char* GLShaderStageToString(GLenum stage)\n\t\t{\n\t\t\tswitch (stage)\n\t\t\t{\n\t\t\t\tcase GL_VERTEX_SHADER:   return \"GL_VERTEX_SHADER\";\n\t\t\t\tcase GL_FRAGMENT_SHADER: return \"GL_FRAGMENT_SHADER\";\n\t\t\t}\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tstatic const char* GetCacheDirectory()\n\t\t{\n\t\t\t// TODO: make sure the assets directory is valid\n\t\t\treturn \"assets/cache/shader/opengl\";\n\t\t}\n\n\t\tstatic void CreateCacheDirectoryIfNeeded()\n\t\t{\n\t\t\tstd::string cacheDirectory = GetCacheDirectory();\n\t\t\tif (!std::filesystem::exists(cacheDirectory))\n\t\t\t\tstd::filesystem::create_directories(cacheDirectory);\n\t\t}\n\n\t\tstatic const char* GLShaderStageCachedOpenGLFileExtension(uint32_t stage)\n\t\t{\n\t\t\tswitch (stage)\n\t\t\t{\n\t\t\t\tcase GL_VERTEX_SHADER:    return \".cached_opengl.vert\";\n\t\t\t\tcase GL_FRAGMENT_SHADER:  return \".cached_opengl.frag\";\n\t\t\t}\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn \"\";\n\t\t}\n\n\t\tstatic const char* GLShaderStageCachedVulkanFileExtension(uint32_t stage)\n\t\t{\n\t\t\tswitch (stage)\n\t\t\t{\n\t\t\tcase GL_VERTEX_SHADER:    return \".cached_vulkan.vert\";\n\t\t\tcase GL_FRAGMENT_SHADER:  return \".cached_vulkan.frag\";\n\t\t\t}\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn \"\";\n\t\t}\n\n\n\t}\n\n\tOpenGLShader::OpenGLShader(const std::string& filepath)\n\t\t: m_FilePath(filepath)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUtils::CreateCacheDirectoryIfNeeded();\n\n\t\tstd::string source = ReadFile(filepath);\n\t\tauto shaderSources = PreProcess(source);\n\n\t\t{\n\t\t\tTimer timer;\n\t\t\tCompileOrGetVulkanBinaries(shaderSources);\n\t\t\tCompileOrGetOpenGLBinaries();\n\t\t\tCreateProgram();\n\t\t\tHZ_CORE_WARN(\"Shader creation took {0} ms\", timer.ElapsedMillis());\n\t\t}\n\n\t\t// Extract name from filepath\n\t\tauto lastSlash = filepath.find_last_of(\"/\\\\\");\n\t\tlastSlash = lastSlash == std::string::npos ? 0 : lastSlash + 1;\n\t\tauto lastDot = filepath.rfind('.');\n\t\tauto count = lastDot == std::string::npos ? filepath.size() - lastSlash : lastDot - lastSlash;\n\t\tm_Name = filepath.substr(lastSlash, count);\n\t}\n\n\tOpenGLShader::OpenGLShader(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc)\n\t\t: m_Name(name)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tstd::unordered_map<GLenum, std::string> sources;\n\t\tsources[GL_VERTEX_SHADER] = vertexSrc;\n\t\tsources[GL_FRAGMENT_SHADER] = fragmentSrc;\n\n\t\tCompileOrGetVulkanBinaries(sources);\n\t\tCompileOrGetOpenGLBinaries();\n\t\tCreateProgram();\n\t}\n\n\tOpenGLShader::~OpenGLShader()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglDeleteProgram(m_RendererID);\n\t}\n\n\tstd::string OpenGLShader::ReadFile(const std::string& filepath)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tstd::string result;\n\t\tstd::ifstream in(filepath, std::ios::in | std::ios::binary); // ifstream closes itself due to RAII\n\t\tif (in)\n\t\t{\n\t\t\tin.seekg(0, std::ios::end);\n\t\t\tsize_t size = in.tellg();\n\t\t\tif (size != -1)\n\t\t\t{\n\t\t\t\tresult.resize(size);\n\t\t\t\tin.seekg(0, std::ios::beg);\n\t\t\t\tin.read(&result[0], size);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tHZ_CORE_ERROR(\"Could not read from file '{0}'\", filepath);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tHZ_CORE_ERROR(\"Could not open file '{0}'\", filepath);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tstd::unordered_map<GLenum, std::string> OpenGLShader::PreProcess(const std::string& source)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tstd::unordered_map<GLenum, std::string> shaderSources;\n\n\t\tconst char* typeToken = \"#type\";\n\t\tsize_t typeTokenLength = strlen(typeToken);\n\t\tsize_t pos = source.find(typeToken, 0); //Start of shader type declaration line\n\t\twhile (pos != std::string::npos)\n\t\t{\n\t\t\tsize_t eol = source.find_first_of(\"\\r\\n\", pos); //End of shader type declaration line\n\t\t\tHZ_CORE_ASSERT(eol != std::string::npos, \"Syntax error\");\n\t\t\tsize_t begin = pos + typeTokenLength + 1; //Start of shader type name (after \"#type \" keyword)\n\t\t\tstd::string type = source.substr(begin, eol - begin);\n\t\t\tHZ_CORE_ASSERT(Utils::ShaderTypeFromString(type), \"Invalid shader type specified\");\n\n\t\t\tsize_t nextLinePos = source.find_first_not_of(\"\\r\\n\", eol); //Start of shader code after shader type declaration line\n\t\t\tHZ_CORE_ASSERT(nextLinePos != std::string::npos, \"Syntax error\");\n\t\t\tpos = source.find(typeToken, nextLinePos); //Start of next shader type declaration line\n\n\t\t\tshaderSources[Utils::ShaderTypeFromString(type)] = (pos == std::string::npos) ? source.substr(nextLinePos) : source.substr(nextLinePos, pos - nextLinePos);\n\t\t}\n\n\t\treturn shaderSources;\n\t}\n\n\tvoid OpenGLShader::CompileOrGetVulkanBinaries(const std::unordered_map<GLenum, std::string>& shaderSources)\n\t{\n\t\tGLuint program = glCreateProgram();\n\n\t\tshaderc::Compiler compiler;\n\t\tshaderc::CompileOptions options;\n\t\toptions.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_2);\n\t\tconst bool optimize = true;\n\t\tif (optimize)\n\t\t\toptions.SetOptimizationLevel(shaderc_optimization_level_performance);\n\n\t\tstd::filesystem::path cacheDirectory = Utils::GetCacheDirectory();\n\n\t\tauto& shaderData = m_VulkanSPIRV;\n\t\tshaderData.clear();\n\t\tfor (auto&& [stage, source] : shaderSources)\n\t\t{\n\t\t\tstd::filesystem::path shaderFilePath = m_FilePath;\n\t\t\tstd::filesystem::path cachedPath = cacheDirectory / (shaderFilePath.filename().string() + Utils::GLShaderStageCachedVulkanFileExtension(stage));\n\n\t\t\tstd::ifstream in(cachedPath, std::ios::in | std::ios::binary);\n\t\t\tif (in.is_open())\n\t\t\t{\n\t\t\t\tin.seekg(0, std::ios::end);\n\t\t\t\tauto size = in.tellg();\n\t\t\t\tin.seekg(0, std::ios::beg);\n\n\t\t\t\tauto& data = shaderData[stage];\n\t\t\t\tdata.resize(size / sizeof(uint32_t));\n\t\t\t\tin.read((char*)data.data(), size);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tshaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(source, Utils::GLShaderStageToShaderC(stage), m_FilePath.c_str(), options);\n\t\t\t\tif (module.GetCompilationStatus() != shaderc_compilation_status_success)\n\t\t\t\t{\n\t\t\t\t\tHZ_CORE_ERROR(module.GetErrorMessage());\n\t\t\t\t\tHZ_CORE_ASSERT(false);\n\t\t\t\t}\n\n\t\t\t\tshaderData[stage] = std::vector<uint32_t>(module.cbegin(), module.cend());\n\n\t\t\t\tstd::ofstream out(cachedPath, std::ios::out | std::ios::binary);\n\t\t\t\tif (out.is_open())\n\t\t\t\t{\n\t\t\t\t\tauto& data = shaderData[stage];\n\t\t\t\t\tout.write((char*)data.data(), data.size() * sizeof(uint32_t));\n\t\t\t\t\tout.flush();\n\t\t\t\t\tout.close();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (auto&& [stage, data]: shaderData)\n\t\t\tReflect(stage, data);\n\t}\n\n\tvoid OpenGLShader::CompileOrGetOpenGLBinaries()\n\t{\n\t\tauto& shaderData = m_OpenGLSPIRV;\n\n\t\tshaderc::Compiler compiler;\n\t\tshaderc::CompileOptions options;\n\t\toptions.SetTargetEnvironment(shaderc_target_env_opengl, shaderc_env_version_opengl_4_5);\n\t\tconst bool optimize = false;\n\t\tif (optimize)\n\t\t\toptions.SetOptimizationLevel(shaderc_optimization_level_performance);\n\n\t\tstd::filesystem::path cacheDirectory = Utils::GetCacheDirectory();\n\n\t\tshaderData.clear();\n\t\tm_OpenGLSourceCode.clear();\n\t\tfor (auto&& [stage, spirv] : m_VulkanSPIRV)\n\t\t{\n\t\t\tstd::filesystem::path shaderFilePath = m_FilePath;\n\t\t\tstd::filesystem::path cachedPath = cacheDirectory / (shaderFilePath.filename().string() + Utils::GLShaderStageCachedOpenGLFileExtension(stage));\n\n\t\t\tstd::ifstream in(cachedPath, std::ios::in | std::ios::binary);\n\t\t\tif (in.is_open())\n\t\t\t{\n\t\t\t\tin.seekg(0, std::ios::end);\n\t\t\t\tauto size = in.tellg();\n\t\t\t\tin.seekg(0, std::ios::beg);\n\n\t\t\t\tauto& data = shaderData[stage];\n\t\t\t\tdata.resize(size / sizeof(uint32_t));\n\t\t\t\tin.read((char*)data.data(), size);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tspirv_cross::CompilerGLSL glslCompiler(spirv);\n\t\t\t\tm_OpenGLSourceCode[stage] = glslCompiler.compile();\n\t\t\t\tauto& source = m_OpenGLSourceCode[stage];\n\n\t\t\t\tshaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(source, Utils::GLShaderStageToShaderC(stage), m_FilePath.c_str());\n\t\t\t\tif (module.GetCompilationStatus() != shaderc_compilation_status_success)\n\t\t\t\t{\n\t\t\t\t\tHZ_CORE_ERROR(module.GetErrorMessage());\n\t\t\t\t\tHZ_CORE_ASSERT(false);\n\t\t\t\t}\n\n\t\t\t\tshaderData[stage] = std::vector<uint32_t>(module.cbegin(), module.cend());\n\n\t\t\t\tstd::ofstream out(cachedPath, std::ios::out | std::ios::binary);\n\t\t\t\tif (out.is_open())\n\t\t\t\t{\n\t\t\t\t\tauto& data = shaderData[stage];\n\t\t\t\t\tout.write((char*)data.data(), data.size() * sizeof(uint32_t));\n\t\t\t\t\tout.flush();\n\t\t\t\t\tout.close();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid OpenGLShader::CreateProgram()\n\t{\n\t\tGLuint program = glCreateProgram();\n\n\t\tstd::vector<GLuint> shaderIDs;\n\t\tfor (auto&& [stage, spirv] : m_OpenGLSPIRV)\n\t\t{\n\t\t\tGLuint shaderID = shaderIDs.emplace_back(glCreateShader(stage));\n\t\t\tglShaderBinary(1, &shaderID, GL_SHADER_BINARY_FORMAT_SPIR_V, spirv.data(), spirv.size() * sizeof(uint32_t));\n\t\t\tglSpecializeShader(shaderID, \"main\", 0, nullptr, nullptr);\n\t\t\tglAttachShader(program, shaderID);\n\t\t}\n\n\t\tglLinkProgram(program);\n\n\t\tGLint isLinked;\n\t\tglGetProgramiv(program, GL_LINK_STATUS, &isLinked);\n\t\tif (isLinked == GL_FALSE)\n\t\t{\n\t\t\tGLint maxLength;\n\t\t\tglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);\n\n\t\t\tstd::vector<GLchar> infoLog(maxLength);\n\t\t\tglGetProgramInfoLog(program, maxLength, &maxLength, infoLog.data());\n\t\t\tHZ_CORE_ERROR(\"Shader linking failed ({0}):\\n{1}\", m_FilePath, infoLog.data());\n\n\t\t\tglDeleteProgram(program);\n\n\t\t\tfor (auto id : shaderIDs)\n\t\t\t\tglDeleteShader(id);\n\t\t}\n\n\t\tfor (auto id : shaderIDs)\n\t\t{\n\t\t\tglDetachShader(program, id);\n\t\t\tglDeleteShader(id);\n\t\t}\n\n\t\tm_RendererID = program;\n\t}\n\n\tvoid OpenGLShader::Reflect(GLenum stage, const std::vector<uint32_t>& shaderData)\n\t{\n\t\tspirv_cross::Compiler compiler(shaderData);\n\t\tspirv_cross::ShaderResources resources = compiler.get_shader_resources();\n\n\t\tHZ_CORE_TRACE(\"OpenGLShader::Reflect - {0} {1}\", Utils::GLShaderStageToString(stage), m_FilePath);\n\t\tHZ_CORE_TRACE(\"    {0} uniform buffers\", resources.uniform_buffers.size());\n\t\tHZ_CORE_TRACE(\"    {0} resources\", resources.sampled_images.size());\n\n\t\tHZ_CORE_TRACE(\"Uniform buffers:\");\n\t\tfor (const auto& resource : resources.uniform_buffers)\n\t\t{\n\t\t\tconst auto& bufferType = compiler.get_type(resource.base_type_id);\n\t\t\tuint32_t bufferSize = compiler.get_declared_struct_size(bufferType);\n\t\t\tuint32_t binding = compiler.get_decoration(resource.id, spv::DecorationBinding);\n\t\t\tint memberCount = bufferType.member_types.size();\n\n\t\t\tHZ_CORE_TRACE(\"  {0}\", resource.name);\n\t\t\tHZ_CORE_TRACE(\"    Size = {0}\", bufferSize);\n\t\t\tHZ_CORE_TRACE(\"    Binding = {0}\", binding);\n\t\t\tHZ_CORE_TRACE(\"    Members = {0}\", memberCount);\n\t\t}\n\t}\n\n\tvoid OpenGLShader::Bind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglUseProgram(m_RendererID);\n\t}\n\n\tvoid OpenGLShader::Unbind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglUseProgram(0);\n\t}\n\n\tvoid OpenGLShader::SetInt(const std::string& name, int value)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUploadUniformInt(name, value);\n\t}\n\n\tvoid OpenGLShader::SetIntArray(const std::string& name, int* values, uint32_t count)\n\t{\n\t\tUploadUniformIntArray(name, values, count);\n\t}\n\n\tvoid OpenGLShader::SetFloat(const std::string& name, float value)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUploadUniformFloat(name, value);\n\t}\n\n\tvoid OpenGLShader::SetFloat2(const std::string& name, const glm::vec2& value)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUploadUniformFloat2(name, value);\n\t}\n\n\tvoid OpenGLShader::SetFloat3(const std::string& name, const glm::vec3& value)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUploadUniformFloat3(name, value);\n\t}\n\n\tvoid OpenGLShader::SetFloat4(const std::string& name, const glm::vec4& value)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUploadUniformFloat4(name, value);\n\t}\n\n\tvoid OpenGLShader::SetMat4(const std::string& name, const glm::mat4& value)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tUploadUniformMat4(name, value);\n\t}\n\n\tvoid OpenGLShader::UploadUniformInt(const std::string& name, int value)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniform1i(location, value);\n\t}\n\n\tvoid OpenGLShader::UploadUniformIntArray(const std::string& name, int* values, uint32_t count)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniform1iv(location, count, values);\n\t}\n\n\tvoid OpenGLShader::UploadUniformFloat(const std::string& name, float value)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniform1f(location, value);\n\t}\n\n\tvoid OpenGLShader::UploadUniformFloat2(const std::string& name, const glm::vec2& value)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniform2f(location, value.x, value.y);\n\t}\n\n\tvoid OpenGLShader::UploadUniformFloat3(const std::string& name, const glm::vec3& value)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniform3f(location, value.x, value.y, value.z);\n\t}\n\n\tvoid OpenGLShader::UploadUniformFloat4(const std::string& name, const glm::vec4& value)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniform4f(location, value.x, value.y, value.z, value.w);\n\t}\n\n\tvoid OpenGLShader::UploadUniformMat3(const std::string& name, const glm::mat3& matrix)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniformMatrix3fv(location, 1, GL_FALSE, glm::value_ptr(matrix));\n\t}\n\n\tvoid OpenGLShader::UploadUniformMat4(const std::string& name, const glm::mat4& matrix)\n\t{\n\t\tGLint location = glGetUniformLocation(m_RendererID, name.c_str());\n\t\tglUniformMatrix4fv(location, 1, GL_FALSE, glm::value_ptr(matrix));\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLShader.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Shader.h\"\n#include <glm/glm.hpp>\n\n// TODO: REMOVE!\ntypedef unsigned int GLenum;\n\nnamespace Hazel {\n\n\tclass OpenGLShader : public Shader\n\t{\n\tpublic:\n\t\tOpenGLShader(const std::string& filepath);\n\t\tOpenGLShader(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc);\n\t\tvirtual ~OpenGLShader();\n\n\t\tvirtual void Bind() const override;\n\t\tvirtual void Unbind() const override;\n\n\t\tvirtual void SetInt(const std::string& name, int value) override;\n\t\tvirtual void SetIntArray(const std::string& name, int* values, uint32_t count) override;\n\t\tvirtual void SetFloat(const std::string& name, float value) override;\n\t\tvirtual void SetFloat2(const std::string& name, const glm::vec2& value) override;\n\t\tvirtual void SetFloat3(const std::string& name, const glm::vec3& value) override;\n\t\tvirtual void SetFloat4(const std::string& name, const glm::vec4& value) override;\n\t\tvirtual void SetMat4(const std::string& name, const glm::mat4& value) override;\n\n\t\tvirtual const std::string& GetName() const override { return m_Name; }\n\n\t\tvoid UploadUniformInt(const std::string& name, int value);\n\t\tvoid UploadUniformIntArray(const std::string& name, int* values, uint32_t count);\n\n\t\tvoid UploadUniformFloat(const std::string& name, float value);\n\t\tvoid UploadUniformFloat2(const std::string& name, const glm::vec2& value);\n\t\tvoid UploadUniformFloat3(const std::string& name, const glm::vec3& value);\n\t\tvoid UploadUniformFloat4(const std::string& name, const glm::vec4& value);\n\n\t\tvoid UploadUniformMat3(const std::string& name, const glm::mat3& matrix);\n\t\tvoid UploadUniformMat4(const std::string& name, const glm::mat4& matrix);\n\tprivate:\n\t\tstd::string ReadFile(const std::string& filepath);\n\t\tstd::unordered_map<GLenum, std::string> PreProcess(const std::string& source);\n\n\t\tvoid CompileOrGetVulkanBinaries(const std::unordered_map<GLenum, std::string>& shaderSources);\n\t\tvoid CompileOrGetOpenGLBinaries();\n\t\tvoid CreateProgram();\n\t\tvoid Reflect(GLenum stage, const std::vector<uint32_t>& shaderData);\n\tprivate:\n\t\tuint32_t m_RendererID;\n\t\tstd::string m_FilePath;\n\t\tstd::string m_Name;\n\n\t\tstd::unordered_map<GLenum, std::vector<uint32_t>> m_VulkanSPIRV;\n\t\tstd::unordered_map<GLenum, std::vector<uint32_t>> m_OpenGLSPIRV;\n\n\t\tstd::unordered_map<GLenum, std::string> m_OpenGLSourceCode;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLTexture.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLTexture.h\"\n\n#include <stb_image.h>\n\nnamespace Hazel {\n\n\tnamespace Utils {\n\n\t\tstatic GLenum HazelImageFormatToGLDataFormat(ImageFormat format)\n\t\t{\n\t\t\tswitch (format)\n\t\t\t{\n\t\t\t\tcase ImageFormat::RGB8:  return GL_RGB;\n\t\t\t\tcase ImageFormat::RGBA8: return GL_RGBA;\n\t\t\t}\n\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn 0;\n\t\t}\n\t\t\n\t\tstatic GLenum HazelImageFormatToGLInternalFormat(ImageFormat format)\n\t\t{\n\t\t\tswitch (format)\n\t\t\t{\n\t\t\tcase ImageFormat::RGB8:  return GL_RGB8;\n\t\t\tcase ImageFormat::RGBA8: return GL_RGBA8;\n\t\t\t}\n\n\t\t\tHZ_CORE_ASSERT(false);\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\n\tOpenGLTexture2D::OpenGLTexture2D(const TextureSpecification& specification)\n\t\t: m_Specification(specification), m_Width(m_Specification.Width), m_Height(m_Specification.Height)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_InternalFormat = Utils::HazelImageFormatToGLInternalFormat(m_Specification.Format);\n\t\tm_DataFormat = Utils::HazelImageFormatToGLDataFormat(m_Specification.Format);\n\n\t\tglCreateTextures(GL_TEXTURE_2D, 1, &m_RendererID);\n\t\tglTextureStorage2D(m_RendererID, 1, m_InternalFormat, m_Width, m_Height);\n\n\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\n\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\n\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_WRAP_S, GL_REPEAT);\n\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_WRAP_T, GL_REPEAT);\n\t}\n\n\tOpenGLTexture2D::OpenGLTexture2D(const std::string& path)\n\t\t: m_Path(path)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tint width, height, channels;\n\t\tstbi_set_flip_vertically_on_load(1);\n\t\tstbi_uc* data = nullptr;\n\t\t{\n\t\t\tHZ_PROFILE_SCOPE(\"stbi_load - OpenGLTexture2D::OpenGLTexture2D(const std::string&)\");\n\t\t\tdata = stbi_load(path.c_str(), &width, &height, &channels, 0);\n\t\t}\n\t\t\t\n\t\tif (data)\n\t\t{\n\t\t\tm_IsLoaded = true;\n\n\t\t\tm_Width = width;\n\t\t\tm_Height = height;\n\n\t\t\tGLenum internalFormat = 0, dataFormat = 0;\n\t\t\tif (channels == 4)\n\t\t\t{\n\t\t\t\tinternalFormat = GL_RGBA8;\n\t\t\t\tdataFormat = GL_RGBA;\n\t\t\t}\n\t\t\telse if (channels == 3)\n\t\t\t{\n\t\t\t\tinternalFormat = GL_RGB8;\n\t\t\t\tdataFormat = GL_RGB;\n\t\t\t}\n\n\t\t\tm_InternalFormat = internalFormat;\n\t\t\tm_DataFormat = dataFormat;\n\n\t\t\tHZ_CORE_ASSERT(internalFormat & dataFormat, \"Format not supported!\");\n\n\t\t\tglCreateTextures(GL_TEXTURE_2D, 1, &m_RendererID);\n\t\t\tglTextureStorage2D(m_RendererID, 1, internalFormat, m_Width, m_Height);\n\n\t\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\n\t\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\n\t\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_WRAP_S, GL_REPEAT);\n\t\t\tglTextureParameteri(m_RendererID, GL_TEXTURE_WRAP_T, GL_REPEAT);\n\n\t\t\tglTextureSubImage2D(m_RendererID, 0, 0, 0, m_Width, m_Height, dataFormat, GL_UNSIGNED_BYTE, data);\n\n\t\t\tstbi_image_free(data);\n\t\t}\n\t}\n\n\tOpenGLTexture2D::~OpenGLTexture2D()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglDeleteTextures(1, &m_RendererID);\n\t}\n\n\tvoid OpenGLTexture2D::SetData(void* data, uint32_t size)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tuint32_t bpp = m_DataFormat == GL_RGBA ? 4 : 3;\n\t\tHZ_CORE_ASSERT(size == m_Width * m_Height * bpp, \"Data must be entire texture!\");\n\t\tglTextureSubImage2D(m_RendererID, 0, 0, 0, m_Width, m_Height, m_DataFormat, GL_UNSIGNED_BYTE, data);\n\t}\n\n\tvoid OpenGLTexture2D::Bind(uint32_t slot) const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindTextureUnit(slot, m_RendererID);\n\t}\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLTexture.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Texture.h\"\n\n#include <glad/glad.h>\n\nnamespace Hazel {\n\n\tclass OpenGLTexture2D : public Texture2D\n\t{\n\tpublic:\n\t\tOpenGLTexture2D(const TextureSpecification& specification);\n\t\tOpenGLTexture2D(const std::string& path);\n\t\tvirtual ~OpenGLTexture2D();\n\n\t\tvirtual const TextureSpecification& GetSpecification() const override { return m_Specification; }\n\n\t\tvirtual uint32_t GetWidth() const override { return m_Width;  }\n\t\tvirtual uint32_t GetHeight() const override { return m_Height; }\n\t\tvirtual uint32_t GetRendererID() const override { return m_RendererID; }\n\n\t\tvirtual const std::string& GetPath() const override { return m_Path; }\n\t\t\n\t\tvirtual void SetData(void* data, uint32_t size) override;\n\n\t\tvirtual void Bind(uint32_t slot = 0) const override;\n\n\t\tvirtual bool IsLoaded() const override { return m_IsLoaded; }\n\n\t\tvirtual bool operator==(const Texture& other) const override\n\t\t{\n\t\t\treturn m_RendererID == other.GetRendererID();\n\t\t}\n\tprivate:\n\t\tTextureSpecification m_Specification;\n\n\t\tstd::string m_Path;\n\t\tbool m_IsLoaded = false;\n\t\tuint32_t m_Width, m_Height;\n\t\tuint32_t m_RendererID;\n\t\tGLenum m_InternalFormat, m_DataFormat;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLUniformBuffer.cpp",
    "content": "#include \"hzpch.h\"\n#include \"OpenGLUniformBuffer.h\"\n\n#include <glad/glad.h>\n\nnamespace Hazel {\n\n\tOpenGLUniformBuffer::OpenGLUniformBuffer(uint32_t size, uint32_t binding)\n\t{\n\t\tglCreateBuffers(1, &m_RendererID);\n\t\tglNamedBufferData(m_RendererID, size, nullptr, GL_DYNAMIC_DRAW); // TODO: investigate usage hint\n\t\tglBindBufferBase(GL_UNIFORM_BUFFER, binding, m_RendererID);\n\t}\n\n\tOpenGLUniformBuffer::~OpenGLUniformBuffer()\n\t{\n\t\tglDeleteBuffers(1, &m_RendererID);\n\t}\n\n\n\tvoid OpenGLUniformBuffer::SetData(const void* data, uint32_t size, uint32_t offset)\n\t{\n\t\tglNamedBufferSubData(m_RendererID, offset, size, data);\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLUniformBuffer.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/UniformBuffer.h\"\n\nnamespace Hazel {\n\n\tclass OpenGLUniformBuffer : public UniformBuffer\n\t{\n\tpublic:\n\t\tOpenGLUniformBuffer(uint32_t size, uint32_t binding);\n\t\tvirtual ~OpenGLUniformBuffer();\n\n\t\tvirtual void SetData(const void* data, uint32_t size, uint32_t offset = 0) override;\n\tprivate:\n\t\tuint32_t m_RendererID = 0;\n\t};\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLVertexArray.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/OpenGL/OpenGLVertexArray.h\"\n\n#include <glad/glad.h>\n\nnamespace Hazel {\n\n\tstatic GLenum ShaderDataTypeToOpenGLBaseType(ShaderDataType type)\n\t{\n\t\tswitch (type)\n\t\t{\n\t\t\tcase ShaderDataType::Float:    return GL_FLOAT;\n\t\t\tcase ShaderDataType::Float2:   return GL_FLOAT;\n\t\t\tcase ShaderDataType::Float3:   return GL_FLOAT;\n\t\t\tcase ShaderDataType::Float4:   return GL_FLOAT;\n\t\t\tcase ShaderDataType::Mat3:     return GL_FLOAT;\n\t\t\tcase ShaderDataType::Mat4:     return GL_FLOAT;\n\t\t\tcase ShaderDataType::Int:      return GL_INT;\n\t\t\tcase ShaderDataType::Int2:     return GL_INT;\n\t\t\tcase ShaderDataType::Int3:     return GL_INT;\n\t\t\tcase ShaderDataType::Int4:     return GL_INT;\n\t\t\tcase ShaderDataType::Bool:     return GL_BOOL;\n\t\t}\n\n\t\tHZ_CORE_ASSERT(false, \"Unknown ShaderDataType!\");\n\t\treturn 0;\n\t}\n\n\tOpenGLVertexArray::OpenGLVertexArray()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglCreateVertexArrays(1, &m_RendererID);\n\t}\n\n\tOpenGLVertexArray::~OpenGLVertexArray()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglDeleteVertexArrays(1, &m_RendererID);\n\t}\n\n\tvoid OpenGLVertexArray::Bind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindVertexArray(m_RendererID);\n\t}\n\n\tvoid OpenGLVertexArray::Unbind() const\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid OpenGLVertexArray::AddVertexBuffer(const Ref<VertexBuffer>& vertexBuffer)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tHZ_CORE_ASSERT(vertexBuffer->GetLayout().GetElements().size(), \"Vertex Buffer has no layout!\");\n\n\t\tglBindVertexArray(m_RendererID);\n\t\tvertexBuffer->Bind();\n\n\t\tconst auto& layout = vertexBuffer->GetLayout();\n\t\tfor (const auto& element : layout)\n\t\t{\n\t\t\tswitch (element.Type)\n\t\t\t{\n\t\t\t\tcase ShaderDataType::Float:\n\t\t\t\tcase ShaderDataType::Float2:\n\t\t\t\tcase ShaderDataType::Float3:\n\t\t\t\tcase ShaderDataType::Float4:\n\t\t\t\t{\n\t\t\t\t\tglEnableVertexAttribArray(m_VertexBufferIndex);\n\t\t\t\t\tglVertexAttribPointer(m_VertexBufferIndex,\n\t\t\t\t\t\telement.GetComponentCount(),\n\t\t\t\t\t\tShaderDataTypeToOpenGLBaseType(element.Type),\n\t\t\t\t\t\telement.Normalized ? GL_TRUE : GL_FALSE,\n\t\t\t\t\t\tlayout.GetStride(),\n\t\t\t\t\t\t(const void*)element.Offset);\n\t\t\t\t\tm_VertexBufferIndex++;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase ShaderDataType::Int:\n\t\t\t\tcase ShaderDataType::Int2:\n\t\t\t\tcase ShaderDataType::Int3:\n\t\t\t\tcase ShaderDataType::Int4:\n\t\t\t\tcase ShaderDataType::Bool:\n\t\t\t\t{\n\t\t\t\t\tglEnableVertexAttribArray(m_VertexBufferIndex);\n\t\t\t\t\tglVertexAttribIPointer(m_VertexBufferIndex,\n\t\t\t\t\t\telement.GetComponentCount(),\n\t\t\t\t\t\tShaderDataTypeToOpenGLBaseType(element.Type),\n\t\t\t\t\t\tlayout.GetStride(),\n\t\t\t\t\t\t(const void*)element.Offset);\n\t\t\t\t\tm_VertexBufferIndex++;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase ShaderDataType::Mat3:\n\t\t\t\tcase ShaderDataType::Mat4:\n\t\t\t\t{\n\t\t\t\t\tuint8_t count = element.GetComponentCount();\n\t\t\t\t\tfor (uint8_t i = 0; i < count; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tglEnableVertexAttribArray(m_VertexBufferIndex);\n\t\t\t\t\t\tglVertexAttribPointer(m_VertexBufferIndex,\n\t\t\t\t\t\t\tcount,\n\t\t\t\t\t\t\tShaderDataTypeToOpenGLBaseType(element.Type),\n\t\t\t\t\t\t\telement.Normalized ? GL_TRUE : GL_FALSE,\n\t\t\t\t\t\t\tlayout.GetStride(),\n\t\t\t\t\t\t\t(const void*)(element.Offset + sizeof(float) * count * i));\n\t\t\t\t\t\tglVertexAttribDivisor(m_VertexBufferIndex, 1);\n\t\t\t\t\t\tm_VertexBufferIndex++;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tHZ_CORE_ASSERT(false, \"Unknown ShaderDataType!\");\n\t\t\t}\n\t\t}\n\n\t\tm_VertexBuffers.push_back(vertexBuffer);\n\t}\n\n\tvoid OpenGLVertexArray::SetIndexBuffer(const Ref<IndexBuffer>& indexBuffer)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglBindVertexArray(m_RendererID);\n\t\tindexBuffer->Bind();\n\n\t\tm_IndexBuffer = indexBuffer;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/OpenGL/OpenGLVertexArray.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/VertexArray.h\"\n\nnamespace Hazel {\n\n\tclass OpenGLVertexArray : public VertexArray\n\t{\n\tpublic:\n\t\tOpenGLVertexArray();\n\t\tvirtual ~OpenGLVertexArray();\n\n\t\tvirtual void Bind() const override;\n\t\tvirtual void Unbind() const override;\n\n\t\tvirtual void AddVertexBuffer(const Ref<VertexBuffer>& vertexBuffer) override;\n\t\tvirtual void SetIndexBuffer(const Ref<IndexBuffer>& indexBuffer) override;\n\n\t\tvirtual const std::vector<Ref<VertexBuffer>>& GetVertexBuffers() const { return m_VertexBuffers; }\n\t\tvirtual const Ref<IndexBuffer>& GetIndexBuffer() const { return m_IndexBuffer; }\n\tprivate:\n\t\tuint32_t m_RendererID;\n\t\tuint32_t m_VertexBufferIndex = 0;\n\t\tstd::vector<Ref<VertexBuffer>> m_VertexBuffers;\n\t\tRef<IndexBuffer> m_IndexBuffer;\n\t};\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/Windows/WindowsInput.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Core/Input.h\"\n\n#include \"Hazel/Core/Application.h\"\n#include <GLFW/glfw3.h>\n\nnamespace Hazel {\n\n\tbool Input::IsKeyPressed(const KeyCode key)\n\t{\n\t\tauto* window = static_cast<GLFWwindow*>(Application::Get().GetWindow().GetNativeWindow());\n\t\tauto state = glfwGetKey(window, static_cast<int32_t>(key));\n\t\treturn state == GLFW_PRESS;\n\t}\n\n\tbool Input::IsMouseButtonPressed(const MouseCode button)\n\t{\n\t\tauto* window = static_cast<GLFWwindow*>(Application::Get().GetWindow().GetNativeWindow());\n\t\tauto state = glfwGetMouseButton(window, static_cast<int32_t>(button));\n\t\treturn state == GLFW_PRESS;\n\t}\n\n\tglm::vec2 Input::GetMousePosition()\n\t{\n\t\tauto* window = static_cast<GLFWwindow*>(Application::Get().GetWindow().GetNativeWindow());\n\t\tdouble xpos, ypos;\n\t\tglfwGetCursorPos(window, &xpos, &ypos);\n\n\t\treturn { (float)xpos, (float)ypos };\n\t}\n\n\tfloat Input::GetMouseX()\n\t{\n\t\treturn GetMousePosition().x;\n\t}\n\n\tfloat Input::GetMouseY()\n\t{\n\t\treturn GetMousePosition().y;\n\t}\n\n}"
  },
  {
    "path": "Hazel/src/Platform/Windows/WindowsPlatformUtils.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Hazel/Utils/PlatformUtils.h\"\n#include \"Hazel/Core/Application.h\"\n\n#include <commdlg.h>\n#include <GLFW/glfw3.h>\n#define GLFW_EXPOSE_NATIVE_WIN32\n#include <GLFW/glfw3native.h>\n\nnamespace Hazel {\n\n\tfloat Time::GetTime()\n\t{\n\t\treturn glfwGetTime();\n\t}\n\n\n\tstd::string FileDialogs::OpenFile(const char* filter)\n\t{\n\t\tOPENFILENAMEA ofn;\n\t\tCHAR szFile[260] = { 0 };\n\t\tCHAR currentDir[256] = { 0 };\n\t\tZeroMemory(&ofn, sizeof(OPENFILENAME));\n\t\tofn.lStructSize = sizeof(OPENFILENAME);\n\t\tofn.hwndOwner = glfwGetWin32Window((GLFWwindow*)Application::Get().GetWindow().GetNativeWindow());\n\t\tofn.lpstrFile = szFile;\n\t\tofn.nMaxFile = sizeof(szFile);\n\t\tif (GetCurrentDirectoryA(256, currentDir))\n\t\t\tofn.lpstrInitialDir = currentDir;\n\t\tofn.lpstrFilter = filter;\n\t\tofn.nFilterIndex = 1;\n\t\tofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR;\n\n\t\tif (GetOpenFileNameA(&ofn) == TRUE)\n\t\t\treturn ofn.lpstrFile;\n\n\t\treturn std::string();\n\n\t}\n\n\tstd::string FileDialogs::SaveFile(const char* filter)\n\t{\n\t\tOPENFILENAMEA ofn;\n\t\tCHAR szFile[260] = { 0 };\n\t\tCHAR currentDir[256] = { 0 };\n\t\tZeroMemory(&ofn, sizeof(OPENFILENAME));\n\t\tofn.lStructSize = sizeof(OPENFILENAME);\n\t\tofn.hwndOwner = glfwGetWin32Window((GLFWwindow*)Application::Get().GetWindow().GetNativeWindow());\n\t\tofn.lpstrFile = szFile;\n\t\tofn.nMaxFile = sizeof(szFile);\n\t\tif (GetCurrentDirectoryA(256, currentDir))\n\t\t\tofn.lpstrInitialDir = currentDir;\n\t\tofn.lpstrFilter = filter;\n\t\tofn.nFilterIndex = 1;\n\t\tofn.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR;\n\n\t\t// Sets the default extension by extracting it from the filter\n\t\tofn.lpstrDefExt = strchr(filter, '\\0') + 1;\n\n\t\tif (GetSaveFileNameA(&ofn) == TRUE)\n\t\t\treturn ofn.lpstrFile;\n\t\t\n\t\treturn std::string();\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/Windows/WindowsWindow.cpp",
    "content": "#include \"hzpch.h\"\n#include \"Platform/Windows/WindowsWindow.h\"\n\n#include \"Hazel/Core/Input.h\"\n\n#include \"Hazel/Events/ApplicationEvent.h\"\n#include \"Hazel/Events/MouseEvent.h\"\n#include \"Hazel/Events/KeyEvent.h\"\n\n#include \"Hazel/Renderer/Renderer.h\"\n\n#include \"Platform/OpenGL/OpenGLContext.h\"\n\nnamespace Hazel {\n\t\n\tstatic uint8_t s_GLFWWindowCount = 0;\n\n\tstatic void GLFWErrorCallback(int error, const char* description)\n\t{\n\t\tHZ_CORE_ERROR(\"GLFW Error ({0}): {1}\", error, description);\n\t}\n\n\tWindowsWindow::WindowsWindow(const WindowProps& props)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tInit(props);\n\t}\n\n\tWindowsWindow::~WindowsWindow()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tShutdown();\n\t}\n\n\tvoid WindowsWindow::Init(const WindowProps& props)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_Data.Title = props.Title;\n\t\tm_Data.Width = props.Width;\n\t\tm_Data.Height = props.Height;\n\n\t\tHZ_CORE_INFO(\"Creating window {0} ({1}, {2})\", props.Title, props.Width, props.Height);\n\n\t\tif (s_GLFWWindowCount == 0)\n\t\t{\n\t\t\tHZ_PROFILE_SCOPE(\"glfwInit\");\n\t\t\tint success = glfwInit();\n\t\t\tHZ_CORE_ASSERT(success, \"Could not initialize GLFW!\");\n\t\t\tglfwSetErrorCallback(GLFWErrorCallback);\n\t\t}\n\n\t\t{\n\t\t\tHZ_PROFILE_SCOPE(\"glfwCreateWindow\");\n\t\t#if defined(HZ_DEBUG)\n\t\t\tif (Renderer::GetAPI() == RendererAPI::API::OpenGL)\n\t\t\t\tglfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE);\n\t\t#endif\n\t\t\tm_Window = glfwCreateWindow((int)props.Width, (int)props.Height, m_Data.Title.c_str(), nullptr, nullptr);\n\t\t\t++s_GLFWWindowCount;\n\t\t}\n\n\t\tm_Context = GraphicsContext::Create(m_Window);\n\t\tm_Context->Init();\n\n\t\tglfwSetWindowUserPointer(m_Window, &m_Data);\n\t\tSetVSync(true);\n\n\t\t// Set GLFW callbacks\n\t\tglfwSetWindowSizeCallback(m_Window, [](GLFWwindow* window, int width, int height)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\t\t\tdata.Width = width;\n\t\t\tdata.Height = height;\n\n\t\t\tWindowResizeEvent event(width, height);\n\t\t\tdata.EventCallback(event);\n\t\t});\n\n\t\tglfwSetWindowCloseCallback(m_Window, [](GLFWwindow* window)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\t\t\tWindowCloseEvent event;\n\t\t\tdata.EventCallback(event);\n\t\t});\n\n\t\tglfwSetKeyCallback(m_Window, [](GLFWwindow* window, int key, int scancode, int action, int mods)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\n\t\t\tswitch (action)\n\t\t\t{\n\t\t\t\tcase GLFW_PRESS:\n\t\t\t\t{\n\t\t\t\t\tKeyPressedEvent event(key, 0);\n\t\t\t\t\tdata.EventCallback(event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase GLFW_RELEASE:\n\t\t\t\t{\n\t\t\t\t\tKeyReleasedEvent event(key);\n\t\t\t\t\tdata.EventCallback(event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase GLFW_REPEAT:\n\t\t\t\t{\n\t\t\t\t\tKeyPressedEvent event(key, true);\n\t\t\t\t\tdata.EventCallback(event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tglfwSetCharCallback(m_Window, [](GLFWwindow* window, unsigned int keycode)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\n\t\t\tKeyTypedEvent event(keycode);\n\t\t\tdata.EventCallback(event);\n\t\t});\n\n\t\tglfwSetMouseButtonCallback(m_Window, [](GLFWwindow* window, int button, int action, int mods)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\n\t\t\tswitch (action)\n\t\t\t{\n\t\t\t\tcase GLFW_PRESS:\n\t\t\t\t{\n\t\t\t\t\tMouseButtonPressedEvent event(button);\n\t\t\t\t\tdata.EventCallback(event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase GLFW_RELEASE:\n\t\t\t\t{\n\t\t\t\t\tMouseButtonReleasedEvent event(button);\n\t\t\t\t\tdata.EventCallback(event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tglfwSetScrollCallback(m_Window, [](GLFWwindow* window, double xOffset, double yOffset)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\n\t\t\tMouseScrolledEvent event((float)xOffset, (float)yOffset);\n\t\t\tdata.EventCallback(event);\n\t\t});\n\n\t\tglfwSetCursorPosCallback(m_Window, [](GLFWwindow* window, double xPos, double yPos)\n\t\t{\n\t\t\tWindowData& data = *(WindowData*)glfwGetWindowUserPointer(window);\n\n\t\t\tMouseMovedEvent event((float)xPos, (float)yPos);\n\t\t\tdata.EventCallback(event);\n\t\t});\n\t}\n\n\tvoid WindowsWindow::Shutdown()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglfwDestroyWindow(m_Window);\n\t\t--s_GLFWWindowCount;\n\n\t\tif (s_GLFWWindowCount == 0)\n\t\t{\n\t\t\tglfwTerminate();\n\t\t}\n\t}\n\n\tvoid WindowsWindow::OnUpdate()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tglfwPollEvents();\n\t\tm_Context->SwapBuffers();\n\t}\n\n\tvoid WindowsWindow::SetVSync(bool enabled)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tif (enabled)\n\t\t\tglfwSwapInterval(1);\n\t\telse\n\t\t\tglfwSwapInterval(0);\n\n\t\tm_Data.VSync = enabled;\n\t}\n\n\tbool WindowsWindow::IsVSync() const\n\t{\n\t\treturn m_Data.VSync;\n\t}\n\n}\n"
  },
  {
    "path": "Hazel/src/Platform/Windows/WindowsWindow.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Window.h\"\n#include \"Hazel/Renderer/GraphicsContext.h\"\n\n#include <GLFW/glfw3.h>\n\nnamespace Hazel {\n\n\tclass WindowsWindow : public Window\n\t{\n\tpublic:\n\t\tWindowsWindow(const WindowProps& props);\n\t\tvirtual ~WindowsWindow();\n\n\t\tvoid OnUpdate() override;\n\n\t\tunsigned int GetWidth() const override { return m_Data.Width; }\n\t\tunsigned int GetHeight() const override { return m_Data.Height; }\n\n\t\t// Window attributes\n\t\tvoid SetEventCallback(const EventCallbackFn& callback) override { m_Data.EventCallback = callback; }\n\t\tvoid SetVSync(bool enabled) override;\n\t\tbool IsVSync() const override;\n\n\t\tvirtual void* GetNativeWindow() const { return m_Window; }\n\tprivate:\n\t\tvirtual void Init(const WindowProps& props);\n\t\tvirtual void Shutdown();\n\tprivate:\n\t\tGLFWwindow* m_Window;\n\t\tScope<GraphicsContext> m_Context;\n\n\t\tstruct WindowData\n\t\t{\n\t\t\tstd::string Title;\n\t\t\tunsigned int Width, Height;\n\t\t\tbool VSync;\n\n\t\t\tEventCallbackFn EventCallback;\n\t\t};\n\n\t\tWindowData m_Data;\n\t};\n\n}"
  },
  {
    "path": "Hazel/src/hzpch.cpp",
    "content": "#include \"hzpch.h\""
  },
  {
    "path": "Hazel/src/hzpch.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/PlatformDetection.h\"\n\n#ifdef HZ_PLATFORM_WINDOWS\n\t#ifndef NOMINMAX\n\t\t// See github.com/skypjack/entt/wiki/Frequently-Asked-Questions#warning-c4003-the-min-the-max-and-the-macro\n\t\t#define NOMINMAX\n\t#endif\n#endif\n\n#include <iostream>\n#include <memory>\n#include <utility>\n#include <algorithm>\n#include <functional>\n\n#include <string>\n#include <sstream>\n#include <array>\n#include <vector>\n#include <unordered_map>\n#include <unordered_set>\n\n#include \"Hazel/Core/Base.h\"\n\n#include \"Hazel/Core/Log.h\"\n\n#include \"Hazel/Debug/Instrumentor.h\"\n\n#ifdef HZ_PLATFORM_WINDOWS\n\t#include <Windows.h>\n#endif\n"
  },
  {
    "path": "Hazel/vendor/Glad/include/KHR/khrplatform.h",
    "content": "#ifndef __khrplatform_h_\n#define __khrplatform_h_\n\n/*\n** Copyright (c) 2008-2018 The Khronos Group Inc.\n**\n** Permission is hereby granted, free of charge, to any person obtaining a\n** copy of this software and/or associated documentation files (the\n** \"Materials\"), to deal in the Materials without restriction, including\n** without limitation the rights to use, copy, modify, merge, publish,\n** distribute, sublicense, and/or sell copies of the Materials, and to\n** permit persons to whom the Materials are furnished to do so, subject to\n** the following conditions:\n**\n** The above copyright notice and this permission notice shall be included\n** in all copies or substantial portions of the Materials.\n**\n** THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n*/\n\n/* Khronos platform-specific types and definitions.\n *\n * The master copy of khrplatform.h is maintained in the Khronos EGL\n * Registry repository at https://github.com/KhronosGroup/EGL-Registry\n * The last semantic modification to khrplatform.h was at commit ID:\n *      67a3e0864c2d75ea5287b9f3d2eb74a745936692\n *\n * Adopters may modify this file to suit their platform. Adopters are\n * encouraged to submit platform specific modifications to the Khronos\n * group so that they can be included in future versions of this file.\n * Please submit changes by filing pull requests or issues on\n * the EGL Registry repository linked above.\n *\n *\n * See the Implementer's Guidelines for information about where this file\n * should be located on your system and for more details of its use:\n *    http://www.khronos.org/registry/implementers_guide.pdf\n *\n * This file should be included as\n *        #include <KHR/khrplatform.h>\n * by Khronos client API header files that use its types and defines.\n *\n * The types in khrplatform.h should only be used to define API-specific types.\n *\n * Types defined in khrplatform.h:\n *    khronos_int8_t              signed   8  bit\n *    khronos_uint8_t             unsigned 8  bit\n *    khronos_int16_t             signed   16 bit\n *    khronos_uint16_t            unsigned 16 bit\n *    khronos_int32_t             signed   32 bit\n *    khronos_uint32_t            unsigned 32 bit\n *    khronos_int64_t             signed   64 bit\n *    khronos_uint64_t            unsigned 64 bit\n *    khronos_intptr_t            signed   same number of bits as a pointer\n *    khronos_uintptr_t           unsigned same number of bits as a pointer\n *    khronos_ssize_t             signed   size\n *    khronos_usize_t             unsigned size\n *    khronos_float_t             signed   32 bit floating point\n *    khronos_time_ns_t           unsigned 64 bit time in nanoseconds\n *    khronos_utime_nanoseconds_t unsigned time interval or absolute time in\n *                                         nanoseconds\n *    khronos_stime_nanoseconds_t signed time interval in nanoseconds\n *    khronos_boolean_enum_t      enumerated boolean type. This should\n *      only be used as a base type when a client API's boolean type is\n *      an enum. Client APIs which use an integer or other type for\n *      booleans cannot use this as the base type for their boolean.\n *\n * Tokens defined in khrplatform.h:\n *\n *    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.\n *\n *    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.\n *    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.\n *\n * Calling convention macros defined in this file:\n *    KHRONOS_APICALL\n *    KHRONOS_APIENTRY\n *    KHRONOS_APIATTRIBUTES\n *\n * These may be used in function prototypes as:\n *\n *      KHRONOS_APICALL void KHRONOS_APIENTRY funcname(\n *                                  int arg1,\n *                                  int arg2) KHRONOS_APIATTRIBUTES;\n */\n\n/*-------------------------------------------------------------------------\n * Definition of KHRONOS_APICALL\n *-------------------------------------------------------------------------\n * This precedes the return type of the function in the function prototype.\n */\n#if defined(_WIN32) && !defined(__SCITECH_SNAP__)\n#   define KHRONOS_APICALL __declspec(dllimport)\n#elif defined (__SYMBIAN32__)\n#   define KHRONOS_APICALL IMPORT_C\n#elif defined(__ANDROID__)\n#   define KHRONOS_APICALL __attribute__((visibility(\"default\")))\n#else\n#   define KHRONOS_APICALL\n#endif\n\n/*-------------------------------------------------------------------------\n * Definition of KHRONOS_APIENTRY\n *-------------------------------------------------------------------------\n * This follows the return type of the function  and precedes the function\n * name in the function prototype.\n */\n#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)\n    /* Win32 but not WinCE */\n#   define KHRONOS_APIENTRY __stdcall\n#else\n#   define KHRONOS_APIENTRY\n#endif\n\n/*-------------------------------------------------------------------------\n * Definition of KHRONOS_APIATTRIBUTES\n *-------------------------------------------------------------------------\n * This follows the closing parenthesis of the function prototype arguments.\n */\n#if defined (__ARMCC_2__)\n#define KHRONOS_APIATTRIBUTES __softfp\n#else\n#define KHRONOS_APIATTRIBUTES\n#endif\n\n/*-------------------------------------------------------------------------\n * basic type definitions\n *-----------------------------------------------------------------------*/\n#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)\n\n\n/*\n * Using <stdint.h>\n */\n#include <stdint.h>\ntypedef int32_t                 khronos_int32_t;\ntypedef uint32_t                khronos_uint32_t;\ntypedef int64_t                 khronos_int64_t;\ntypedef uint64_t                khronos_uint64_t;\n#define KHRONOS_SUPPORT_INT64   1\n#define KHRONOS_SUPPORT_FLOAT   1\n\n#elif defined(__VMS ) || defined(__sgi)\n\n/*\n * Using <inttypes.h>\n */\n#include <inttypes.h>\ntypedef int32_t                 khronos_int32_t;\ntypedef uint32_t                khronos_uint32_t;\ntypedef int64_t                 khronos_int64_t;\ntypedef uint64_t                khronos_uint64_t;\n#define KHRONOS_SUPPORT_INT64   1\n#define KHRONOS_SUPPORT_FLOAT   1\n\n#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)\n\n/*\n * Win32\n */\ntypedef __int32                 khronos_int32_t;\ntypedef unsigned __int32        khronos_uint32_t;\ntypedef __int64                 khronos_int64_t;\ntypedef unsigned __int64        khronos_uint64_t;\n#define KHRONOS_SUPPORT_INT64   1\n#define KHRONOS_SUPPORT_FLOAT   1\n\n#elif defined(__sun__) || defined(__digital__)\n\n/*\n * Sun or Digital\n */\ntypedef int                     khronos_int32_t;\ntypedef unsigned int            khronos_uint32_t;\n#if defined(__arch64__) || defined(_LP64)\ntypedef long int                khronos_int64_t;\ntypedef unsigned long int       khronos_uint64_t;\n#else\ntypedef long long int           khronos_int64_t;\ntypedef unsigned long long int  khronos_uint64_t;\n#endif /* __arch64__ */\n#define KHRONOS_SUPPORT_INT64   1\n#define KHRONOS_SUPPORT_FLOAT   1\n\n#elif 0\n\n/*\n * Hypothetical platform with no float or int64 support\n */\ntypedef int                     khronos_int32_t;\ntypedef unsigned int            khronos_uint32_t;\n#define KHRONOS_SUPPORT_INT64   0\n#define KHRONOS_SUPPORT_FLOAT   0\n\n#else\n\n/*\n * Generic fallback\n */\n#include <stdint.h>\ntypedef int32_t                 khronos_int32_t;\ntypedef uint32_t                khronos_uint32_t;\ntypedef int64_t                 khronos_int64_t;\ntypedef uint64_t                khronos_uint64_t;\n#define KHRONOS_SUPPORT_INT64   1\n#define KHRONOS_SUPPORT_FLOAT   1\n\n#endif\n\n\n/*\n * Types that are (so far) the same on all platforms\n */\ntypedef signed   char          khronos_int8_t;\ntypedef unsigned char          khronos_uint8_t;\ntypedef signed   short int     khronos_int16_t;\ntypedef unsigned short int     khronos_uint16_t;\n\n/*\n * Types that differ between LLP64 and LP64 architectures - in LLP64,\n * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears\n * to be the only LLP64 architecture in current use.\n */\n#ifdef _WIN64\ntypedef signed   long long int khronos_intptr_t;\ntypedef unsigned long long int khronos_uintptr_t;\ntypedef signed   long long int khronos_ssize_t;\ntypedef unsigned long long int khronos_usize_t;\n#else\ntypedef signed   long  int     khronos_intptr_t;\ntypedef unsigned long  int     khronos_uintptr_t;\ntypedef signed   long  int     khronos_ssize_t;\ntypedef unsigned long  int     khronos_usize_t;\n#endif\n\n#if KHRONOS_SUPPORT_FLOAT\n/*\n * Float type\n */\ntypedef          float         khronos_float_t;\n#endif\n\n#if KHRONOS_SUPPORT_INT64\n/* Time types\n *\n * These types can be used to represent a time interval in nanoseconds or\n * an absolute Unadjusted System Time.  Unadjusted System Time is the number\n * of nanoseconds since some arbitrary system event (e.g. since the last\n * time the system booted).  The Unadjusted System Time is an unsigned\n * 64 bit value that wraps back to 0 every 584 years.  Time intervals\n * may be either signed or unsigned.\n */\ntypedef khronos_uint64_t       khronos_utime_nanoseconds_t;\ntypedef khronos_int64_t        khronos_stime_nanoseconds_t;\n#endif\n\n/*\n * Dummy value used to pad enum types to 32 bits.\n */\n#ifndef KHRONOS_MAX_ENUM\n#define KHRONOS_MAX_ENUM 0x7FFFFFFF\n#endif\n\n/*\n * Enumerated boolean type\n *\n * Values other than zero should be considered to be true.  Therefore\n * comparisons should not be made against KHRONOS_TRUE.\n */\ntypedef enum {\n    KHRONOS_FALSE = 0,\n    KHRONOS_TRUE  = 1,\n    KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM\n} khronos_boolean_enum_t;\n\n#endif /* __khrplatform_h_ */\n"
  },
  {
    "path": "Hazel/vendor/Glad/include/glad/glad.h",
    "content": "/*\n\n    OpenGL loader generated by glad 0.1.28 on Sat Jan  5 02:36:41 2019.\n\n    Language/Generator: C/C++\n    Specification: gl\n    APIs: gl=4.6\n    Profile: core\n    Extensions:\n        \n    Loader: True\n    Local files: False\n    Omit khrplatform: False\n    Reproducible: False\n\n    Commandline:\n        --profile=\"core\" --api=\"gl=4.6\" --generator=\"c\" --spec=\"gl\" --extensions=\"\"\n    Online:\n        https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6\n*/\n\n\n#ifndef __glad_h_\n#define __glad_h_\n\n#ifdef __gl_h_\n#error OpenGL header already included, remove this include, glad already provides it\n#endif\n#define __gl_h_\n\n#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN 1\n#endif\n#ifndef NOMINMAX\n#define NOMINMAX 1\n#endif\n#include <windows.h>\n#endif\n\n#ifndef APIENTRY\n#define APIENTRY\n#endif\n#ifndef APIENTRYP\n#define APIENTRYP APIENTRY *\n#endif\n\n#ifndef GLAPIENTRY\n#define GLAPIENTRY APIENTRY\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct gladGLversionStruct {\n    int major;\n    int minor;\n};\n\ntypedef void* (* GLADloadproc)(const char *name);\n\n#ifndef GLAPI\n# if defined(GLAD_GLAPI_EXPORT)\n#  if defined(_WIN32) || defined(__CYGWIN__)\n#   if defined(GLAD_GLAPI_EXPORT_BUILD)\n#    if defined(__GNUC__)\n#     define GLAPI __attribute__ ((dllexport)) extern\n#    else\n#     define GLAPI __declspec(dllexport) extern\n#    endif\n#   else\n#    if defined(__GNUC__)\n#     define GLAPI __attribute__ ((dllimport)) extern\n#    else\n#     define GLAPI __declspec(dllimport) extern\n#    endif\n#   endif\n#  elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD)\n#   define GLAPI __attribute__ ((visibility (\"default\"))) extern\n#  else\n#   define GLAPI extern\n#  endif\n# else\n#  define GLAPI extern\n# endif\n#endif\n\nGLAPI struct gladGLversionStruct GLVersion;\n\nGLAPI int gladLoadGL(void);\n\nGLAPI int gladLoadGLLoader(GLADloadproc);\n\n#include <KHR/khrplatform.h>\ntypedef unsigned int GLenum;\ntypedef unsigned char GLboolean;\ntypedef unsigned int GLbitfield;\ntypedef void GLvoid;\ntypedef khronos_int8_t GLbyte;\ntypedef khronos_uint8_t GLubyte;\ntypedef khronos_int16_t GLshort;\ntypedef khronos_uint16_t GLushort;\ntypedef int GLint;\ntypedef unsigned int GLuint;\ntypedef khronos_int32_t GLclampx;\ntypedef int GLsizei;\ntypedef khronos_float_t GLfloat;\ntypedef khronos_float_t GLclampf;\ntypedef double GLdouble;\ntypedef double GLclampd;\ntypedef void *GLeglClientBufferEXT;\ntypedef void *GLeglImageOES;\ntypedef char GLchar;\ntypedef char GLcharARB;\n#ifdef __APPLE__\ntypedef void *GLhandleARB;\n#else\ntypedef unsigned int GLhandleARB;\n#endif\ntypedef khronos_uint16_t GLhalf;\ntypedef khronos_uint16_t GLhalfARB;\ntypedef khronos_int32_t GLfixed;\ntypedef khronos_intptr_t GLintptr;\ntypedef khronos_intptr_t GLintptrARB;\ntypedef khronos_ssize_t GLsizeiptr;\ntypedef khronos_ssize_t GLsizeiptrARB;\ntypedef khronos_int64_t GLint64;\ntypedef khronos_int64_t GLint64EXT;\ntypedef khronos_uint64_t GLuint64;\ntypedef khronos_uint64_t GLuint64EXT;\ntypedef struct __GLsync *GLsync;\nstruct _cl_context;\nstruct _cl_event;\ntypedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);\ntypedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);\ntypedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);\ntypedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);\ntypedef unsigned short GLhalfNV;\ntypedef GLintptr GLvdpauSurfaceNV;\ntypedef void (APIENTRY *GLVULKANPROCNV)(void);\n#define GL_DEPTH_BUFFER_BIT 0x00000100\n#define GL_STENCIL_BUFFER_BIT 0x00000400\n#define GL_COLOR_BUFFER_BIT 0x00004000\n#define GL_FALSE 0\n#define GL_TRUE 1\n#define GL_POINTS 0x0000\n#define GL_LINES 0x0001\n#define GL_LINE_LOOP 0x0002\n#define GL_LINE_STRIP 0x0003\n#define GL_TRIANGLES 0x0004\n#define GL_TRIANGLE_STRIP 0x0005\n#define GL_TRIANGLE_FAN 0x0006\n#define GL_NEVER 0x0200\n#define GL_LESS 0x0201\n#define GL_EQUAL 0x0202\n#define GL_LEQUAL 0x0203\n#define GL_GREATER 0x0204\n#define GL_NOTEQUAL 0x0205\n#define GL_GEQUAL 0x0206\n#define GL_ALWAYS 0x0207\n#define GL_ZERO 0\n#define GL_ONE 1\n#define GL_SRC_COLOR 0x0300\n#define GL_ONE_MINUS_SRC_COLOR 0x0301\n#define GL_SRC_ALPHA 0x0302\n#define GL_ONE_MINUS_SRC_ALPHA 0x0303\n#define GL_DST_ALPHA 0x0304\n#define GL_ONE_MINUS_DST_ALPHA 0x0305\n#define GL_DST_COLOR 0x0306\n#define GL_ONE_MINUS_DST_COLOR 0x0307\n#define GL_SRC_ALPHA_SATURATE 0x0308\n#define GL_NONE 0\n#define GL_FRONT_LEFT 0x0400\n#define GL_FRONT_RIGHT 0x0401\n#define GL_BACK_LEFT 0x0402\n#define GL_BACK_RIGHT 0x0403\n#define GL_FRONT 0x0404\n#define GL_BACK 0x0405\n#define GL_LEFT 0x0406\n#define GL_RIGHT 0x0407\n#define GL_FRONT_AND_BACK 0x0408\n#define GL_NO_ERROR 0\n#define GL_INVALID_ENUM 0x0500\n#define GL_INVALID_VALUE 0x0501\n#define GL_INVALID_OPERATION 0x0502\n#define GL_OUT_OF_MEMORY 0x0505\n#define GL_CW 0x0900\n#define GL_CCW 0x0901\n#define GL_POINT_SIZE 0x0B11\n#define GL_POINT_SIZE_RANGE 0x0B12\n#define GL_POINT_SIZE_GRANULARITY 0x0B13\n#define GL_LINE_SMOOTH 0x0B20\n#define GL_LINE_WIDTH 0x0B21\n#define GL_LINE_WIDTH_RANGE 0x0B22\n#define GL_LINE_WIDTH_GRANULARITY 0x0B23\n#define GL_POLYGON_MODE 0x0B40\n#define GL_POLYGON_SMOOTH 0x0B41\n#define GL_CULL_FACE 0x0B44\n#define GL_CULL_FACE_MODE 0x0B45\n#define GL_FRONT_FACE 0x0B46\n#define GL_DEPTH_RANGE 0x0B70\n#define GL_DEPTH_TEST 0x0B71\n#define GL_DEPTH_WRITEMASK 0x0B72\n#define GL_DEPTH_CLEAR_VALUE 0x0B73\n#define GL_DEPTH_FUNC 0x0B74\n#define GL_STENCIL_TEST 0x0B90\n#define GL_STENCIL_CLEAR_VALUE 0x0B91\n#define GL_STENCIL_FUNC 0x0B92\n#define GL_STENCIL_VALUE_MASK 0x0B93\n#define GL_STENCIL_FAIL 0x0B94\n#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95\n#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96\n#define GL_STENCIL_REF 0x0B97\n#define GL_STENCIL_WRITEMASK 0x0B98\n#define GL_VIEWPORT 0x0BA2\n#define GL_DITHER 0x0BD0\n#define GL_BLEND_DST 0x0BE0\n#define GL_BLEND_SRC 0x0BE1\n#define GL_BLEND 0x0BE2\n#define GL_LOGIC_OP_MODE 0x0BF0\n#define GL_DRAW_BUFFER 0x0C01\n#define GL_READ_BUFFER 0x0C02\n#define GL_SCISSOR_BOX 0x0C10\n#define GL_SCISSOR_TEST 0x0C11\n#define GL_COLOR_CLEAR_VALUE 0x0C22\n#define GL_COLOR_WRITEMASK 0x0C23\n#define GL_DOUBLEBUFFER 0x0C32\n#define GL_STEREO 0x0C33\n#define GL_LINE_SMOOTH_HINT 0x0C52\n#define GL_POLYGON_SMOOTH_HINT 0x0C53\n#define GL_UNPACK_SWAP_BYTES 0x0CF0\n#define GL_UNPACK_LSB_FIRST 0x0CF1\n#define GL_UNPACK_ROW_LENGTH 0x0CF2\n#define GL_UNPACK_SKIP_ROWS 0x0CF3\n#define GL_UNPACK_SKIP_PIXELS 0x0CF4\n#define GL_UNPACK_ALIGNMENT 0x0CF5\n#define GL_PACK_SWAP_BYTES 0x0D00\n#define GL_PACK_LSB_FIRST 0x0D01\n#define GL_PACK_ROW_LENGTH 0x0D02\n#define GL_PACK_SKIP_ROWS 0x0D03\n#define GL_PACK_SKIP_PIXELS 0x0D04\n#define GL_PACK_ALIGNMENT 0x0D05\n#define GL_MAX_TEXTURE_SIZE 0x0D33\n#define GL_MAX_VIEWPORT_DIMS 0x0D3A\n#define GL_SUBPIXEL_BITS 0x0D50\n#define GL_TEXTURE_1D 0x0DE0\n#define GL_TEXTURE_2D 0x0DE1\n#define GL_TEXTURE_WIDTH 0x1000\n#define GL_TEXTURE_HEIGHT 0x1001\n#define GL_TEXTURE_BORDER_COLOR 0x1004\n#define GL_DONT_CARE 0x1100\n#define GL_FASTEST 0x1101\n#define GL_NICEST 0x1102\n#define GL_BYTE 0x1400\n#define GL_UNSIGNED_BYTE 0x1401\n#define GL_SHORT 0x1402\n#define GL_UNSIGNED_SHORT 0x1403\n#define GL_INT 0x1404\n#define GL_UNSIGNED_INT 0x1405\n#define GL_FLOAT 0x1406\n#define GL_CLEAR 0x1500\n#define GL_AND 0x1501\n#define GL_AND_REVERSE 0x1502\n#define GL_COPY 0x1503\n#define GL_AND_INVERTED 0x1504\n#define GL_NOOP 0x1505\n#define GL_XOR 0x1506\n#define GL_OR 0x1507\n#define GL_NOR 0x1508\n#define GL_EQUIV 0x1509\n#define GL_INVERT 0x150A\n#define GL_OR_REVERSE 0x150B\n#define GL_COPY_INVERTED 0x150C\n#define GL_OR_INVERTED 0x150D\n#define GL_NAND 0x150E\n#define GL_SET 0x150F\n#define GL_TEXTURE 0x1702\n#define GL_COLOR 0x1800\n#define GL_DEPTH 0x1801\n#define GL_STENCIL 0x1802\n#define GL_STENCIL_INDEX 0x1901\n#define GL_DEPTH_COMPONENT 0x1902\n#define GL_RED 0x1903\n#define GL_GREEN 0x1904\n#define GL_BLUE 0x1905\n#define GL_ALPHA 0x1906\n#define GL_RGB 0x1907\n#define GL_RGBA 0x1908\n#define GL_POINT 0x1B00\n#define GL_LINE 0x1B01\n#define GL_FILL 0x1B02\n#define GL_KEEP 0x1E00\n#define GL_REPLACE 0x1E01\n#define GL_INCR 0x1E02\n#define GL_DECR 0x1E03\n#define GL_VENDOR 0x1F00\n#define GL_RENDERER 0x1F01\n#define GL_VERSION 0x1F02\n#define GL_EXTENSIONS 0x1F03\n#define GL_NEAREST 0x2600\n#define GL_LINEAR 0x2601\n#define GL_NEAREST_MIPMAP_NEAREST 0x2700\n#define GL_LINEAR_MIPMAP_NEAREST 0x2701\n#define GL_NEAREST_MIPMAP_LINEAR 0x2702\n#define GL_LINEAR_MIPMAP_LINEAR 0x2703\n#define GL_TEXTURE_MAG_FILTER 0x2800\n#define GL_TEXTURE_MIN_FILTER 0x2801\n#define GL_TEXTURE_WRAP_S 0x2802\n#define GL_TEXTURE_WRAP_T 0x2803\n#define GL_REPEAT 0x2901\n#define GL_COLOR_LOGIC_OP 0x0BF2\n#define GL_POLYGON_OFFSET_UNITS 0x2A00\n#define GL_POLYGON_OFFSET_POINT 0x2A01\n#define GL_POLYGON_OFFSET_LINE 0x2A02\n#define GL_POLYGON_OFFSET_FILL 0x8037\n#define GL_POLYGON_OFFSET_FACTOR 0x8038\n#define GL_TEXTURE_BINDING_1D 0x8068\n#define GL_TEXTURE_BINDING_2D 0x8069\n#define GL_TEXTURE_INTERNAL_FORMAT 0x1003\n#define GL_TEXTURE_RED_SIZE 0x805C\n#define GL_TEXTURE_GREEN_SIZE 0x805D\n#define GL_TEXTURE_BLUE_SIZE 0x805E\n#define GL_TEXTURE_ALPHA_SIZE 0x805F\n#define GL_DOUBLE 0x140A\n#define GL_PROXY_TEXTURE_1D 0x8063\n#define GL_PROXY_TEXTURE_2D 0x8064\n#define GL_R3_G3_B2 0x2A10\n#define GL_RGB4 0x804F\n#define GL_RGB5 0x8050\n#define GL_RGB8 0x8051\n#define GL_RGB10 0x8052\n#define GL_RGB12 0x8053\n#define GL_RGB16 0x8054\n#define GL_RGBA2 0x8055\n#define GL_RGBA4 0x8056\n#define GL_RGB5_A1 0x8057\n#define GL_RGBA8 0x8058\n#define GL_RGB10_A2 0x8059\n#define GL_RGBA12 0x805A\n#define GL_RGBA16 0x805B\n#define GL_UNSIGNED_BYTE_3_3_2 0x8032\n#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033\n#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034\n#define GL_UNSIGNED_INT_8_8_8_8 0x8035\n#define GL_UNSIGNED_INT_10_10_10_2 0x8036\n#define GL_TEXTURE_BINDING_3D 0x806A\n#define GL_PACK_SKIP_IMAGES 0x806B\n#define GL_PACK_IMAGE_HEIGHT 0x806C\n#define GL_UNPACK_SKIP_IMAGES 0x806D\n#define GL_UNPACK_IMAGE_HEIGHT 0x806E\n#define GL_TEXTURE_3D 0x806F\n#define GL_PROXY_TEXTURE_3D 0x8070\n#define GL_TEXTURE_DEPTH 0x8071\n#define GL_TEXTURE_WRAP_R 0x8072\n#define GL_MAX_3D_TEXTURE_SIZE 0x8073\n#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362\n#define GL_UNSIGNED_SHORT_5_6_5 0x8363\n#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364\n#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365\n#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366\n#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367\n#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368\n#define GL_BGR 0x80E0\n#define GL_BGRA 0x80E1\n#define GL_MAX_ELEMENTS_VERTICES 0x80E8\n#define GL_MAX_ELEMENTS_INDICES 0x80E9\n#define GL_CLAMP_TO_EDGE 0x812F\n#define GL_TEXTURE_MIN_LOD 0x813A\n#define GL_TEXTURE_MAX_LOD 0x813B\n#define GL_TEXTURE_BASE_LEVEL 0x813C\n#define GL_TEXTURE_MAX_LEVEL 0x813D\n#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12\n#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13\n#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22\n#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23\n#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E\n#define GL_TEXTURE0 0x84C0\n#define GL_TEXTURE1 0x84C1\n#define GL_TEXTURE2 0x84C2\n#define GL_TEXTURE3 0x84C3\n#define GL_TEXTURE4 0x84C4\n#define GL_TEXTURE5 0x84C5\n#define GL_TEXTURE6 0x84C6\n#define GL_TEXTURE7 0x84C7\n#define GL_TEXTURE8 0x84C8\n#define GL_TEXTURE9 0x84C9\n#define GL_TEXTURE10 0x84CA\n#define GL_TEXTURE11 0x84CB\n#define GL_TEXTURE12 0x84CC\n#define GL_TEXTURE13 0x84CD\n#define GL_TEXTURE14 0x84CE\n#define GL_TEXTURE15 0x84CF\n#define GL_TEXTURE16 0x84D0\n#define GL_TEXTURE17 0x84D1\n#define GL_TEXTURE18 0x84D2\n#define GL_TEXTURE19 0x84D3\n#define GL_TEXTURE20 0x84D4\n#define GL_TEXTURE21 0x84D5\n#define GL_TEXTURE22 0x84D6\n#define GL_TEXTURE23 0x84D7\n#define GL_TEXTURE24 0x84D8\n#define GL_TEXTURE25 0x84D9\n#define GL_TEXTURE26 0x84DA\n#define GL_TEXTURE27 0x84DB\n#define GL_TEXTURE28 0x84DC\n#define GL_TEXTURE29 0x84DD\n#define GL_TEXTURE30 0x84DE\n#define GL_TEXTURE31 0x84DF\n#define GL_ACTIVE_TEXTURE 0x84E0\n#define GL_MULTISAMPLE 0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE 0x809F\n#define GL_SAMPLE_COVERAGE 0x80A0\n#define GL_SAMPLE_BUFFERS 0x80A8\n#define GL_SAMPLES 0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE 0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT 0x80AB\n#define GL_TEXTURE_CUBE_MAP 0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C\n#define GL_COMPRESSED_RGB 0x84ED\n#define GL_COMPRESSED_RGBA 0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT 0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0\n#define GL_TEXTURE_COMPRESSED 0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3\n#define GL_CLAMP_TO_BORDER 0x812D\n#define GL_BLEND_DST_RGB 0x80C8\n#define GL_BLEND_SRC_RGB 0x80C9\n#define GL_BLEND_DST_ALPHA 0x80CA\n#define GL_BLEND_SRC_ALPHA 0x80CB\n#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128\n#define GL_DEPTH_COMPONENT16 0x81A5\n#define GL_DEPTH_COMPONENT24 0x81A6\n#define GL_DEPTH_COMPONENT32 0x81A7\n#define GL_MIRRORED_REPEAT 0x8370\n#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD\n#define GL_TEXTURE_LOD_BIAS 0x8501\n#define GL_INCR_WRAP 0x8507\n#define GL_DECR_WRAP 0x8508\n#define GL_TEXTURE_DEPTH_SIZE 0x884A\n#define GL_TEXTURE_COMPARE_MODE 0x884C\n#define GL_TEXTURE_COMPARE_FUNC 0x884D\n#define GL_BLEND_COLOR 0x8005\n#define GL_BLEND_EQUATION 0x8009\n#define GL_CONSTANT_COLOR 0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002\n#define GL_CONSTANT_ALPHA 0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004\n#define GL_FUNC_ADD 0x8006\n#define GL_FUNC_REVERSE_SUBTRACT 0x800B\n#define GL_FUNC_SUBTRACT 0x800A\n#define GL_MIN 0x8007\n#define GL_MAX 0x8008\n#define GL_BUFFER_SIZE 0x8764\n#define GL_BUFFER_USAGE 0x8765\n#define GL_QUERY_COUNTER_BITS 0x8864\n#define GL_CURRENT_QUERY 0x8865\n#define GL_QUERY_RESULT 0x8866\n#define GL_QUERY_RESULT_AVAILABLE 0x8867\n#define GL_ARRAY_BUFFER 0x8892\n#define GL_ELEMENT_ARRAY_BUFFER 0x8893\n#define GL_ARRAY_BUFFER_BINDING 0x8894\n#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895\n#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F\n#define GL_READ_ONLY 0x88B8\n#define GL_WRITE_ONLY 0x88B9\n#define GL_READ_WRITE 0x88BA\n#define GL_BUFFER_ACCESS 0x88BB\n#define GL_BUFFER_MAPPED 0x88BC\n#define GL_BUFFER_MAP_POINTER 0x88BD\n#define GL_STREAM_DRAW 0x88E0\n#define GL_STREAM_READ 0x88E1\n#define GL_STREAM_COPY 0x88E2\n#define GL_STATIC_DRAW 0x88E4\n#define GL_STATIC_READ 0x88E5\n#define GL_STATIC_COPY 0x88E6\n#define GL_DYNAMIC_DRAW 0x88E8\n#define GL_DYNAMIC_READ 0x88E9\n#define GL_DYNAMIC_COPY 0x88EA\n#define GL_SAMPLES_PASSED 0x8914\n#define GL_SRC1_ALPHA 0x8589\n#define GL_BLEND_EQUATION_RGB 0x8009\n#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622\n#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623\n#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624\n#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625\n#define GL_CURRENT_VERTEX_ATTRIB 0x8626\n#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642\n#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645\n#define GL_STENCIL_BACK_FUNC 0x8800\n#define GL_STENCIL_BACK_FAIL 0x8801\n#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802\n#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803\n#define GL_MAX_DRAW_BUFFERS 0x8824\n#define GL_DRAW_BUFFER0 0x8825\n#define GL_DRAW_BUFFER1 0x8826\n#define GL_DRAW_BUFFER2 0x8827\n#define GL_DRAW_BUFFER3 0x8828\n#define GL_DRAW_BUFFER4 0x8829\n#define GL_DRAW_BUFFER5 0x882A\n#define GL_DRAW_BUFFER6 0x882B\n#define GL_DRAW_BUFFER7 0x882C\n#define GL_DRAW_BUFFER8 0x882D\n#define GL_DRAW_BUFFER9 0x882E\n#define GL_DRAW_BUFFER10 0x882F\n#define GL_DRAW_BUFFER11 0x8830\n#define GL_DRAW_BUFFER12 0x8831\n#define GL_DRAW_BUFFER13 0x8832\n#define GL_DRAW_BUFFER14 0x8833\n#define GL_DRAW_BUFFER15 0x8834\n#define GL_BLEND_EQUATION_ALPHA 0x883D\n#define GL_MAX_VERTEX_ATTRIBS 0x8869\n#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A\n#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872\n#define GL_FRAGMENT_SHADER 0x8B30\n#define GL_VERTEX_SHADER 0x8B31\n#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49\n#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A\n#define GL_MAX_VARYING_FLOATS 0x8B4B\n#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C\n#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D\n#define GL_SHADER_TYPE 0x8B4F\n#define GL_FLOAT_VEC2 0x8B50\n#define GL_FLOAT_VEC3 0x8B51\n#define GL_FLOAT_VEC4 0x8B52\n#define GL_INT_VEC2 0x8B53\n#define GL_INT_VEC3 0x8B54\n#define GL_INT_VEC4 0x8B55\n#define GL_BOOL 0x8B56\n#define GL_BOOL_VEC2 0x8B57\n#define GL_BOOL_VEC3 0x8B58\n#define GL_BOOL_VEC4 0x8B59\n#define GL_FLOAT_MAT2 0x8B5A\n#define GL_FLOAT_MAT3 0x8B5B\n#define GL_FLOAT_MAT4 0x8B5C\n#define GL_SAMPLER_1D 0x8B5D\n#define GL_SAMPLER_2D 0x8B5E\n#define GL_SAMPLER_3D 0x8B5F\n#define GL_SAMPLER_CUBE 0x8B60\n#define GL_SAMPLER_1D_SHADOW 0x8B61\n#define GL_SAMPLER_2D_SHADOW 0x8B62\n#define GL_DELETE_STATUS 0x8B80\n#define GL_COMPILE_STATUS 0x8B81\n#define GL_LINK_STATUS 0x8B82\n#define GL_VALIDATE_STATUS 0x8B83\n#define GL_INFO_LOG_LENGTH 0x8B84\n#define GL_ATTACHED_SHADERS 0x8B85\n#define GL_ACTIVE_UNIFORMS 0x8B86\n#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87\n#define GL_SHADER_SOURCE_LENGTH 0x8B88\n#define GL_ACTIVE_ATTRIBUTES 0x8B89\n#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A\n#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B\n#define GL_SHADING_LANGUAGE_VERSION 0x8B8C\n#define GL_CURRENT_PROGRAM 0x8B8D\n#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0\n#define GL_LOWER_LEFT 0x8CA1\n#define GL_UPPER_LEFT 0x8CA2\n#define GL_STENCIL_BACK_REF 0x8CA3\n#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4\n#define GL_STENCIL_BACK_WRITEMASK 0x8CA5\n#define GL_PIXEL_PACK_BUFFER 0x88EB\n#define GL_PIXEL_UNPACK_BUFFER 0x88EC\n#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED\n#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF\n#define GL_FLOAT_MAT2x3 0x8B65\n#define GL_FLOAT_MAT2x4 0x8B66\n#define GL_FLOAT_MAT3x2 0x8B67\n#define GL_FLOAT_MAT3x4 0x8B68\n#define GL_FLOAT_MAT4x2 0x8B69\n#define GL_FLOAT_MAT4x3 0x8B6A\n#define GL_SRGB 0x8C40\n#define GL_SRGB8 0x8C41\n#define GL_SRGB_ALPHA 0x8C42\n#define GL_SRGB8_ALPHA8 0x8C43\n#define GL_COMPRESSED_SRGB 0x8C48\n#define GL_COMPRESSED_SRGB_ALPHA 0x8C49\n#define GL_COMPARE_REF_TO_TEXTURE 0x884E\n#define GL_CLIP_DISTANCE0 0x3000\n#define GL_CLIP_DISTANCE1 0x3001\n#define GL_CLIP_DISTANCE2 0x3002\n#define GL_CLIP_DISTANCE3 0x3003\n#define GL_CLIP_DISTANCE4 0x3004\n#define GL_CLIP_DISTANCE5 0x3005\n#define GL_CLIP_DISTANCE6 0x3006\n#define GL_CLIP_DISTANCE7 0x3007\n#define GL_MAX_CLIP_DISTANCES 0x0D32\n#define GL_MAJOR_VERSION 0x821B\n#define GL_MINOR_VERSION 0x821C\n#define GL_NUM_EXTENSIONS 0x821D\n#define GL_CONTEXT_FLAGS 0x821E\n#define GL_COMPRESSED_RED 0x8225\n#define GL_COMPRESSED_RG 0x8226\n#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001\n#define GL_RGBA32F 0x8814\n#define GL_RGB32F 0x8815\n#define GL_RGBA16F 0x881A\n#define GL_RGB16F 0x881B\n#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD\n#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF\n#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904\n#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905\n#define GL_CLAMP_READ_COLOR 0x891C\n#define GL_FIXED_ONLY 0x891D\n#define GL_MAX_VARYING_COMPONENTS 0x8B4B\n#define GL_TEXTURE_1D_ARRAY 0x8C18\n#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19\n#define GL_TEXTURE_2D_ARRAY 0x8C1A\n#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B\n#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C\n#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D\n#define GL_R11F_G11F_B10F 0x8C3A\n#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B\n#define GL_RGB9_E5 0x8C3D\n#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E\n#define GL_TEXTURE_SHARED_SIZE 0x8C3F\n#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76\n#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80\n#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83\n#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84\n#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85\n#define GL_PRIMITIVES_GENERATED 0x8C87\n#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88\n#define GL_RASTERIZER_DISCARD 0x8C89\n#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B\n#define GL_INTERLEAVED_ATTRIBS 0x8C8C\n#define GL_SEPARATE_ATTRIBS 0x8C8D\n#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E\n#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F\n#define GL_RGBA32UI 0x8D70\n#define GL_RGB32UI 0x8D71\n#define GL_RGBA16UI 0x8D76\n#define GL_RGB16UI 0x8D77\n#define GL_RGBA8UI 0x8D7C\n#define GL_RGB8UI 0x8D7D\n#define GL_RGBA32I 0x8D82\n#define GL_RGB32I 0x8D83\n#define GL_RGBA16I 0x8D88\n#define GL_RGB16I 0x8D89\n#define GL_RGBA8I 0x8D8E\n#define GL_RGB8I 0x8D8F\n#define GL_RED_INTEGER 0x8D94\n#define GL_GREEN_INTEGER 0x8D95\n#define GL_BLUE_INTEGER 0x8D96\n#define GL_RGB_INTEGER 0x8D98\n#define GL_RGBA_INTEGER 0x8D99\n#define GL_BGR_INTEGER 0x8D9A\n#define GL_BGRA_INTEGER 0x8D9B\n#define GL_SAMPLER_1D_ARRAY 0x8DC0\n#define GL_SAMPLER_2D_ARRAY 0x8DC1\n#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3\n#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4\n#define GL_SAMPLER_CUBE_SHADOW 0x8DC5\n#define GL_UNSIGNED_INT_VEC2 0x8DC6\n#define GL_UNSIGNED_INT_VEC3 0x8DC7\n#define GL_UNSIGNED_INT_VEC4 0x8DC8\n#define GL_INT_SAMPLER_1D 0x8DC9\n#define GL_INT_SAMPLER_2D 0x8DCA\n#define GL_INT_SAMPLER_3D 0x8DCB\n#define GL_INT_SAMPLER_CUBE 0x8DCC\n#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE\n#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF\n#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1\n#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2\n#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3\n#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4\n#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6\n#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7\n#define GL_QUERY_WAIT 0x8E13\n#define GL_QUERY_NO_WAIT 0x8E14\n#define GL_QUERY_BY_REGION_WAIT 0x8E15\n#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16\n#define GL_BUFFER_ACCESS_FLAGS 0x911F\n#define GL_BUFFER_MAP_LENGTH 0x9120\n#define GL_BUFFER_MAP_OFFSET 0x9121\n#define GL_DEPTH_COMPONENT32F 0x8CAC\n#define GL_DEPTH32F_STENCIL8 0x8CAD\n#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD\n#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506\n#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210\n#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211\n#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212\n#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213\n#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214\n#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215\n#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216\n#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217\n#define GL_FRAMEBUFFER_DEFAULT 0x8218\n#define GL_FRAMEBUFFER_UNDEFINED 0x8219\n#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A\n#define GL_MAX_RENDERBUFFER_SIZE 0x84E8\n#define GL_DEPTH_STENCIL 0x84F9\n#define GL_UNSIGNED_INT_24_8 0x84FA\n#define GL_DEPTH24_STENCIL8 0x88F0\n#define GL_TEXTURE_STENCIL_SIZE 0x88F1\n#define GL_TEXTURE_RED_TYPE 0x8C10\n#define GL_TEXTURE_GREEN_TYPE 0x8C11\n#define GL_TEXTURE_BLUE_TYPE 0x8C12\n#define GL_TEXTURE_ALPHA_TYPE 0x8C13\n#define GL_TEXTURE_DEPTH_TYPE 0x8C16\n#define GL_UNSIGNED_NORMALIZED 0x8C17\n#define GL_FRAMEBUFFER_BINDING 0x8CA6\n#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6\n#define GL_RENDERBUFFER_BINDING 0x8CA7\n#define GL_READ_FRAMEBUFFER 0x8CA8\n#define GL_DRAW_FRAMEBUFFER 0x8CA9\n#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA\n#define GL_RENDERBUFFER_SAMPLES 0x8CAB\n#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0\n#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4\n#define GL_FRAMEBUFFER_COMPLETE 0x8CD5\n#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6\n#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7\n#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB\n#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC\n#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD\n#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF\n#define GL_COLOR_ATTACHMENT0 0x8CE0\n#define GL_COLOR_ATTACHMENT1 0x8CE1\n#define GL_COLOR_ATTACHMENT2 0x8CE2\n#define GL_COLOR_ATTACHMENT3 0x8CE3\n#define GL_COLOR_ATTACHMENT4 0x8CE4\n#define GL_COLOR_ATTACHMENT5 0x8CE5\n#define GL_COLOR_ATTACHMENT6 0x8CE6\n#define GL_COLOR_ATTACHMENT7 0x8CE7\n#define GL_COLOR_ATTACHMENT8 0x8CE8\n#define GL_COLOR_ATTACHMENT9 0x8CE9\n#define GL_COLOR_ATTACHMENT10 0x8CEA\n#define GL_COLOR_ATTACHMENT11 0x8CEB\n#define GL_COLOR_ATTACHMENT12 0x8CEC\n#define GL_COLOR_ATTACHMENT13 0x8CED\n#define GL_COLOR_ATTACHMENT14 0x8CEE\n#define GL_COLOR_ATTACHMENT15 0x8CEF\n#define GL_COLOR_ATTACHMENT16 0x8CF0\n#define GL_COLOR_ATTACHMENT17 0x8CF1\n#define GL_COLOR_ATTACHMENT18 0x8CF2\n#define GL_COLOR_ATTACHMENT19 0x8CF3\n#define GL_COLOR_ATTACHMENT20 0x8CF4\n#define GL_COLOR_ATTACHMENT21 0x8CF5\n#define GL_COLOR_ATTACHMENT22 0x8CF6\n#define GL_COLOR_ATTACHMENT23 0x8CF7\n#define GL_COLOR_ATTACHMENT24 0x8CF8\n#define GL_COLOR_ATTACHMENT25 0x8CF9\n#define GL_COLOR_ATTACHMENT26 0x8CFA\n#define GL_COLOR_ATTACHMENT27 0x8CFB\n#define GL_COLOR_ATTACHMENT28 0x8CFC\n#define GL_COLOR_ATTACHMENT29 0x8CFD\n#define GL_COLOR_ATTACHMENT30 0x8CFE\n#define GL_COLOR_ATTACHMENT31 0x8CFF\n#define GL_DEPTH_ATTACHMENT 0x8D00\n#define GL_STENCIL_ATTACHMENT 0x8D20\n#define GL_FRAMEBUFFER 0x8D40\n#define GL_RENDERBUFFER 0x8D41\n#define GL_RENDERBUFFER_WIDTH 0x8D42\n#define GL_RENDERBUFFER_HEIGHT 0x8D43\n#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44\n#define GL_STENCIL_INDEX1 0x8D46\n#define GL_STENCIL_INDEX4 0x8D47\n#define GL_STENCIL_INDEX8 0x8D48\n#define GL_STENCIL_INDEX16 0x8D49\n#define GL_RENDERBUFFER_RED_SIZE 0x8D50\n#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51\n#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52\n#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53\n#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54\n#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55\n#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56\n#define GL_MAX_SAMPLES 0x8D57\n#define GL_FRAMEBUFFER_SRGB 0x8DB9\n#define GL_HALF_FLOAT 0x140B\n#define GL_MAP_READ_BIT 0x0001\n#define GL_MAP_WRITE_BIT 0x0002\n#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004\n#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008\n#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010\n#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020\n#define GL_COMPRESSED_RED_RGTC1 0x8DBB\n#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC\n#define GL_COMPRESSED_RG_RGTC2 0x8DBD\n#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE\n#define GL_RG 0x8227\n#define GL_RG_INTEGER 0x8228\n#define GL_R8 0x8229\n#define GL_R16 0x822A\n#define GL_RG8 0x822B\n#define GL_RG16 0x822C\n#define GL_R16F 0x822D\n#define GL_R32F 0x822E\n#define GL_RG16F 0x822F\n#define GL_RG32F 0x8230\n#define GL_R8I 0x8231\n#define GL_R8UI 0x8232\n#define GL_R16I 0x8233\n#define GL_R16UI 0x8234\n#define GL_R32I 0x8235\n#define GL_R32UI 0x8236\n#define GL_RG8I 0x8237\n#define GL_RG8UI 0x8238\n#define GL_RG16I 0x8239\n#define GL_RG16UI 0x823A\n#define GL_RG32I 0x823B\n#define GL_RG32UI 0x823C\n#define GL_VERTEX_ARRAY_BINDING 0x85B5\n#define GL_SAMPLER_2D_RECT 0x8B63\n#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64\n#define GL_SAMPLER_BUFFER 0x8DC2\n#define GL_INT_SAMPLER_2D_RECT 0x8DCD\n#define GL_INT_SAMPLER_BUFFER 0x8DD0\n#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5\n#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8\n#define GL_TEXTURE_BUFFER 0x8C2A\n#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B\n#define GL_TEXTURE_BINDING_BUFFER 0x8C2C\n#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D\n#define GL_TEXTURE_RECTANGLE 0x84F5\n#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6\n#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7\n#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8\n#define GL_R8_SNORM 0x8F94\n#define GL_RG8_SNORM 0x8F95\n#define GL_RGB8_SNORM 0x8F96\n#define GL_RGBA8_SNORM 0x8F97\n#define GL_R16_SNORM 0x8F98\n#define GL_RG16_SNORM 0x8F99\n#define GL_RGB16_SNORM 0x8F9A\n#define GL_RGBA16_SNORM 0x8F9B\n#define GL_SIGNED_NORMALIZED 0x8F9C\n#define GL_PRIMITIVE_RESTART 0x8F9D\n#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E\n#define GL_COPY_READ_BUFFER 0x8F36\n#define GL_COPY_WRITE_BUFFER 0x8F37\n#define GL_UNIFORM_BUFFER 0x8A11\n#define GL_UNIFORM_BUFFER_BINDING 0x8A28\n#define GL_UNIFORM_BUFFER_START 0x8A29\n#define GL_UNIFORM_BUFFER_SIZE 0x8A2A\n#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B\n#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C\n#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D\n#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E\n#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F\n#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30\n#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31\n#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32\n#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33\n#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34\n#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35\n#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36\n#define GL_UNIFORM_TYPE 0x8A37\n#define GL_UNIFORM_SIZE 0x8A38\n#define GL_UNIFORM_NAME_LENGTH 0x8A39\n#define GL_UNIFORM_BLOCK_INDEX 0x8A3A\n#define GL_UNIFORM_OFFSET 0x8A3B\n#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C\n#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D\n#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E\n#define GL_UNIFORM_BLOCK_BINDING 0x8A3F\n#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40\n#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41\n#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42\n#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46\n#define GL_INVALID_INDEX 0xFFFFFFFF\n#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001\n#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002\n#define GL_LINES_ADJACENCY 0x000A\n#define GL_LINE_STRIP_ADJACENCY 0x000B\n#define GL_TRIANGLES_ADJACENCY 0x000C\n#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D\n#define GL_PROGRAM_POINT_SIZE 0x8642\n#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29\n#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7\n#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8\n#define GL_GEOMETRY_SHADER 0x8DD9\n#define GL_GEOMETRY_VERTICES_OUT 0x8916\n#define GL_GEOMETRY_INPUT_TYPE 0x8917\n#define GL_GEOMETRY_OUTPUT_TYPE 0x8918\n#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF\n#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0\n#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1\n#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122\n#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123\n#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124\n#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125\n#define GL_CONTEXT_PROFILE_MASK 0x9126\n#define GL_DEPTH_CLAMP 0x864F\n#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C\n#define GL_FIRST_VERTEX_CONVENTION 0x8E4D\n#define GL_LAST_VERTEX_CONVENTION 0x8E4E\n#define GL_PROVOKING_VERTEX 0x8E4F\n#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F\n#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111\n#define GL_OBJECT_TYPE 0x9112\n#define GL_SYNC_CONDITION 0x9113\n#define GL_SYNC_STATUS 0x9114\n#define GL_SYNC_FLAGS 0x9115\n#define GL_SYNC_FENCE 0x9116\n#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117\n#define GL_UNSIGNALED 0x9118\n#define GL_SIGNALED 0x9119\n#define GL_ALREADY_SIGNALED 0x911A\n#define GL_TIMEOUT_EXPIRED 0x911B\n#define GL_CONDITION_SATISFIED 0x911C\n#define GL_WAIT_FAILED 0x911D\n#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF\n#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001\n#define GL_SAMPLE_POSITION 0x8E50\n#define GL_SAMPLE_MASK 0x8E51\n#define GL_SAMPLE_MASK_VALUE 0x8E52\n#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59\n#define GL_TEXTURE_2D_MULTISAMPLE 0x9100\n#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101\n#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102\n#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103\n#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104\n#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105\n#define GL_TEXTURE_SAMPLES 0x9106\n#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107\n#define GL_SAMPLER_2D_MULTISAMPLE 0x9108\n#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109\n#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A\n#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B\n#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C\n#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D\n#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E\n#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F\n#define GL_MAX_INTEGER_SAMPLES 0x9110\n#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE\n#define GL_SRC1_COLOR 0x88F9\n#define GL_ONE_MINUS_SRC1_COLOR 0x88FA\n#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB\n#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC\n#define GL_ANY_SAMPLES_PASSED 0x8C2F\n#define GL_SAMPLER_BINDING 0x8919\n#define GL_RGB10_A2UI 0x906F\n#define GL_TEXTURE_SWIZZLE_R 0x8E42\n#define GL_TEXTURE_SWIZZLE_G 0x8E43\n#define GL_TEXTURE_SWIZZLE_B 0x8E44\n#define GL_TEXTURE_SWIZZLE_A 0x8E45\n#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46\n#define GL_TIME_ELAPSED 0x88BF\n#define GL_TIMESTAMP 0x8E28\n#define GL_INT_2_10_10_10_REV 0x8D9F\n#define GL_SAMPLE_SHADING 0x8C36\n#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37\n#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E\n#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F\n#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009\n#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A\n#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B\n#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C\n#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D\n#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E\n#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F\n#define GL_DRAW_INDIRECT_BUFFER 0x8F3F\n#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43\n#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F\n#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A\n#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B\n#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C\n#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D\n#define GL_MAX_VERTEX_STREAMS 0x8E71\n#define GL_DOUBLE_VEC2 0x8FFC\n#define GL_DOUBLE_VEC3 0x8FFD\n#define GL_DOUBLE_VEC4 0x8FFE\n#define GL_DOUBLE_MAT2 0x8F46\n#define GL_DOUBLE_MAT3 0x8F47\n#define GL_DOUBLE_MAT4 0x8F48\n#define GL_DOUBLE_MAT2x3 0x8F49\n#define GL_DOUBLE_MAT2x4 0x8F4A\n#define GL_DOUBLE_MAT3x2 0x8F4B\n#define GL_DOUBLE_MAT3x4 0x8F4C\n#define GL_DOUBLE_MAT4x2 0x8F4D\n#define GL_DOUBLE_MAT4x3 0x8F4E\n#define GL_ACTIVE_SUBROUTINES 0x8DE5\n#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6\n#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47\n#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48\n#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49\n#define GL_MAX_SUBROUTINES 0x8DE7\n#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8\n#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A\n#define GL_COMPATIBLE_SUBROUTINES 0x8E4B\n#define GL_PATCHES 0x000E\n#define GL_PATCH_VERTICES 0x8E72\n#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73\n#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74\n#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75\n#define GL_TESS_GEN_MODE 0x8E76\n#define GL_TESS_GEN_SPACING 0x8E77\n#define GL_TESS_GEN_VERTEX_ORDER 0x8E78\n#define GL_TESS_GEN_POINT_MODE 0x8E79\n#define GL_ISOLINES 0x8E7A\n#define GL_QUADS 0x0007\n#define GL_FRACTIONAL_ODD 0x8E7B\n#define GL_FRACTIONAL_EVEN 0x8E7C\n#define GL_MAX_PATCH_VERTICES 0x8E7D\n#define GL_MAX_TESS_GEN_LEVEL 0x8E7E\n#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F\n#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80\n#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81\n#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82\n#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83\n#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84\n#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85\n#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86\n#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89\n#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A\n#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C\n#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D\n#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E\n#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1\n#define GL_TESS_EVALUATION_SHADER 0x8E87\n#define GL_TESS_CONTROL_SHADER 0x8E88\n#define GL_TRANSFORM_FEEDBACK 0x8E22\n#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23\n#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24\n#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25\n#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70\n#define GL_FIXED 0x140C\n#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A\n#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B\n#define GL_LOW_FLOAT 0x8DF0\n#define GL_MEDIUM_FLOAT 0x8DF1\n#define GL_HIGH_FLOAT 0x8DF2\n#define GL_LOW_INT 0x8DF3\n#define GL_MEDIUM_INT 0x8DF4\n#define GL_HIGH_INT 0x8DF5\n#define GL_SHADER_COMPILER 0x8DFA\n#define GL_SHADER_BINARY_FORMATS 0x8DF8\n#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9\n#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB\n#define GL_MAX_VARYING_VECTORS 0x8DFC\n#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD\n#define GL_RGB565 0x8D62\n#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257\n#define GL_PROGRAM_BINARY_LENGTH 0x8741\n#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE\n#define GL_PROGRAM_BINARY_FORMATS 0x87FF\n#define GL_VERTEX_SHADER_BIT 0x00000001\n#define GL_FRAGMENT_SHADER_BIT 0x00000002\n#define GL_GEOMETRY_SHADER_BIT 0x00000004\n#define GL_TESS_CONTROL_SHADER_BIT 0x00000008\n#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010\n#define GL_ALL_SHADER_BITS 0xFFFFFFFF\n#define GL_PROGRAM_SEPARABLE 0x8258\n#define GL_ACTIVE_PROGRAM 0x8259\n#define GL_PROGRAM_PIPELINE_BINDING 0x825A\n#define GL_MAX_VIEWPORTS 0x825B\n#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C\n#define GL_VIEWPORT_BOUNDS_RANGE 0x825D\n#define GL_LAYER_PROVOKING_VERTEX 0x825E\n#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F\n#define GL_UNDEFINED_VERTEX 0x8260\n#define GL_COPY_READ_BUFFER_BINDING 0x8F36\n#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37\n#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24\n#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23\n#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127\n#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128\n#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129\n#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A\n#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B\n#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C\n#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D\n#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E\n#define GL_NUM_SAMPLE_COUNTS 0x9380\n#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC\n#define GL_ATOMIC_COUNTER_BUFFER 0x92C0\n#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1\n#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2\n#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3\n#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4\n#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5\n#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB\n#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC\n#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD\n#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE\n#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF\n#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0\n#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1\n#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2\n#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3\n#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4\n#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5\n#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6\n#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7\n#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8\n#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC\n#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9\n#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA\n#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB\n#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001\n#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002\n#define GL_UNIFORM_BARRIER_BIT 0x00000004\n#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008\n#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020\n#define GL_COMMAND_BARRIER_BIT 0x00000040\n#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080\n#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100\n#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200\n#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400\n#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800\n#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000\n#define GL_ALL_BARRIER_BITS 0xFFFFFFFF\n#define GL_MAX_IMAGE_UNITS 0x8F38\n#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39\n#define GL_IMAGE_BINDING_NAME 0x8F3A\n#define GL_IMAGE_BINDING_LEVEL 0x8F3B\n#define GL_IMAGE_BINDING_LAYERED 0x8F3C\n#define GL_IMAGE_BINDING_LAYER 0x8F3D\n#define GL_IMAGE_BINDING_ACCESS 0x8F3E\n#define GL_IMAGE_1D 0x904C\n#define GL_IMAGE_2D 0x904D\n#define GL_IMAGE_3D 0x904E\n#define GL_IMAGE_2D_RECT 0x904F\n#define GL_IMAGE_CUBE 0x9050\n#define GL_IMAGE_BUFFER 0x9051\n#define GL_IMAGE_1D_ARRAY 0x9052\n#define GL_IMAGE_2D_ARRAY 0x9053\n#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054\n#define GL_IMAGE_2D_MULTISAMPLE 0x9055\n#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056\n#define GL_INT_IMAGE_1D 0x9057\n#define GL_INT_IMAGE_2D 0x9058\n#define GL_INT_IMAGE_3D 0x9059\n#define GL_INT_IMAGE_2D_RECT 0x905A\n#define GL_INT_IMAGE_CUBE 0x905B\n#define GL_INT_IMAGE_BUFFER 0x905C\n#define GL_INT_IMAGE_1D_ARRAY 0x905D\n#define GL_INT_IMAGE_2D_ARRAY 0x905E\n#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F\n#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060\n#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061\n#define GL_UNSIGNED_INT_IMAGE_1D 0x9062\n#define GL_UNSIGNED_INT_IMAGE_2D 0x9063\n#define GL_UNSIGNED_INT_IMAGE_3D 0x9064\n#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065\n#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066\n#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067\n#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068\n#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069\n#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A\n#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B\n#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C\n#define GL_MAX_IMAGE_SAMPLES 0x906D\n#define GL_IMAGE_BINDING_FORMAT 0x906E\n#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7\n#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8\n#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9\n#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA\n#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB\n#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC\n#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD\n#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE\n#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF\n#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C\n#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D\n#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E\n#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F\n#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F\n#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9\n#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E\n#define GL_COMPRESSED_RGB8_ETC2 0x9274\n#define GL_COMPRESSED_SRGB8_ETC2 0x9275\n#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276\n#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277\n#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278\n#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279\n#define GL_COMPRESSED_R11_EAC 0x9270\n#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271\n#define GL_COMPRESSED_RG11_EAC 0x9272\n#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273\n#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69\n#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A\n#define GL_MAX_ELEMENT_INDEX 0x8D6B\n#define GL_COMPUTE_SHADER 0x91B9\n#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB\n#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC\n#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD\n#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262\n#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263\n#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264\n#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265\n#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266\n#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB\n#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE\n#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF\n#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED\n#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE\n#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF\n#define GL_COMPUTE_SHADER_BIT 0x00000020\n#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242\n#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243\n#define GL_DEBUG_CALLBACK_FUNCTION 0x8244\n#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245\n#define GL_DEBUG_SOURCE_API 0x8246\n#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247\n#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248\n#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249\n#define GL_DEBUG_SOURCE_APPLICATION 0x824A\n#define GL_DEBUG_SOURCE_OTHER 0x824B\n#define GL_DEBUG_TYPE_ERROR 0x824C\n#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D\n#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E\n#define GL_DEBUG_TYPE_PORTABILITY 0x824F\n#define GL_DEBUG_TYPE_PERFORMANCE 0x8250\n#define GL_DEBUG_TYPE_OTHER 0x8251\n#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143\n#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144\n#define GL_DEBUG_LOGGED_MESSAGES 0x9145\n#define GL_DEBUG_SEVERITY_HIGH 0x9146\n#define GL_DEBUG_SEVERITY_MEDIUM 0x9147\n#define GL_DEBUG_SEVERITY_LOW 0x9148\n#define GL_DEBUG_TYPE_MARKER 0x8268\n#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269\n#define GL_DEBUG_TYPE_POP_GROUP 0x826A\n#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B\n#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C\n#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D\n#define GL_BUFFER 0x82E0\n#define GL_SHADER 0x82E1\n#define GL_PROGRAM 0x82E2\n#define GL_VERTEX_ARRAY 0x8074\n#define GL_QUERY 0x82E3\n#define GL_PROGRAM_PIPELINE 0x82E4\n#define GL_SAMPLER 0x82E6\n#define GL_MAX_LABEL_LENGTH 0x82E8\n#define GL_DEBUG_OUTPUT 0x92E0\n#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002\n#define GL_MAX_UNIFORM_LOCATIONS 0x826E\n#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310\n#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311\n#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312\n#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313\n#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314\n#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315\n#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316\n#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317\n#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318\n#define GL_INTERNALFORMAT_SUPPORTED 0x826F\n#define GL_INTERNALFORMAT_PREFERRED 0x8270\n#define GL_INTERNALFORMAT_RED_SIZE 0x8271\n#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272\n#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273\n#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274\n#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275\n#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276\n#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277\n#define GL_INTERNALFORMAT_RED_TYPE 0x8278\n#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279\n#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A\n#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B\n#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C\n#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D\n#define GL_MAX_WIDTH 0x827E\n#define GL_MAX_HEIGHT 0x827F\n#define GL_MAX_DEPTH 0x8280\n#define GL_MAX_LAYERS 0x8281\n#define GL_MAX_COMBINED_DIMENSIONS 0x8282\n#define GL_COLOR_COMPONENTS 0x8283\n#define GL_DEPTH_COMPONENTS 0x8284\n#define GL_STENCIL_COMPONENTS 0x8285\n#define GL_COLOR_RENDERABLE 0x8286\n#define GL_DEPTH_RENDERABLE 0x8287\n#define GL_STENCIL_RENDERABLE 0x8288\n#define GL_FRAMEBUFFER_RENDERABLE 0x8289\n#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A\n#define GL_FRAMEBUFFER_BLEND 0x828B\n#define GL_READ_PIXELS 0x828C\n#define GL_READ_PIXELS_FORMAT 0x828D\n#define GL_READ_PIXELS_TYPE 0x828E\n#define GL_TEXTURE_IMAGE_FORMAT 0x828F\n#define GL_TEXTURE_IMAGE_TYPE 0x8290\n#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291\n#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292\n#define GL_MIPMAP 0x8293\n#define GL_MANUAL_GENERATE_MIPMAP 0x8294\n#define GL_AUTO_GENERATE_MIPMAP 0x8295\n#define GL_COLOR_ENCODING 0x8296\n#define GL_SRGB_READ 0x8297\n#define GL_SRGB_WRITE 0x8298\n#define GL_FILTER 0x829A\n#define GL_VERTEX_TEXTURE 0x829B\n#define GL_TESS_CONTROL_TEXTURE 0x829C\n#define GL_TESS_EVALUATION_TEXTURE 0x829D\n#define GL_GEOMETRY_TEXTURE 0x829E\n#define GL_FRAGMENT_TEXTURE 0x829F\n#define GL_COMPUTE_TEXTURE 0x82A0\n#define GL_TEXTURE_SHADOW 0x82A1\n#define GL_TEXTURE_GATHER 0x82A2\n#define GL_TEXTURE_GATHER_SHADOW 0x82A3\n#define GL_SHADER_IMAGE_LOAD 0x82A4\n#define GL_SHADER_IMAGE_STORE 0x82A5\n#define GL_SHADER_IMAGE_ATOMIC 0x82A6\n#define GL_IMAGE_TEXEL_SIZE 0x82A7\n#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8\n#define GL_IMAGE_PIXEL_FORMAT 0x82A9\n#define GL_IMAGE_PIXEL_TYPE 0x82AA\n#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC\n#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD\n#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE\n#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF\n#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1\n#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2\n#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3\n#define GL_CLEAR_BUFFER 0x82B4\n#define GL_TEXTURE_VIEW 0x82B5\n#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6\n#define GL_FULL_SUPPORT 0x82B7\n#define GL_CAVEAT_SUPPORT 0x82B8\n#define GL_IMAGE_CLASS_4_X_32 0x82B9\n#define GL_IMAGE_CLASS_2_X_32 0x82BA\n#define GL_IMAGE_CLASS_1_X_32 0x82BB\n#define GL_IMAGE_CLASS_4_X_16 0x82BC\n#define GL_IMAGE_CLASS_2_X_16 0x82BD\n#define GL_IMAGE_CLASS_1_X_16 0x82BE\n#define GL_IMAGE_CLASS_4_X_8 0x82BF\n#define GL_IMAGE_CLASS_2_X_8 0x82C0\n#define GL_IMAGE_CLASS_1_X_8 0x82C1\n#define GL_IMAGE_CLASS_11_11_10 0x82C2\n#define GL_IMAGE_CLASS_10_10_10_2 0x82C3\n#define GL_VIEW_CLASS_128_BITS 0x82C4\n#define GL_VIEW_CLASS_96_BITS 0x82C5\n#define GL_VIEW_CLASS_64_BITS 0x82C6\n#define GL_VIEW_CLASS_48_BITS 0x82C7\n#define GL_VIEW_CLASS_32_BITS 0x82C8\n#define GL_VIEW_CLASS_24_BITS 0x82C9\n#define GL_VIEW_CLASS_16_BITS 0x82CA\n#define GL_VIEW_CLASS_8_BITS 0x82CB\n#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC\n#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD\n#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE\n#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF\n#define GL_VIEW_CLASS_RGTC1_RED 0x82D0\n#define GL_VIEW_CLASS_RGTC2_RG 0x82D1\n#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2\n#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3\n#define GL_UNIFORM 0x92E1\n#define GL_UNIFORM_BLOCK 0x92E2\n#define GL_PROGRAM_INPUT 0x92E3\n#define GL_PROGRAM_OUTPUT 0x92E4\n#define GL_BUFFER_VARIABLE 0x92E5\n#define GL_SHADER_STORAGE_BLOCK 0x92E6\n#define GL_VERTEX_SUBROUTINE 0x92E8\n#define GL_TESS_CONTROL_SUBROUTINE 0x92E9\n#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA\n#define GL_GEOMETRY_SUBROUTINE 0x92EB\n#define GL_FRAGMENT_SUBROUTINE 0x92EC\n#define GL_COMPUTE_SUBROUTINE 0x92ED\n#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE\n#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF\n#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0\n#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1\n#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2\n#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3\n#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4\n#define GL_ACTIVE_RESOURCES 0x92F5\n#define GL_MAX_NAME_LENGTH 0x92F6\n#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7\n#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8\n#define GL_NAME_LENGTH 0x92F9\n#define GL_TYPE 0x92FA\n#define GL_ARRAY_SIZE 0x92FB\n#define GL_OFFSET 0x92FC\n#define GL_BLOCK_INDEX 0x92FD\n#define GL_ARRAY_STRIDE 0x92FE\n#define GL_MATRIX_STRIDE 0x92FF\n#define GL_IS_ROW_MAJOR 0x9300\n#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301\n#define GL_BUFFER_BINDING 0x9302\n#define GL_BUFFER_DATA_SIZE 0x9303\n#define GL_NUM_ACTIVE_VARIABLES 0x9304\n#define GL_ACTIVE_VARIABLES 0x9305\n#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306\n#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307\n#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308\n#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309\n#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A\n#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B\n#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C\n#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D\n#define GL_LOCATION 0x930E\n#define GL_LOCATION_INDEX 0x930F\n#define GL_IS_PER_PATCH 0x92E7\n#define GL_SHADER_STORAGE_BUFFER 0x90D2\n#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3\n#define GL_SHADER_STORAGE_BUFFER_START 0x90D4\n#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5\n#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6\n#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7\n#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8\n#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9\n#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA\n#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB\n#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC\n#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD\n#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE\n#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF\n#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000\n#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39\n#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA\n#define GL_TEXTURE_BUFFER_OFFSET 0x919D\n#define GL_TEXTURE_BUFFER_SIZE 0x919E\n#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F\n#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB\n#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC\n#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD\n#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE\n#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF\n#define GL_VERTEX_ATTRIB_BINDING 0x82D4\n#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5\n#define GL_VERTEX_BINDING_DIVISOR 0x82D6\n#define GL_VERTEX_BINDING_OFFSET 0x82D7\n#define GL_VERTEX_BINDING_STRIDE 0x82D8\n#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9\n#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA\n#define GL_VERTEX_BINDING_BUFFER 0x8F4F\n#define GL_DISPLAY_LIST 0x82E7\n#define GL_STACK_UNDERFLOW 0x0504\n#define GL_STACK_OVERFLOW 0x0503\n#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5\n#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221\n#define GL_TEXTURE_BUFFER_BINDING 0x8C2A\n#define GL_MAP_PERSISTENT_BIT 0x0040\n#define GL_MAP_COHERENT_BIT 0x0080\n#define GL_DYNAMIC_STORAGE_BIT 0x0100\n#define GL_CLIENT_STORAGE_BIT 0x0200\n#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000\n#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F\n#define GL_BUFFER_STORAGE_FLAGS 0x8220\n#define GL_CLEAR_TEXTURE 0x9365\n#define GL_LOCATION_COMPONENT 0x934A\n#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B\n#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C\n#define GL_QUERY_BUFFER 0x9192\n#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000\n#define GL_QUERY_BUFFER_BINDING 0x9193\n#define GL_QUERY_RESULT_NO_WAIT 0x9194\n#define GL_MIRROR_CLAMP_TO_EDGE 0x8743\n#define GL_CONTEXT_LOST 0x0507\n#define GL_NEGATIVE_ONE_TO_ONE 0x935E\n#define GL_ZERO_TO_ONE 0x935F\n#define GL_CLIP_ORIGIN 0x935C\n#define GL_CLIP_DEPTH_MODE 0x935D\n#define GL_QUERY_WAIT_INVERTED 0x8E17\n#define GL_QUERY_NO_WAIT_INVERTED 0x8E18\n#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19\n#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A\n#define GL_MAX_CULL_DISTANCES 0x82F9\n#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA\n#define GL_TEXTURE_TARGET 0x1006\n#define GL_QUERY_TARGET 0x82EA\n#define GL_GUILTY_CONTEXT_RESET 0x8253\n#define GL_INNOCENT_CONTEXT_RESET 0x8254\n#define GL_UNKNOWN_CONTEXT_RESET 0x8255\n#define GL_RESET_NOTIFICATION_STRATEGY 0x8256\n#define GL_LOSE_CONTEXT_ON_RESET 0x8252\n#define GL_NO_RESET_NOTIFICATION 0x8261\n#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004\n#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB\n#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC\n#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551\n#define GL_SPIR_V_BINARY 0x9552\n#define GL_PARAMETER_BUFFER 0x80EE\n#define GL_PARAMETER_BUFFER_BINDING 0x80EF\n#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008\n#define GL_VERTICES_SUBMITTED 0x82EE\n#define GL_PRIMITIVES_SUBMITTED 0x82EF\n#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0\n#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1\n#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2\n#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3\n#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4\n#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5\n#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6\n#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7\n#define GL_POLYGON_OFFSET_CLAMP 0x8E1B\n#define GL_SPIR_V_EXTENSIONS 0x9553\n#define GL_NUM_SPIR_V_EXTENSIONS 0x9554\n#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE\n#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF\n#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC\n#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED\n#ifndef GL_VERSION_1_0\n#define GL_VERSION_1_0 1\nGLAPI int GLAD_GL_VERSION_1_0;\ntypedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode);\nGLAPI PFNGLCULLFACEPROC glad_glCullFace;\n#define glCullFace glad_glCullFace\ntypedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode);\nGLAPI PFNGLFRONTFACEPROC glad_glFrontFace;\n#define glFrontFace glad_glFrontFace\ntypedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode);\nGLAPI PFNGLHINTPROC glad_glHint;\n#define glHint glad_glHint\ntypedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width);\nGLAPI PFNGLLINEWIDTHPROC glad_glLineWidth;\n#define glLineWidth glad_glLineWidth\ntypedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size);\nGLAPI PFNGLPOINTSIZEPROC glad_glPointSize;\n#define glPointSize glad_glPointSize\ntypedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode);\nGLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode;\n#define glPolygonMode glad_glPolygonMode\ntypedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLSCISSORPROC glad_glScissor;\n#define glScissor glad_glScissor\ntypedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param);\nGLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf;\n#define glTexParameterf glad_glTexParameterf\ntypedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params);\nGLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv;\n#define glTexParameterfv glad_glTexParameterfv\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param);\nGLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri;\n#define glTexParameteri glad_glTexParameteri\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params);\nGLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv;\n#define glTexParameteriv glad_glTexParameteriv\ntypedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D;\n#define glTexImage1D glad_glTexImage1D\ntypedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D;\n#define glTexImage2D glad_glTexImage2D\ntypedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf);\nGLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer;\n#define glDrawBuffer glad_glDrawBuffer\ntypedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask);\nGLAPI PFNGLCLEARPROC glad_glClear;\n#define glClear glad_glClear\ntypedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\nGLAPI PFNGLCLEARCOLORPROC glad_glClearColor;\n#define glClearColor glad_glClearColor\ntypedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s);\nGLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil;\n#define glClearStencil glad_glClearStencil\ntypedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth);\nGLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth;\n#define glClearDepth glad_glClearDepth\ntypedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask);\nGLAPI PFNGLSTENCILMASKPROC glad_glStencilMask;\n#define glStencilMask glad_glStencilMask\ntypedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);\nGLAPI PFNGLCOLORMASKPROC glad_glColorMask;\n#define glColorMask glad_glColorMask\ntypedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag);\nGLAPI PFNGLDEPTHMASKPROC glad_glDepthMask;\n#define glDepthMask glad_glDepthMask\ntypedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap);\nGLAPI PFNGLDISABLEPROC glad_glDisable;\n#define glDisable glad_glDisable\ntypedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap);\nGLAPI PFNGLENABLEPROC glad_glEnable;\n#define glEnable glad_glEnable\ntypedef void (APIENTRYP PFNGLFINISHPROC)(void);\nGLAPI PFNGLFINISHPROC glad_glFinish;\n#define glFinish glad_glFinish\ntypedef void (APIENTRYP PFNGLFLUSHPROC)(void);\nGLAPI PFNGLFLUSHPROC glad_glFlush;\n#define glFlush glad_glFlush\ntypedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor);\nGLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc;\n#define glBlendFunc glad_glBlendFunc\ntypedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode);\nGLAPI PFNGLLOGICOPPROC glad_glLogicOp;\n#define glLogicOp glad_glLogicOp\ntypedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask);\nGLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc;\n#define glStencilFunc glad_glStencilFunc\ntypedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass);\nGLAPI PFNGLSTENCILOPPROC glad_glStencilOp;\n#define glStencilOp glad_glStencilOp\ntypedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func);\nGLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc;\n#define glDepthFunc glad_glDepthFunc\ntypedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param);\nGLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref;\n#define glPixelStoref glad_glPixelStoref\ntypedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param);\nGLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei;\n#define glPixelStorei glad_glPixelStorei\ntypedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src);\nGLAPI PFNGLREADBUFFERPROC glad_glReadBuffer;\n#define glReadBuffer glad_glReadBuffer\ntypedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);\nGLAPI PFNGLREADPIXELSPROC glad_glReadPixels;\n#define glReadPixels glad_glReadPixels\ntypedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data);\nGLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv;\n#define glGetBooleanv glad_glGetBooleanv\ntypedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data);\nGLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev;\n#define glGetDoublev glad_glGetDoublev\ntypedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void);\nGLAPI PFNGLGETERRORPROC glad_glGetError;\n#define glGetError glad_glGetError\ntypedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data);\nGLAPI PFNGLGETFLOATVPROC glad_glGetFloatv;\n#define glGetFloatv glad_glGetFloatv\ntypedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data);\nGLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv;\n#define glGetIntegerv glad_glGetIntegerv\ntypedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name);\nGLAPI PFNGLGETSTRINGPROC glad_glGetString;\n#define glGetString glad_glGetString\ntypedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels);\nGLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage;\n#define glGetTexImage glad_glGetTexImage\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params);\nGLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv;\n#define glGetTexParameterfv glad_glGetTexParameterfv\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);\nGLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv;\n#define glGetTexParameteriv glad_glGetTexParameteriv\ntypedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params);\nGLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv;\n#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv\ntypedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params);\nGLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv;\n#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv\ntypedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap);\nGLAPI PFNGLISENABLEDPROC glad_glIsEnabled;\n#define glIsEnabled glad_glIsEnabled\ntypedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f);\nGLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange;\n#define glDepthRange glad_glDepthRange\ntypedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLVIEWPORTPROC glad_glViewport;\n#define glViewport glad_glViewport\n#endif\n#ifndef GL_VERSION_1_1\n#define GL_VERSION_1_1 1\nGLAPI int GLAD_GL_VERSION_1_1;\ntypedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count);\nGLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays;\n#define glDrawArrays glad_glDrawArrays\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices);\nGLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements;\n#define glDrawElements glad_glDrawElements\ntypedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units);\nGLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset;\n#define glPolygonOffset glad_glPolygonOffset\ntypedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\nGLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D;\n#define glCopyTexImage1D glad_glCopyTexImage1D\ntypedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\nGLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D;\n#define glCopyTexImage2D glad_glCopyTexImage2D\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\nGLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D;\n#define glCopyTexSubImage1D glad_glCopyTexSubImage1D\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D;\n#define glCopyTexSubImage2D glad_glCopyTexSubImage2D\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D;\n#define glTexSubImage1D glad_glTexSubImage1D\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D;\n#define glTexSubImage2D glad_glTexSubImage2D\ntypedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture);\nGLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture;\n#define glBindTexture glad_glBindTexture\ntypedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures);\nGLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures;\n#define glDeleteTextures glad_glDeleteTextures\ntypedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures);\nGLAPI PFNGLGENTEXTURESPROC glad_glGenTextures;\n#define glGenTextures glad_glGenTextures\ntypedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture);\nGLAPI PFNGLISTEXTUREPROC glad_glIsTexture;\n#define glIsTexture glad_glIsTexture\n#endif\n#ifndef GL_VERSION_1_2\n#define GL_VERSION_1_2 1\nGLAPI int GLAD_GL_VERSION_1_2;\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);\nGLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements;\n#define glDrawRangeElements glad_glDrawRangeElements\ntypedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D;\n#define glTexImage3D glad_glTexImage3D\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D;\n#define glTexSubImage3D glad_glTexSubImage3D\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D;\n#define glCopyTexSubImage3D glad_glCopyTexSubImage3D\n#endif\n#ifndef GL_VERSION_1_3\n#define GL_VERSION_1_3 1\nGLAPI int GLAD_GL_VERSION_1_3;\ntypedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture);\nGLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture;\n#define glActiveTexture glad_glActiveTexture\ntypedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert);\nGLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage;\n#define glSampleCoverage glad_glSampleCoverage\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D;\n#define glCompressedTexImage3D glad_glCompressedTexImage3D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D;\n#define glCompressedTexImage2D glad_glCompressedTexImage2D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D;\n#define glCompressedTexImage1D glad_glCompressedTexImage1D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D;\n#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D;\n#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D;\n#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img);\nGLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage;\n#define glGetCompressedTexImage glad_glGetCompressedTexImage\n#endif\n#ifndef GL_VERSION_1_4\n#define GL_VERSION_1_4 1\nGLAPI int GLAD_GL_VERSION_1_4;\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\nGLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate;\n#define glBlendFuncSeparate glad_glBlendFuncSeparate\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);\nGLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays;\n#define glMultiDrawArrays glad_glMultiDrawArrays\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);\nGLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements;\n#define glMultiDrawElements glad_glMultiDrawElements\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param);\nGLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf;\n#define glPointParameterf glad_glPointParameterf\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params);\nGLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv;\n#define glPointParameterfv glad_glPointParameterfv\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param);\nGLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri;\n#define glPointParameteri glad_glPointParameteri\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params);\nGLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv;\n#define glPointParameteriv glad_glPointParameteriv\ntypedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\nGLAPI PFNGLBLENDCOLORPROC glad_glBlendColor;\n#define glBlendColor glad_glBlendColor\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode);\nGLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation;\n#define glBlendEquation glad_glBlendEquation\n#endif\n#ifndef GL_VERSION_1_5\n#define GL_VERSION_1_5 1\nGLAPI int GLAD_GL_VERSION_1_5;\ntypedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids);\nGLAPI PFNGLGENQUERIESPROC glad_glGenQueries;\n#define glGenQueries glad_glGenQueries\ntypedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids);\nGLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries;\n#define glDeleteQueries glad_glDeleteQueries\ntypedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id);\nGLAPI PFNGLISQUERYPROC glad_glIsQuery;\n#define glIsQuery glad_glIsQuery\ntypedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id);\nGLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery;\n#define glBeginQuery glad_glBeginQuery\ntypedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target);\nGLAPI PFNGLENDQUERYPROC glad_glEndQuery;\n#define glEndQuery glad_glEndQuery\ntypedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params);\nGLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv;\n#define glGetQueryiv glad_glGetQueryiv\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params);\nGLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv;\n#define glGetQueryObjectiv glad_glGetQueryObjectiv\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params);\nGLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv;\n#define glGetQueryObjectuiv glad_glGetQueryObjectuiv\ntypedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer);\nGLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer;\n#define glBindBuffer glad_glBindBuffer\ntypedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers);\nGLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers;\n#define glDeleteBuffers glad_glDeleteBuffers\ntypedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers);\nGLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers;\n#define glGenBuffers glad_glGenBuffers\ntypedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer);\nGLAPI PFNGLISBUFFERPROC glad_glIsBuffer;\n#define glIsBuffer glad_glIsBuffer\ntypedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage);\nGLAPI PFNGLBUFFERDATAPROC glad_glBufferData;\n#define glBufferData glad_glBufferData\ntypedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data);\nGLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData;\n#define glBufferSubData glad_glBufferSubData\ntypedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data);\nGLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData;\n#define glGetBufferSubData glad_glGetBufferSubData\ntypedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access);\nGLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer;\n#define glMapBuffer glad_glMapBuffer\ntypedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target);\nGLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer;\n#define glUnmapBuffer glad_glUnmapBuffer\ntypedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);\nGLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv;\n#define glGetBufferParameteriv glad_glGetBufferParameteriv\ntypedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params);\nGLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv;\n#define glGetBufferPointerv glad_glGetBufferPointerv\n#endif\n#ifndef GL_VERSION_2_0\n#define GL_VERSION_2_0 1\nGLAPI int GLAD_GL_VERSION_2_0;\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha);\nGLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate;\n#define glBlendEquationSeparate glad_glBlendEquationSeparate\ntypedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs);\nGLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers;\n#define glDrawBuffers glad_glDrawBuffers\ntypedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);\nGLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate;\n#define glStencilOpSeparate glad_glStencilOpSeparate\ntypedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask);\nGLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate;\n#define glStencilFuncSeparate glad_glStencilFuncSeparate\ntypedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask);\nGLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate;\n#define glStencilMaskSeparate glad_glStencilMaskSeparate\ntypedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader);\nGLAPI PFNGLATTACHSHADERPROC glad_glAttachShader;\n#define glAttachShader glad_glAttachShader\ntypedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name);\nGLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation;\n#define glBindAttribLocation glad_glBindAttribLocation\ntypedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader);\nGLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader;\n#define glCompileShader glad_glCompileShader\ntypedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void);\nGLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram;\n#define glCreateProgram glad_glCreateProgram\ntypedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type);\nGLAPI PFNGLCREATESHADERPROC glad_glCreateShader;\n#define glCreateShader glad_glCreateShader\ntypedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program);\nGLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram;\n#define glDeleteProgram glad_glDeleteProgram\ntypedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader);\nGLAPI PFNGLDELETESHADERPROC glad_glDeleteShader;\n#define glDeleteShader glad_glDeleteShader\ntypedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader);\nGLAPI PFNGLDETACHSHADERPROC glad_glDetachShader;\n#define glDetachShader glad_glDetachShader\ntypedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index);\nGLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray;\n#define glDisableVertexAttribArray glad_glDisableVertexAttribArray\ntypedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index);\nGLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray;\n#define glEnableVertexAttribArray glad_glEnableVertexAttribArray\ntypedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);\nGLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib;\n#define glGetActiveAttrib glad_glGetActiveAttrib\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);\nGLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform;\n#define glGetActiveUniform glad_glGetActiveUniform\ntypedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);\nGLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders;\n#define glGetAttachedShaders glad_glGetAttachedShaders\ntypedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name);\nGLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation;\n#define glGetAttribLocation glad_glGetAttribLocation\ntypedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params);\nGLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv;\n#define glGetProgramiv glad_glGetProgramiv\ntypedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\nGLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog;\n#define glGetProgramInfoLog glad_glGetProgramInfoLog\ntypedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params);\nGLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv;\n#define glGetShaderiv glad_glGetShaderiv\ntypedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\nGLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog;\n#define glGetShaderInfoLog glad_glGetShaderInfoLog\ntypedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);\nGLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource;\n#define glGetShaderSource glad_glGetShaderSource\ntypedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name);\nGLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation;\n#define glGetUniformLocation glad_glGetUniformLocation\ntypedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params);\nGLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv;\n#define glGetUniformfv glad_glGetUniformfv\ntypedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params);\nGLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv;\n#define glGetUniformiv glad_glGetUniformiv\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params);\nGLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv;\n#define glGetVertexAttribdv glad_glGetVertexAttribdv\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params);\nGLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv;\n#define glGetVertexAttribfv glad_glGetVertexAttribfv\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params);\nGLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv;\n#define glGetVertexAttribiv glad_glGetVertexAttribiv\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer);\nGLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv;\n#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv\ntypedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program);\nGLAPI PFNGLISPROGRAMPROC glad_glIsProgram;\n#define glIsProgram glad_glIsProgram\ntypedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader);\nGLAPI PFNGLISSHADERPROC glad_glIsShader;\n#define glIsShader glad_glIsShader\ntypedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program);\nGLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram;\n#define glLinkProgram glad_glLinkProgram\ntypedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);\nGLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource;\n#define glShaderSource glad_glShaderSource\ntypedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program);\nGLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram;\n#define glUseProgram glad_glUseProgram\ntypedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0);\nGLAPI PFNGLUNIFORM1FPROC glad_glUniform1f;\n#define glUniform1f glad_glUniform1f\ntypedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1);\nGLAPI PFNGLUNIFORM2FPROC glad_glUniform2f;\n#define glUniform2f glad_glUniform2f\ntypedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\nGLAPI PFNGLUNIFORM3FPROC glad_glUniform3f;\n#define glUniform3f glad_glUniform3f\ntypedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\nGLAPI PFNGLUNIFORM4FPROC glad_glUniform4f;\n#define glUniform4f glad_glUniform4f\ntypedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0);\nGLAPI PFNGLUNIFORM1IPROC glad_glUniform1i;\n#define glUniform1i glad_glUniform1i\ntypedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1);\nGLAPI PFNGLUNIFORM2IPROC glad_glUniform2i;\n#define glUniform2i glad_glUniform2i\ntypedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2);\nGLAPI PFNGLUNIFORM3IPROC glad_glUniform3i;\n#define glUniform3i glad_glUniform3i\ntypedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\nGLAPI PFNGLUNIFORM4IPROC glad_glUniform4i;\n#define glUniform4i glad_glUniform4i\ntypedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv;\n#define glUniform1fv glad_glUniform1fv\ntypedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv;\n#define glUniform2fv glad_glUniform2fv\ntypedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv;\n#define glUniform3fv glad_glUniform3fv\ntypedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv;\n#define glUniform4fv glad_glUniform4fv\ntypedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv;\n#define glUniform1iv glad_glUniform1iv\ntypedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv;\n#define glUniform2iv glad_glUniform2iv\ntypedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv;\n#define glUniform3iv glad_glUniform3iv\ntypedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv;\n#define glUniform4iv glad_glUniform4iv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv;\n#define glUniformMatrix2fv glad_glUniformMatrix2fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv;\n#define glUniformMatrix3fv glad_glUniformMatrix3fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv;\n#define glUniformMatrix4fv glad_glUniformMatrix4fv\ntypedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program);\nGLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram;\n#define glValidateProgram glad_glValidateProgram\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x);\nGLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d;\n#define glVertexAttrib1d glad_glVertexAttrib1d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv;\n#define glVertexAttrib1dv glad_glVertexAttrib1dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x);\nGLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f;\n#define glVertexAttrib1f glad_glVertexAttrib1f\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v);\nGLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv;\n#define glVertexAttrib1fv glad_glVertexAttrib1fv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x);\nGLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s;\n#define glVertexAttrib1s glad_glVertexAttrib1s\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v);\nGLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv;\n#define glVertexAttrib1sv glad_glVertexAttrib1sv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y);\nGLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d;\n#define glVertexAttrib2d glad_glVertexAttrib2d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv;\n#define glVertexAttrib2dv glad_glVertexAttrib2dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y);\nGLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f;\n#define glVertexAttrib2f glad_glVertexAttrib2f\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v);\nGLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv;\n#define glVertexAttrib2fv glad_glVertexAttrib2fv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y);\nGLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s;\n#define glVertexAttrib2s glad_glVertexAttrib2s\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v);\nGLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv;\n#define glVertexAttrib2sv glad_glVertexAttrib2sv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d;\n#define glVertexAttrib3d glad_glVertexAttrib3d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv;\n#define glVertexAttrib3dv glad_glVertexAttrib3dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);\nGLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f;\n#define glVertexAttrib3f glad_glVertexAttrib3f\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v);\nGLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv;\n#define glVertexAttrib3fv glad_glVertexAttrib3fv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z);\nGLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s;\n#define glVertexAttrib3s glad_glVertexAttrib3s\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v);\nGLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv;\n#define glVertexAttrib3sv glad_glVertexAttrib3sv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v);\nGLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv;\n#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv;\n#define glVertexAttrib4Niv glad_glVertexAttrib4Niv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v);\nGLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv;\n#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\nGLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub;\n#define glVertexAttrib4Nub glad_glVertexAttrib4Nub\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v);\nGLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv;\n#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v);\nGLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv;\n#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v);\nGLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv;\n#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v);\nGLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv;\n#define glVertexAttrib4bv glad_glVertexAttrib4bv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d;\n#define glVertexAttrib4d glad_glVertexAttrib4d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv;\n#define glVertexAttrib4dv glad_glVertexAttrib4dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f;\n#define glVertexAttrib4f glad_glVertexAttrib4f\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v);\nGLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv;\n#define glVertexAttrib4fv glad_glVertexAttrib4fv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv;\n#define glVertexAttrib4iv glad_glVertexAttrib4iv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\nGLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s;\n#define glVertexAttrib4s glad_glVertexAttrib4s\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v);\nGLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv;\n#define glVertexAttrib4sv glad_glVertexAttrib4sv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v);\nGLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv;\n#define glVertexAttrib4ubv glad_glVertexAttrib4ubv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v);\nGLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv;\n#define glVertexAttrib4uiv glad_glVertexAttrib4uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v);\nGLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv;\n#define glVertexAttrib4usv glad_glVertexAttrib4usv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);\nGLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer;\n#define glVertexAttribPointer glad_glVertexAttribPointer\n#endif\n#ifndef GL_VERSION_2_1\n#define GL_VERSION_2_1 1\nGLAPI int GLAD_GL_VERSION_2_1;\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv;\n#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv;\n#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv;\n#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv;\n#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv;\n#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv;\n#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv\n#endif\n#ifndef GL_VERSION_3_0\n#define GL_VERSION_3_0 1\nGLAPI int GLAD_GL_VERSION_3_0;\ntypedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);\nGLAPI PFNGLCOLORMASKIPROC glad_glColorMaski;\n#define glColorMaski glad_glColorMaski\ntypedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data);\nGLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v;\n#define glGetBooleani_v glad_glGetBooleani_v\ntypedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data);\nGLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v;\n#define glGetIntegeri_v glad_glGetIntegeri_v\ntypedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index);\nGLAPI PFNGLENABLEIPROC glad_glEnablei;\n#define glEnablei glad_glEnablei\ntypedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index);\nGLAPI PFNGLDISABLEIPROC glad_glDisablei;\n#define glDisablei glad_glDisablei\ntypedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index);\nGLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi;\n#define glIsEnabledi glad_glIsEnabledi\ntypedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode);\nGLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback;\n#define glBeginTransformFeedback glad_glBeginTransformFeedback\ntypedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void);\nGLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback;\n#define glEndTransformFeedback glad_glEndTransformFeedback\ntypedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange;\n#define glBindBufferRange glad_glBindBufferRange\ntypedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer);\nGLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase;\n#define glBindBufferBase glad_glBindBufferBase\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);\nGLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings;\n#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\nGLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying;\n#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying\ntypedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp);\nGLAPI PFNGLCLAMPCOLORPROC glad_glClampColor;\n#define glClampColor glad_glClampColor\ntypedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode);\nGLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender;\n#define glBeginConditionalRender glad_glBeginConditionalRender\ntypedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void);\nGLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender;\n#define glEndConditionalRender glad_glEndConditionalRender\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);\nGLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer;\n#define glVertexAttribIPointer glad_glVertexAttribIPointer\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params);\nGLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv;\n#define glGetVertexAttribIiv glad_glGetVertexAttribIiv\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params);\nGLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv;\n#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x);\nGLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i;\n#define glVertexAttribI1i glad_glVertexAttribI1i\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y);\nGLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i;\n#define glVertexAttribI2i glad_glVertexAttribI2i\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z);\nGLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i;\n#define glVertexAttribI3i glad_glVertexAttribI3i\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w);\nGLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i;\n#define glVertexAttribI4i glad_glVertexAttribI4i\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x);\nGLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui;\n#define glVertexAttribI1ui glad_glVertexAttribI1ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y);\nGLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui;\n#define glVertexAttribI2ui glad_glVertexAttribI2ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z);\nGLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui;\n#define glVertexAttribI3ui glad_glVertexAttribI3ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\nGLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui;\n#define glVertexAttribI4ui glad_glVertexAttribI4ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv;\n#define glVertexAttribI1iv glad_glVertexAttribI1iv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv;\n#define glVertexAttribI2iv glad_glVertexAttribI2iv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv;\n#define glVertexAttribI3iv glad_glVertexAttribI3iv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv;\n#define glVertexAttribI4iv glad_glVertexAttribI4iv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v);\nGLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv;\n#define glVertexAttribI1uiv glad_glVertexAttribI1uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v);\nGLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv;\n#define glVertexAttribI2uiv glad_glVertexAttribI2uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v);\nGLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv;\n#define glVertexAttribI3uiv glad_glVertexAttribI3uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v);\nGLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv;\n#define glVertexAttribI4uiv glad_glVertexAttribI4uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v);\nGLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv;\n#define glVertexAttribI4bv glad_glVertexAttribI4bv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v);\nGLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv;\n#define glVertexAttribI4sv glad_glVertexAttribI4sv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v);\nGLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv;\n#define glVertexAttribI4ubv glad_glVertexAttribI4ubv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v);\nGLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv;\n#define glVertexAttribI4usv glad_glVertexAttribI4usv\ntypedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params);\nGLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv;\n#define glGetUniformuiv glad_glGetUniformuiv\ntypedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name);\nGLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation;\n#define glBindFragDataLocation glad_glBindFragDataLocation\ntypedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name);\nGLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation;\n#define glGetFragDataLocation glad_glGetFragDataLocation\ntypedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0);\nGLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui;\n#define glUniform1ui glad_glUniform1ui\ntypedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1);\nGLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui;\n#define glUniform2ui glad_glUniform2ui\ntypedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2);\nGLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui;\n#define glUniform3ui glad_glUniform3ui\ntypedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\nGLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui;\n#define glUniform4ui glad_glUniform4ui\ntypedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv;\n#define glUniform1uiv glad_glUniform1uiv\ntypedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv;\n#define glUniform2uiv glad_glUniform2uiv\ntypedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv;\n#define glUniform3uiv glad_glUniform3uiv\ntypedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv;\n#define glUniform4uiv glad_glUniform4uiv\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params);\nGLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv;\n#define glTexParameterIiv glad_glTexParameterIiv\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params);\nGLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv;\n#define glTexParameterIuiv glad_glTexParameterIuiv\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params);\nGLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv;\n#define glGetTexParameterIiv glad_glGetTexParameterIiv\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params);\nGLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv;\n#define glGetTexParameterIuiv glad_glGetTexParameterIuiv\ntypedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value);\nGLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv;\n#define glClearBufferiv glad_glClearBufferiv\ntypedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value);\nGLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv;\n#define glClearBufferuiv glad_glClearBufferuiv\ntypedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value);\nGLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv;\n#define glClearBufferfv glad_glClearBufferfv\ntypedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);\nGLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi;\n#define glClearBufferfi glad_glClearBufferfi\ntypedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index);\nGLAPI PFNGLGETSTRINGIPROC glad_glGetStringi;\n#define glGetStringi glad_glGetStringi\ntypedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer);\nGLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer;\n#define glIsRenderbuffer glad_glIsRenderbuffer\ntypedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer);\nGLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer;\n#define glBindRenderbuffer glad_glBindRenderbuffer\ntypedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers);\nGLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers;\n#define glDeleteRenderbuffers glad_glDeleteRenderbuffers\ntypedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);\nGLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers;\n#define glGenRenderbuffers glad_glGenRenderbuffers\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage;\n#define glRenderbufferStorage glad_glRenderbufferStorage\ntypedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);\nGLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv;\n#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv\ntypedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);\nGLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer;\n#define glIsFramebuffer glad_glIsFramebuffer\ntypedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer);\nGLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer;\n#define glBindFramebuffer glad_glBindFramebuffer\ntypedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers);\nGLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers;\n#define glDeleteFramebuffers glad_glDeleteFramebuffers\ntypedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);\nGLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers;\n#define glGenFramebuffers glad_glGenFramebuffers\ntypedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);\nGLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus;\n#define glCheckFramebufferStatus glad_glCheckFramebufferStatus\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D;\n#define glFramebufferTexture1D glad_glFramebufferTexture1D\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D;\n#define glFramebufferTexture2D glad_glFramebufferTexture2D\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\nGLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D;\n#define glFramebufferTexture3D glad_glFramebufferTexture3D\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\nGLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer;\n#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer\ntypedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params);\nGLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv;\n#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv\ntypedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target);\nGLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap;\n#define glGenerateMipmap glad_glGenerateMipmap\ntypedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\nGLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer;\n#define glBlitFramebuffer glad_glBlitFramebuffer\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample;\n#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\nGLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer;\n#define glFramebufferTextureLayer glad_glFramebufferTextureLayer\ntypedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);\nGLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange;\n#define glMapBufferRange glad_glMapBufferRange\ntypedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length);\nGLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange;\n#define glFlushMappedBufferRange glad_glFlushMappedBufferRange\ntypedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array);\nGLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray;\n#define glBindVertexArray glad_glBindVertexArray\ntypedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays);\nGLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays;\n#define glDeleteVertexArrays glad_glDeleteVertexArrays\ntypedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays);\nGLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays;\n#define glGenVertexArrays glad_glGenVertexArrays\ntypedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array);\nGLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray;\n#define glIsVertexArray glad_glIsVertexArray\n#endif\n#ifndef GL_VERSION_3_1\n#define GL_VERSION_3_1 1\nGLAPI int GLAD_GL_VERSION_3_1;\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);\nGLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced;\n#define glDrawArraysInstanced glad_glDrawArraysInstanced\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);\nGLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced;\n#define glDrawElementsInstanced glad_glDrawElementsInstanced\ntypedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer);\nGLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer;\n#define glTexBuffer glad_glTexBuffer\ntypedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index);\nGLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex;\n#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex\ntypedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\nGLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData;\n#define glCopyBufferSubData glad_glCopyBufferSubData\ntypedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);\nGLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices;\n#define glGetUniformIndices glad_glGetUniformIndices\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);\nGLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv;\n#define glGetActiveUniformsiv glad_glGetActiveUniformsiv\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);\nGLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName;\n#define glGetActiveUniformName glad_glGetActiveUniformName\ntypedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName);\nGLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex;\n#define glGetUniformBlockIndex glad_glGetUniformBlockIndex\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);\nGLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv;\n#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);\nGLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName;\n#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName\ntypedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);\nGLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding;\n#define glUniformBlockBinding glad_glUniformBlockBinding\n#endif\n#ifndef GL_VERSION_3_2\n#define GL_VERSION_3_2 1\nGLAPI int GLAD_GL_VERSION_3_2;\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);\nGLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex;\n#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);\nGLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex;\n#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);\nGLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex;\n#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);\nGLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex;\n#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex\ntypedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode);\nGLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex;\n#define glProvokingVertex glad_glProvokingVertex\ntypedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags);\nGLAPI PFNGLFENCESYNCPROC glad_glFenceSync;\n#define glFenceSync glad_glFenceSync\ntypedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync);\nGLAPI PFNGLISSYNCPROC glad_glIsSync;\n#define glIsSync glad_glIsSync\ntypedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync);\nGLAPI PFNGLDELETESYNCPROC glad_glDeleteSync;\n#define glDeleteSync glad_glDeleteSync\ntypedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);\nGLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync;\n#define glClientWaitSync glad_glClientWaitSync\ntypedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);\nGLAPI PFNGLWAITSYNCPROC glad_glWaitSync;\n#define glWaitSync glad_glWaitSync\ntypedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data);\nGLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v;\n#define glGetInteger64v glad_glGetInteger64v\ntypedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);\nGLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv;\n#define glGetSynciv glad_glGetSynciv\ntypedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data);\nGLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v;\n#define glGetInteger64i_v glad_glGetInteger64i_v\ntypedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params);\nGLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v;\n#define glGetBufferParameteri64v glad_glGetBufferParameteri64v\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level);\nGLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture;\n#define glFramebufferTexture glad_glFramebufferTexture\ntypedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\nGLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample;\n#define glTexImage2DMultisample glad_glTexImage2DMultisample\ntypedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\nGLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample;\n#define glTexImage3DMultisample glad_glTexImage3DMultisample\ntypedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val);\nGLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv;\n#define glGetMultisamplefv glad_glGetMultisamplefv\ntypedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask);\nGLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski;\n#define glSampleMaski glad_glSampleMaski\n#endif\n#ifndef GL_VERSION_3_3\n#define GL_VERSION_3_3 1\nGLAPI int GLAD_GL_VERSION_3_3;\ntypedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);\nGLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed;\n#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed\ntypedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name);\nGLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex;\n#define glGetFragDataIndex glad_glGetFragDataIndex\ntypedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers);\nGLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers;\n#define glGenSamplers glad_glGenSamplers\ntypedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers);\nGLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers;\n#define glDeleteSamplers glad_glDeleteSamplers\ntypedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler);\nGLAPI PFNGLISSAMPLERPROC glad_glIsSampler;\n#define glIsSampler glad_glIsSampler\ntypedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler);\nGLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler;\n#define glBindSampler glad_glBindSampler\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param);\nGLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri;\n#define glSamplerParameteri glad_glSamplerParameteri\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param);\nGLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv;\n#define glSamplerParameteriv glad_glSamplerParameteriv\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param);\nGLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf;\n#define glSamplerParameterf glad_glSamplerParameterf\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param);\nGLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv;\n#define glSamplerParameterfv glad_glSamplerParameterfv\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param);\nGLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv;\n#define glSamplerParameterIiv glad_glSamplerParameterIiv\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param);\nGLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv;\n#define glSamplerParameterIuiv glad_glSamplerParameterIuiv\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params);\nGLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv;\n#define glGetSamplerParameteriv glad_glGetSamplerParameteriv\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params);\nGLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv;\n#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params);\nGLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv;\n#define glGetSamplerParameterfv glad_glGetSamplerParameterfv\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params);\nGLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv;\n#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv\ntypedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target);\nGLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter;\n#define glQueryCounter glad_glQueryCounter\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params);\nGLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v;\n#define glGetQueryObjecti64v glad_glGetQueryObjecti64v\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params);\nGLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v;\n#define glGetQueryObjectui64v glad_glGetQueryObjectui64v\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor);\nGLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor;\n#define glVertexAttribDivisor glad_glVertexAttribDivisor\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui;\n#define glVertexAttribP1ui glad_glVertexAttribP1ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv;\n#define glVertexAttribP1uiv glad_glVertexAttribP1uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui;\n#define glVertexAttribP2ui glad_glVertexAttribP2ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv;\n#define glVertexAttribP2uiv glad_glVertexAttribP2uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui;\n#define glVertexAttribP3ui glad_glVertexAttribP3ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv;\n#define glVertexAttribP3uiv glad_glVertexAttribP3uiv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui;\n#define glVertexAttribP4ui glad_glVertexAttribP4ui\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv;\n#define glVertexAttribP4uiv glad_glVertexAttribP4uiv\ntypedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value);\nGLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui;\n#define glVertexP2ui glad_glVertexP2ui\ntypedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value);\nGLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv;\n#define glVertexP2uiv glad_glVertexP2uiv\ntypedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value);\nGLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui;\n#define glVertexP3ui glad_glVertexP3ui\ntypedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value);\nGLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv;\n#define glVertexP3uiv glad_glVertexP3uiv\ntypedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value);\nGLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui;\n#define glVertexP4ui glad_glVertexP4ui\ntypedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value);\nGLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv;\n#define glVertexP4uiv glad_glVertexP4uiv\ntypedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords);\nGLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui;\n#define glTexCoordP1ui glad_glTexCoordP1ui\ntypedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords);\nGLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv;\n#define glTexCoordP1uiv glad_glTexCoordP1uiv\ntypedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords);\nGLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui;\n#define glTexCoordP2ui glad_glTexCoordP2ui\ntypedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords);\nGLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv;\n#define glTexCoordP2uiv glad_glTexCoordP2uiv\ntypedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords);\nGLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui;\n#define glTexCoordP3ui glad_glTexCoordP3ui\ntypedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords);\nGLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv;\n#define glTexCoordP3uiv glad_glTexCoordP3uiv\ntypedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords);\nGLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui;\n#define glTexCoordP4ui glad_glTexCoordP4ui\ntypedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords);\nGLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv;\n#define glTexCoordP4uiv glad_glTexCoordP4uiv\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords);\nGLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui;\n#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);\nGLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv;\n#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords);\nGLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui;\n#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);\nGLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv;\n#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords);\nGLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui;\n#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);\nGLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv;\n#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords);\nGLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui;\n#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);\nGLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv;\n#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv\ntypedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords);\nGLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui;\n#define glNormalP3ui glad_glNormalP3ui\ntypedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords);\nGLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv;\n#define glNormalP3uiv glad_glNormalP3uiv\ntypedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color);\nGLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui;\n#define glColorP3ui glad_glColorP3ui\ntypedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color);\nGLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv;\n#define glColorP3uiv glad_glColorP3uiv\ntypedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color);\nGLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui;\n#define glColorP4ui glad_glColorP4ui\ntypedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color);\nGLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv;\n#define glColorP4uiv glad_glColorP4uiv\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color);\nGLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui;\n#define glSecondaryColorP3ui glad_glSecondaryColorP3ui\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color);\nGLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv;\n#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv\n#endif\n#ifndef GL_VERSION_4_0\n#define GL_VERSION_4_0 1\nGLAPI int GLAD_GL_VERSION_4_0;\ntypedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC)(GLfloat value);\nGLAPI PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading;\n#define glMinSampleShading glad_glMinSampleShading\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode);\nGLAPI PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi;\n#define glBlendEquationi glad_glBlendEquationi\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha);\nGLAPI PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei;\n#define glBlendEquationSeparatei glad_glBlendEquationSeparatei\ntypedef void (APIENTRYP PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst);\nGLAPI PFNGLBLENDFUNCIPROC glad_glBlendFunci;\n#define glBlendFunci glad_glBlendFunci\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\nGLAPI PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei;\n#define glBlendFuncSeparatei glad_glBlendFuncSeparatei\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect);\nGLAPI PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect;\n#define glDrawArraysIndirect glad_glDrawArraysIndirect\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect);\nGLAPI PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect;\n#define glDrawElementsIndirect glad_glDrawElementsIndirect\ntypedef void (APIENTRYP PFNGLUNIFORM1DPROC)(GLint location, GLdouble x);\nGLAPI PFNGLUNIFORM1DPROC glad_glUniform1d;\n#define glUniform1d glad_glUniform1d\ntypedef void (APIENTRYP PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y);\nGLAPI PFNGLUNIFORM2DPROC glad_glUniform2d;\n#define glUniform2d glad_glUniform2d\ntypedef void (APIENTRYP PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z);\nGLAPI PFNGLUNIFORM3DPROC glad_glUniform3d;\n#define glUniform3d glad_glUniform3d\ntypedef void (APIENTRYP PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI PFNGLUNIFORM4DPROC glad_glUniform4d;\n#define glUniform4d glad_glUniform4d\ntypedef void (APIENTRYP PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLUNIFORM1DVPROC glad_glUniform1dv;\n#define glUniform1dv glad_glUniform1dv\ntypedef void (APIENTRYP PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLUNIFORM2DVPROC glad_glUniform2dv;\n#define glUniform2dv glad_glUniform2dv\ntypedef void (APIENTRYP PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLUNIFORM3DVPROC glad_glUniform3dv;\n#define glUniform3dv glad_glUniform3dv\ntypedef void (APIENTRYP PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLUNIFORM4DVPROC glad_glUniform4dv;\n#define glUniform4dv glad_glUniform4dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv;\n#define glUniformMatrix2dv glad_glUniformMatrix2dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv;\n#define glUniformMatrix3dv glad_glUniformMatrix3dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv;\n#define glUniformMatrix4dv glad_glUniformMatrix4dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv;\n#define glUniformMatrix2x3dv glad_glUniformMatrix2x3dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv;\n#define glUniformMatrix2x4dv glad_glUniformMatrix2x4dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv;\n#define glUniformMatrix3x2dv glad_glUniformMatrix3x2dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv;\n#define glUniformMatrix3x4dv glad_glUniformMatrix3x4dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv;\n#define glUniformMatrix4x2dv glad_glUniformMatrix4x2dv\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv;\n#define glUniformMatrix4x3dv glad_glUniformMatrix4x3dv\ntypedef void (APIENTRYP PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble *params);\nGLAPI PFNGLGETUNIFORMDVPROC glad_glGetUniformdv;\n#define glGetUniformdv glad_glGetUniformdv\ntypedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar *name);\nGLAPI PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation;\n#define glGetSubroutineUniformLocation glad_glGetSubroutineUniformLocation\ntypedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar *name);\nGLAPI PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex;\n#define glGetSubroutineIndex glad_glGetSubroutineIndex\ntypedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);\nGLAPI PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv;\n#define glGetActiveSubroutineUniformiv glad_glGetActiveSubroutineUniformiv\ntypedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);\nGLAPI PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName;\n#define glGetActiveSubroutineUniformName glad_glGetActiveSubroutineUniformName\ntypedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);\nGLAPI PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName;\n#define glGetActiveSubroutineName glad_glGetActiveSubroutineName\ntypedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint *indices);\nGLAPI PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv;\n#define glUniformSubroutinesuiv glad_glUniformSubroutinesuiv\ntypedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint *params);\nGLAPI PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv;\n#define glGetUniformSubroutineuiv glad_glGetUniformSubroutineuiv\ntypedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint *values);\nGLAPI PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv;\n#define glGetProgramStageiv glad_glGetProgramStageiv\ntypedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value);\nGLAPI PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri;\n#define glPatchParameteri glad_glPatchParameteri\ntypedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat *values);\nGLAPI PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv;\n#define glPatchParameterfv glad_glPatchParameterfv\ntypedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id);\nGLAPI PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback;\n#define glBindTransformFeedback glad_glBindTransformFeedback\ntypedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids);\nGLAPI PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks;\n#define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks\ntypedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids);\nGLAPI PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks;\n#define glGenTransformFeedbacks glad_glGenTransformFeedbacks\ntypedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id);\nGLAPI PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback;\n#define glIsTransformFeedback glad_glIsTransformFeedback\ntypedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void);\nGLAPI PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback;\n#define glPauseTransformFeedback glad_glPauseTransformFeedback\ntypedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void);\nGLAPI PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback;\n#define glResumeTransformFeedback glad_glResumeTransformFeedback\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id);\nGLAPI PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback;\n#define glDrawTransformFeedback glad_glDrawTransformFeedback\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream);\nGLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream;\n#define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream\ntypedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id);\nGLAPI PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed;\n#define glBeginQueryIndexed glad_glBeginQueryIndexed\ntypedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index);\nGLAPI PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed;\n#define glEndQueryIndexed glad_glEndQueryIndexed\ntypedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint *params);\nGLAPI PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv;\n#define glGetQueryIndexediv glad_glGetQueryIndexediv\n#endif\n#ifndef GL_VERSION_4_1\n#define GL_VERSION_4_1 1\nGLAPI int GLAD_GL_VERSION_4_1;\ntypedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(void);\nGLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler;\n#define glReleaseShaderCompiler glad_glReleaseShaderCompiler\ntypedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);\nGLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary;\n#define glShaderBinary glad_glShaderBinary\ntypedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);\nGLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat;\n#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat\ntypedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f);\nGLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef;\n#define glDepthRangef glad_glDepthRangef\ntypedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d);\nGLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf;\n#define glClearDepthf glad_glClearDepthf\ntypedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);\nGLAPI PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary;\n#define glGetProgramBinary glad_glGetProgramBinary\ntypedef void (APIENTRYP PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);\nGLAPI PFNGLPROGRAMBINARYPROC glad_glProgramBinary;\n#define glProgramBinary glad_glProgramBinary\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value);\nGLAPI PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri;\n#define glProgramParameteri glad_glProgramParameteri\ntypedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program);\nGLAPI PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages;\n#define glUseProgramStages glad_glUseProgramStages\ntypedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program);\nGLAPI PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram;\n#define glActiveShaderProgram glad_glActiveShaderProgram\ntypedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const*strings);\nGLAPI PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv;\n#define glCreateShaderProgramv glad_glCreateShaderProgramv\ntypedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline);\nGLAPI PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline;\n#define glBindProgramPipeline glad_glBindProgramPipeline\ntypedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint *pipelines);\nGLAPI PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines;\n#define glDeleteProgramPipelines glad_glDeleteProgramPipelines\ntypedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines);\nGLAPI PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines;\n#define glGenProgramPipelines glad_glGenProgramPipelines\ntypedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline);\nGLAPI PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline;\n#define glIsProgramPipeline glad_glIsProgramPipeline\ntypedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint *params);\nGLAPI PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv;\n#define glGetProgramPipelineiv glad_glGetProgramPipelineiv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0);\nGLAPI PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i;\n#define glProgramUniform1i glad_glProgramUniform1i\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv;\n#define glProgramUniform1iv glad_glProgramUniform1iv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0);\nGLAPI PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f;\n#define glProgramUniform1f glad_glProgramUniform1f\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv;\n#define glProgramUniform1fv glad_glProgramUniform1fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0);\nGLAPI PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d;\n#define glProgramUniform1d glad_glProgramUniform1d\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv;\n#define glProgramUniform1dv glad_glProgramUniform1dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0);\nGLAPI PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui;\n#define glProgramUniform1ui glad_glProgramUniform1ui\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv;\n#define glProgramUniform1uiv glad_glProgramUniform1uiv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1);\nGLAPI PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i;\n#define glProgramUniform2i glad_glProgramUniform2i\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv;\n#define glProgramUniform2iv glad_glProgramUniform2iv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1);\nGLAPI PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f;\n#define glProgramUniform2f glad_glProgramUniform2f\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv;\n#define glProgramUniform2fv glad_glProgramUniform2fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1);\nGLAPI PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d;\n#define glProgramUniform2d glad_glProgramUniform2d\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv;\n#define glProgramUniform2dv glad_glProgramUniform2dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1);\nGLAPI PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui;\n#define glProgramUniform2ui glad_glProgramUniform2ui\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv;\n#define glProgramUniform2uiv glad_glProgramUniform2uiv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);\nGLAPI PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i;\n#define glProgramUniform3i glad_glProgramUniform3i\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv;\n#define glProgramUniform3iv glad_glProgramUniform3iv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\nGLAPI PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f;\n#define glProgramUniform3f glad_glProgramUniform3f\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv;\n#define glProgramUniform3fv glad_glProgramUniform3fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);\nGLAPI PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d;\n#define glProgramUniform3d glad_glProgramUniform3d\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv;\n#define glProgramUniform3dv glad_glProgramUniform3dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);\nGLAPI PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui;\n#define glProgramUniform3ui glad_glProgramUniform3ui\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv;\n#define glProgramUniform3uiv glad_glProgramUniform3uiv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\nGLAPI PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i;\n#define glProgramUniform4i glad_glProgramUniform4i\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv;\n#define glProgramUniform4iv glad_glProgramUniform4iv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\nGLAPI PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f;\n#define glProgramUniform4f glad_glProgramUniform4f\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv;\n#define glProgramUniform4fv glad_glProgramUniform4fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);\nGLAPI PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d;\n#define glProgramUniform4d glad_glProgramUniform4d\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv;\n#define glProgramUniform4dv glad_glProgramUniform4dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\nGLAPI PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui;\n#define glProgramUniform4ui glad_glProgramUniform4ui\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv;\n#define glProgramUniform4uiv glad_glProgramUniform4uiv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv;\n#define glProgramUniformMatrix2fv glad_glProgramUniformMatrix2fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv;\n#define glProgramUniformMatrix3fv glad_glProgramUniformMatrix3fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv;\n#define glProgramUniformMatrix4fv glad_glProgramUniformMatrix4fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv;\n#define glProgramUniformMatrix2dv glad_glProgramUniformMatrix2dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv;\n#define glProgramUniformMatrix3dv glad_glProgramUniformMatrix3dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv;\n#define glProgramUniformMatrix4dv glad_glProgramUniformMatrix4dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv;\n#define glProgramUniformMatrix2x3fv glad_glProgramUniformMatrix2x3fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv;\n#define glProgramUniformMatrix3x2fv glad_glProgramUniformMatrix3x2fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv;\n#define glProgramUniformMatrix2x4fv glad_glProgramUniformMatrix2x4fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv;\n#define glProgramUniformMatrix4x2fv glad_glProgramUniformMatrix4x2fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv;\n#define glProgramUniformMatrix3x4fv glad_glProgramUniformMatrix3x4fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv;\n#define glProgramUniformMatrix4x3fv glad_glProgramUniformMatrix4x3fv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv;\n#define glProgramUniformMatrix2x3dv glad_glProgramUniformMatrix2x3dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv;\n#define glProgramUniformMatrix3x2dv glad_glProgramUniformMatrix3x2dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv;\n#define glProgramUniformMatrix2x4dv glad_glProgramUniformMatrix2x4dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv;\n#define glProgramUniformMatrix4x2dv glad_glProgramUniformMatrix4x2dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv;\n#define glProgramUniformMatrix3x4dv glad_glProgramUniformMatrix3x4dv\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv;\n#define glProgramUniformMatrix4x3dv glad_glProgramUniformMatrix4x3dv\ntypedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline);\nGLAPI PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline;\n#define glValidateProgramPipeline glad_glValidateProgramPipeline\ntypedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\nGLAPI PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog;\n#define glGetProgramPipelineInfoLog glad_glGetProgramPipelineInfoLog\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x);\nGLAPI PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d;\n#define glVertexAttribL1d glad_glVertexAttribL1d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y);\nGLAPI PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d;\n#define glVertexAttribL2d glad_glVertexAttribL2d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d;\n#define glVertexAttribL3d glad_glVertexAttribL3d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d;\n#define glVertexAttribL4d glad_glVertexAttribL4d\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv;\n#define glVertexAttribL1dv glad_glVertexAttribL1dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv;\n#define glVertexAttribL2dv glad_glVertexAttribL2dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv;\n#define glVertexAttribL3dv glad_glVertexAttribL3dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble *v);\nGLAPI PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv;\n#define glVertexAttribL4dv glad_glVertexAttribL4dv\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);\nGLAPI PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer;\n#define glVertexAttribLPointer glad_glVertexAttribLPointer\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble *params);\nGLAPI PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv;\n#define glGetVertexAttribLdv glad_glGetVertexAttribLdv\ntypedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat *v);\nGLAPI PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv;\n#define glViewportArrayv glad_glViewportArrayv\ntypedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);\nGLAPI PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf;\n#define glViewportIndexedf glad_glViewportIndexedf\ntypedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat *v);\nGLAPI PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv;\n#define glViewportIndexedfv glad_glViewportIndexedfv\ntypedef void (APIENTRYP PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint *v);\nGLAPI PFNGLSCISSORARRAYVPROC glad_glScissorArrayv;\n#define glScissorArrayv glad_glScissorArrayv\ntypedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);\nGLAPI PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed;\n#define glScissorIndexed glad_glScissorIndexed\ntypedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint *v);\nGLAPI PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv;\n#define glScissorIndexedv glad_glScissorIndexedv\ntypedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble *v);\nGLAPI PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv;\n#define glDepthRangeArrayv glad_glDepthRangeArrayv\ntypedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f);\nGLAPI PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed;\n#define glDepthRangeIndexed glad_glDepthRangeIndexed\ntypedef void (APIENTRYP PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data);\nGLAPI PFNGLGETFLOATI_VPROC glad_glGetFloati_v;\n#define glGetFloati_v glad_glGetFloati_v\ntypedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble *data);\nGLAPI PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v;\n#define glGetDoublei_v glad_glGetDoublei_v\n#endif\n#ifndef GL_VERSION_4_2\n#define GL_VERSION_4_2 1\nGLAPI int GLAD_GL_VERSION_4_2;\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);\nGLAPI PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance;\n#define glDrawArraysInstancedBaseInstance glad_glDrawArraysInstancedBaseInstance\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);\nGLAPI PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance;\n#define glDrawElementsInstancedBaseInstance glad_glDrawElementsInstancedBaseInstance\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);\nGLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance;\n#define glDrawElementsInstancedBaseVertexBaseInstance glad_glDrawElementsInstancedBaseVertexBaseInstance\ntypedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);\nGLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ;\n#define glGetInternalformativ glad_glGetInternalformativ\ntypedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);\nGLAPI PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv;\n#define glGetActiveAtomicCounterBufferiv glad_glGetActiveAtomicCounterBufferiv\ntypedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);\nGLAPI PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture;\n#define glBindImageTexture glad_glBindImageTexture\ntypedef void (APIENTRYP PFNGLMEMORYBARRIERPROC)(GLbitfield barriers);\nGLAPI PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier;\n#define glMemoryBarrier glad_glMemoryBarrier\ntypedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\nGLAPI PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D;\n#define glTexStorage1D glad_glTexStorage1D\ntypedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D;\n#define glTexStorage2D glad_glTexStorage2D\ntypedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);\nGLAPI PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D;\n#define glTexStorage3D glad_glTexStorage3D\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei instancecount);\nGLAPI PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced;\n#define glDrawTransformFeedbackInstanced glad_glDrawTransformFeedbackInstanced\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);\nGLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced;\n#define glDrawTransformFeedbackStreamInstanced glad_glDrawTransformFeedbackStreamInstanced\n#endif\n#ifndef GL_VERSION_4_3\n#define GL_VERSION_4_3 1\nGLAPI int GLAD_GL_VERSION_4_3;\ntypedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);\nGLAPI PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData;\n#define glClearBufferData glad_glClearBufferData\ntypedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);\nGLAPI PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData;\n#define glClearBufferSubData glad_glClearBufferSubData\ntypedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);\nGLAPI PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute;\n#define glDispatchCompute glad_glDispatchCompute\ntypedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect);\nGLAPI PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect;\n#define glDispatchComputeIndirect glad_glDispatchComputeIndirect\ntypedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);\nGLAPI PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData;\n#define glCopyImageSubData glad_glCopyImageSubData\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param);\nGLAPI PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri;\n#define glFramebufferParameteri glad_glFramebufferParameteri\ntypedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);\nGLAPI PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv;\n#define glGetFramebufferParameteriv glad_glGetFramebufferParameteriv\ntypedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);\nGLAPI PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v;\n#define glGetInternalformati64v glad_glGetInternalformati64v\ntypedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);\nGLAPI PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage;\n#define glInvalidateTexSubImage glad_glInvalidateTexSubImage\ntypedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level);\nGLAPI PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage;\n#define glInvalidateTexImage glad_glInvalidateTexImage\ntypedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length);\nGLAPI PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData;\n#define glInvalidateBufferSubData glad_glInvalidateBufferSubData\ntypedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer);\nGLAPI PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData;\n#define glInvalidateBufferData glad_glInvalidateBufferData\ntypedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments);\nGLAPI PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer;\n#define glInvalidateFramebuffer glad_glInvalidateFramebuffer\ntypedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer;\n#define glInvalidateSubFramebuffer glad_glInvalidateSubFramebuffer\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);\nGLAPI PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect;\n#define glMultiDrawArraysIndirect glad_glMultiDrawArraysIndirect\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);\nGLAPI PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect;\n#define glMultiDrawElementsIndirect glad_glMultiDrawElementsIndirect\ntypedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint *params);\nGLAPI PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv;\n#define glGetProgramInterfaceiv glad_glGetProgramInterfaceiv\ntypedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name);\nGLAPI PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex;\n#define glGetProgramResourceIndex glad_glGetProgramResourceIndex\ntypedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);\nGLAPI PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName;\n#define glGetProgramResourceName glad_glGetProgramResourceName\ntypedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);\nGLAPI PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv;\n#define glGetProgramResourceiv glad_glGetProgramResourceiv\ntypedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar *name);\nGLAPI PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation;\n#define glGetProgramResourceLocation glad_glGetProgramResourceLocation\ntypedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name);\nGLAPI PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex;\n#define glGetProgramResourceLocationIndex glad_glGetProgramResourceLocationIndex\ntypedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);\nGLAPI PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding;\n#define glShaderStorageBlockBinding glad_glShaderStorageBlockBinding\ntypedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange;\n#define glTexBufferRange glad_glTexBufferRange\ntypedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\nGLAPI PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample;\n#define glTexStorage2DMultisample glad_glTexStorage2DMultisample\ntypedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\nGLAPI PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample;\n#define glTexStorage3DMultisample glad_glTexStorage3DMultisample\ntypedef void (APIENTRYP PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);\nGLAPI PFNGLTEXTUREVIEWPROC glad_glTextureView;\n#define glTextureView glad_glTextureView\ntypedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);\nGLAPI PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer;\n#define glBindVertexBuffer glad_glBindVertexBuffer\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);\nGLAPI PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat;\n#define glVertexAttribFormat glad_glVertexAttribFormat\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat;\n#define glVertexAttribIFormat glad_glVertexAttribIFormat\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat;\n#define glVertexAttribLFormat glad_glVertexAttribLFormat\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex);\nGLAPI PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding;\n#define glVertexAttribBinding glad_glVertexAttribBinding\ntypedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor);\nGLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor;\n#define glVertexBindingDivisor glad_glVertexBindingDivisor\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\nGLAPI PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl;\n#define glDebugMessageControl glad_glDebugMessageControl\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);\nGLAPI PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert;\n#define glDebugMessageInsert glad_glDebugMessageInsert\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void *userParam);\nGLAPI PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback;\n#define glDebugMessageCallback glad_glDebugMessageCallback\ntypedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);\nGLAPI PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog;\n#define glGetDebugMessageLog glad_glGetDebugMessageLog\ntypedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar *message);\nGLAPI PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup;\n#define glPushDebugGroup glad_glPushDebugGroup\ntypedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC)(void);\nGLAPI PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup;\n#define glPopDebugGroup glad_glPopDebugGroup\ntypedef void (APIENTRYP PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);\nGLAPI PFNGLOBJECTLABELPROC glad_glObjectLabel;\n#define glObjectLabel glad_glObjectLabel\ntypedef void (APIENTRYP PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);\nGLAPI PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel;\n#define glGetObjectLabel glad_glGetObjectLabel\ntypedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC)(const void *ptr, GLsizei length, const GLchar *label);\nGLAPI PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel;\n#define glObjectPtrLabel glad_glObjectPtrLabel\ntypedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);\nGLAPI PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel;\n#define glGetObjectPtrLabel glad_glGetObjectPtrLabel\ntypedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params);\nGLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv;\n#define glGetPointerv glad_glGetPointerv\n#endif\n#ifndef GL_VERSION_4_4\n#define GL_VERSION_4_4 1\nGLAPI int GLAD_GL_VERSION_4_4;\ntypedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);\nGLAPI PFNGLBUFFERSTORAGEPROC glad_glBufferStorage;\n#define glBufferStorage glad_glBufferStorage\ntypedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void *data);\nGLAPI PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage;\n#define glClearTexImage glad_glClearTexImage\ntypedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);\nGLAPI PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage;\n#define glClearTexSubImage glad_glClearTexSubImage\ntypedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint *buffers);\nGLAPI PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase;\n#define glBindBuffersBase glad_glBindBuffersBase\ntypedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);\nGLAPI PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange;\n#define glBindBuffersRange glad_glBindBuffersRange\ntypedef void (APIENTRYP PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, const GLuint *textures);\nGLAPI PFNGLBINDTEXTURESPROC glad_glBindTextures;\n#define glBindTextures glad_glBindTextures\ntypedef void (APIENTRYP PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, const GLuint *samplers);\nGLAPI PFNGLBINDSAMPLERSPROC glad_glBindSamplers;\n#define glBindSamplers glad_glBindSamplers\ntypedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, const GLuint *textures);\nGLAPI PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures;\n#define glBindImageTextures glad_glBindImageTextures\ntypedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);\nGLAPI PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers;\n#define glBindVertexBuffers glad_glBindVertexBuffers\n#endif\n#ifndef GL_VERSION_4_5\n#define GL_VERSION_4_5 1\nGLAPI int GLAD_GL_VERSION_4_5;\ntypedef void (APIENTRYP PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth);\nGLAPI PFNGLCLIPCONTROLPROC glad_glClipControl;\n#define glClipControl glad_glClipControl\ntypedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids);\nGLAPI PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks;\n#define glCreateTransformFeedbacks glad_glCreateTransformFeedbacks\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, GLuint buffer);\nGLAPI PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase;\n#define glTransformFeedbackBufferBase glad_glTransformFeedbackBufferBase\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange;\n#define glTransformFeedbackBufferRange glad_glTransformFeedbackBufferRange\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint *param);\nGLAPI PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv;\n#define glGetTransformFeedbackiv glad_glGetTransformFeedbackiv\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint *param);\nGLAPI PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v;\n#define glGetTransformFeedbacki_v glad_glGetTransformFeedbacki_v\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint64 *param);\nGLAPI PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v;\n#define glGetTransformFeedbacki64_v glad_glGetTransformFeedbacki64_v\ntypedef void (APIENTRYP PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint *buffers);\nGLAPI PFNGLCREATEBUFFERSPROC glad_glCreateBuffers;\n#define glCreateBuffers glad_glCreateBuffers\ntypedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);\nGLAPI PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage;\n#define glNamedBufferStorage glad_glNamedBufferStorage\ntypedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);\nGLAPI PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData;\n#define glNamedBufferData glad_glNamedBufferData\ntypedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);\nGLAPI PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData;\n#define glNamedBufferSubData glad_glNamedBufferSubData\ntypedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\nGLAPI PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData;\n#define glCopyNamedBufferSubData glad_glCopyNamedBufferSubData\ntypedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);\nGLAPI PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData;\n#define glClearNamedBufferData glad_glClearNamedBufferData\ntypedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);\nGLAPI PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData;\n#define glClearNamedBufferSubData glad_glClearNamedBufferSubData\ntypedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access);\nGLAPI PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer;\n#define glMapNamedBuffer glad_glMapNamedBuffer\ntypedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);\nGLAPI PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange;\n#define glMapNamedBufferRange glad_glMapNamedBufferRange\ntypedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer);\nGLAPI PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer;\n#define glUnmapNamedBuffer glad_glUnmapNamedBuffer\ntypedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length);\nGLAPI PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange;\n#define glFlushMappedNamedBufferRange glad_glFlushMappedNamedBufferRange\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, GLint *params);\nGLAPI PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv;\n#define glGetNamedBufferParameteriv glad_glGetNamedBufferParameteriv\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, GLint64 *params);\nGLAPI PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v;\n#define glGetNamedBufferParameteri64v glad_glGetNamedBufferParameteri64v\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, void **params);\nGLAPI PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv;\n#define glGetNamedBufferPointerv glad_glGetNamedBufferPointerv\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);\nGLAPI PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData;\n#define glGetNamedBufferSubData glad_glGetNamedBufferSubData\ntypedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);\nGLAPI PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers;\n#define glCreateFramebuffers glad_glCreateFramebuffers\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\nGLAPI PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer;\n#define glNamedFramebufferRenderbuffer glad_glNamedFramebufferRenderbuffer\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, GLint param);\nGLAPI PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri;\n#define glNamedFramebufferParameteri glad_glNamedFramebufferParameteri\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);\nGLAPI PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture;\n#define glNamedFramebufferTexture glad_glNamedFramebufferTexture\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);\nGLAPI PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer;\n#define glNamedFramebufferTextureLayer glad_glNamedFramebufferTextureLayer\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf);\nGLAPI PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer;\n#define glNamedFramebufferDrawBuffer glad_glNamedFramebufferDrawBuffer\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, const GLenum *bufs);\nGLAPI PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers;\n#define glNamedFramebufferDrawBuffers glad_glNamedFramebufferDrawBuffers\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src);\nGLAPI PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer;\n#define glNamedFramebufferReadBuffer glad_glNamedFramebufferReadBuffer\ntypedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);\nGLAPI PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData;\n#define glInvalidateNamedFramebufferData glad_glInvalidateNamedFramebufferData\ntypedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData;\n#define glInvalidateNamedFramebufferSubData glad_glInvalidateNamedFramebufferSubData\ntypedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);\nGLAPI PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv;\n#define glClearNamedFramebufferiv glad_glClearNamedFramebufferiv\ntypedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);\nGLAPI PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv;\n#define glClearNamedFramebufferuiv glad_glClearNamedFramebufferuiv\ntypedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);\nGLAPI PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv;\n#define glClearNamedFramebufferfv glad_glClearNamedFramebufferfv\ntypedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);\nGLAPI PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi;\n#define glClearNamedFramebufferfi glad_glClearNamedFramebufferfi\ntypedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\nGLAPI PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer;\n#define glBlitNamedFramebuffer glad_glBlitNamedFramebuffer\ntypedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, GLenum target);\nGLAPI PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus;\n#define glCheckNamedFramebufferStatus glad_glCheckNamedFramebufferStatus\ntypedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, GLenum pname, GLint *param);\nGLAPI PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv;\n#define glGetNamedFramebufferParameteriv glad_glGetNamedFramebufferParameteriv\ntypedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);\nGLAPI PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv;\n#define glGetNamedFramebufferAttachmentParameteriv glad_glGetNamedFramebufferAttachmentParameteriv\ntypedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);\nGLAPI PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers;\n#define glCreateRenderbuffers glad_glCreateRenderbuffers\ntypedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage;\n#define glNamedRenderbufferStorage glad_glNamedRenderbufferStorage\ntypedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample;\n#define glNamedRenderbufferStorageMultisample glad_glNamedRenderbufferStorageMultisample\ntypedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, GLenum pname, GLint *params);\nGLAPI PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv;\n#define glGetNamedRenderbufferParameteriv glad_glGetNamedRenderbufferParameteriv\ntypedef void (APIENTRYP PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint *textures);\nGLAPI PFNGLCREATETEXTURESPROC glad_glCreateTextures;\n#define glCreateTextures glad_glCreateTextures\ntypedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, GLuint buffer);\nGLAPI PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer;\n#define glTextureBuffer glad_glTextureBuffer\ntypedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange;\n#define glTextureBufferRange glad_glTextureBufferRange\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);\nGLAPI PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D;\n#define glTextureStorage1D glad_glTextureStorage1D\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D;\n#define glTextureStorage2D glad_glTextureStorage2D\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);\nGLAPI PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D;\n#define glTextureStorage3D glad_glTextureStorage3D\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\nGLAPI PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample;\n#define glTextureStorage2DMultisample glad_glTextureStorage2DMultisample\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\nGLAPI PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample;\n#define glTextureStorage3DMultisample glad_glTextureStorage3DMultisample\ntypedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D;\n#define glTextureSubImage1D glad_glTextureSubImage1D\ntypedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D;\n#define glTextureSubImage2D glad_glTextureSubImage2D\ntypedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);\nGLAPI PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D;\n#define glTextureSubImage3D glad_glTextureSubImage3D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D;\n#define glCompressedTextureSubImage1D glad_glCompressedTextureSubImage1D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D;\n#define glCompressedTextureSubImage2D glad_glCompressedTextureSubImage2D\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);\nGLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D;\n#define glCompressedTextureSubImage3D glad_glCompressedTextureSubImage3D\ntypedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\nGLAPI PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D;\n#define glCopyTextureSubImage1D glad_glCopyTextureSubImage1D\ntypedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D;\n#define glCopyTextureSubImage2D glad_glCopyTextureSubImage2D\ntypedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D;\n#define glCopyTextureSubImage3D glad_glCopyTextureSubImage3D\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param);\nGLAPI PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf;\n#define glTextureParameterf glad_glTextureParameterf\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, const GLfloat *param);\nGLAPI PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv;\n#define glTextureParameterfv glad_glTextureParameterfv\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param);\nGLAPI PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri;\n#define glTextureParameteri glad_glTextureParameteri\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, const GLint *params);\nGLAPI PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv;\n#define glTextureParameterIiv glad_glTextureParameterIiv\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, const GLuint *params);\nGLAPI PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv;\n#define glTextureParameterIuiv glad_glTextureParameterIuiv\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, const GLint *param);\nGLAPI PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv;\n#define glTextureParameteriv glad_glTextureParameteriv\ntypedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture);\nGLAPI PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap;\n#define glGenerateTextureMipmap glad_glGenerateTextureMipmap\ntypedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture);\nGLAPI PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit;\n#define glBindTextureUnit glad_glBindTextureUnit\ntypedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);\nGLAPI PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage;\n#define glGetTextureImage glad_glGetTextureImage\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLsizei bufSize, void *pixels);\nGLAPI PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage;\n#define glGetCompressedTextureImage glad_glGetCompressedTextureImage\ntypedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, GLenum pname, GLfloat *params);\nGLAPI PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv;\n#define glGetTextureLevelParameterfv glad_glGetTextureLevelParameterfv\ntypedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, GLenum pname, GLint *params);\nGLAPI PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv;\n#define glGetTextureLevelParameteriv glad_glGetTextureLevelParameteriv\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, GLfloat *params);\nGLAPI PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv;\n#define glGetTextureParameterfv glad_glGetTextureParameterfv\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, GLint *params);\nGLAPI PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv;\n#define glGetTextureParameterIiv glad_glGetTextureParameterIiv\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, GLuint *params);\nGLAPI PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv;\n#define glGetTextureParameterIuiv glad_glGetTextureParameterIuiv\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, GLint *params);\nGLAPI PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv;\n#define glGetTextureParameteriv glad_glGetTextureParameteriv\ntypedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays);\nGLAPI PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays;\n#define glCreateVertexArrays glad_glCreateVertexArrays\ntypedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index);\nGLAPI PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib;\n#define glDisableVertexArrayAttrib glad_glDisableVertexArrayAttrib\ntypedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index);\nGLAPI PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib;\n#define glEnableVertexArrayAttrib glad_glEnableVertexArrayAttrib\ntypedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer);\nGLAPI PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer;\n#define glVertexArrayElementBuffer glad_glVertexArrayElementBuffer\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);\nGLAPI PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer;\n#define glVertexArrayVertexBuffer glad_glVertexArrayVertexBuffer\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);\nGLAPI PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers;\n#define glVertexArrayVertexBuffers glad_glVertexArrayVertexBuffers\ntypedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex);\nGLAPI PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding;\n#define glVertexArrayAttribBinding glad_glVertexArrayAttribBinding\ntypedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);\nGLAPI PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat;\n#define glVertexArrayAttribFormat glad_glVertexArrayAttribFormat\ntypedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat;\n#define glVertexArrayAttribIFormat glad_glVertexArrayAttribIFormat\ntypedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat;\n#define glVertexArrayAttribLFormat glad_glVertexArrayAttribLFormat\ntypedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor);\nGLAPI PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor;\n#define glVertexArrayBindingDivisor glad_glVertexArrayBindingDivisor\ntypedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint *param);\nGLAPI PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv;\n#define glGetVertexArrayiv glad_glGetVertexArrayiv\ntypedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint *param);\nGLAPI PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv;\n#define glGetVertexArrayIndexediv glad_glGetVertexArrayIndexediv\ntypedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);\nGLAPI PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv;\n#define glGetVertexArrayIndexed64iv glad_glGetVertexArrayIndexed64iv\ntypedef void (APIENTRYP PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint *samplers);\nGLAPI PFNGLCREATESAMPLERSPROC glad_glCreateSamplers;\n#define glCreateSamplers glad_glCreateSamplers\ntypedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines);\nGLAPI PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines;\n#define glCreateProgramPipelines glad_glCreateProgramPipelines\ntypedef void (APIENTRYP PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint *ids);\nGLAPI PFNGLCREATEQUERIESPROC glad_glCreateQueries;\n#define glCreateQueries glad_glCreateQueries\ntypedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);\nGLAPI PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v;\n#define glGetQueryBufferObjecti64v glad_glGetQueryBufferObjecti64v\ntypedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);\nGLAPI PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv;\n#define glGetQueryBufferObjectiv glad_glGetQueryBufferObjectiv\ntypedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);\nGLAPI PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v;\n#define glGetQueryBufferObjectui64v glad_glGetQueryBufferObjectui64v\ntypedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);\nGLAPI PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv;\n#define glGetQueryBufferObjectuiv glad_glGetQueryBufferObjectuiv\ntypedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers);\nGLAPI PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion;\n#define glMemoryBarrierByRegion glad_glMemoryBarrierByRegion\ntypedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels);\nGLAPI PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage;\n#define glGetTextureSubImage glad_glGetTextureSubImage\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);\nGLAPI PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage;\n#define glGetCompressedTextureSubImage glad_glGetCompressedTextureSubImage\ntypedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC)(void);\nGLAPI PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus;\n#define glGetGraphicsResetStatus glad_glGetGraphicsResetStatus\ntypedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, GLsizei bufSize, void *pixels);\nGLAPI PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage;\n#define glGetnCompressedTexImage glad_glGetnCompressedTexImage\ntypedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);\nGLAPI PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage;\n#define glGetnTexImage glad_glGetnTexImage\ntypedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble *params);\nGLAPI PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv;\n#define glGetnUniformdv glad_glGetnUniformdv\ntypedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);\nGLAPI PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv;\n#define glGetnUniformfv glad_glGetnUniformfv\ntypedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params);\nGLAPI PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv;\n#define glGetnUniformiv glad_glGetnUniformiv\ntypedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint *params);\nGLAPI PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv;\n#define glGetnUniformuiv glad_glGetnUniformuiv\ntypedef void (APIENTRYP PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);\nGLAPI PFNGLREADNPIXELSPROC glad_glReadnPixels;\n#define glReadnPixels glad_glReadnPixels\ntypedef void (APIENTRYP PFNGLGETNMAPDVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);\nGLAPI PFNGLGETNMAPDVPROC glad_glGetnMapdv;\n#define glGetnMapdv glad_glGetnMapdv\ntypedef void (APIENTRYP PFNGLGETNMAPFVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);\nGLAPI PFNGLGETNMAPFVPROC glad_glGetnMapfv;\n#define glGetnMapfv glad_glGetnMapfv\ntypedef void (APIENTRYP PFNGLGETNMAPIVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint *v);\nGLAPI PFNGLGETNMAPIVPROC glad_glGetnMapiv;\n#define glGetnMapiv glad_glGetnMapiv\ntypedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC)(GLenum map, GLsizei bufSize, GLfloat *values);\nGLAPI PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv;\n#define glGetnPixelMapfv glad_glGetnPixelMapfv\ntypedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC)(GLenum map, GLsizei bufSize, GLuint *values);\nGLAPI PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv;\n#define glGetnPixelMapuiv glad_glGetnPixelMapuiv\ntypedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC)(GLenum map, GLsizei bufSize, GLushort *values);\nGLAPI PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv;\n#define glGetnPixelMapusv glad_glGetnPixelMapusv\ntypedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC)(GLsizei bufSize, GLubyte *pattern);\nGLAPI PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple;\n#define glGetnPolygonStipple glad_glGetnPolygonStipple\ntypedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);\nGLAPI PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable;\n#define glGetnColorTable glad_glGetnColorTable\ntypedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);\nGLAPI PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter;\n#define glGetnConvolutionFilter glad_glGetnConvolutionFilter\ntypedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);\nGLAPI PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter;\n#define glGetnSeparableFilter glad_glGetnSeparableFilter\ntypedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);\nGLAPI PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram;\n#define glGetnHistogram glad_glGetnHistogram\ntypedef void (APIENTRYP PFNGLGETNMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);\nGLAPI PFNGLGETNMINMAXPROC glad_glGetnMinmax;\n#define glGetnMinmax glad_glGetnMinmax\ntypedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC)(void);\nGLAPI PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier;\n#define glTextureBarrier glad_glTextureBarrier\n#endif\n#ifndef GL_VERSION_4_6\n#define GL_VERSION_4_6 1\nGLAPI int GLAD_GL_VERSION_4_6;\ntypedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC)(GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);\nGLAPI PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader;\n#define glSpecializeShader glad_glSpecializeShader\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)(GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);\nGLAPI PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount;\n#define glMultiDrawArraysIndirectCount glad_glMultiDrawArraysIndirectCount\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)(GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);\nGLAPI PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount;\n#define glMultiDrawElementsIndirectCount glad_glMultiDrawElementsIndirectCount\ntypedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC)(GLfloat factor, GLfloat units, GLfloat clamp);\nGLAPI PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp;\n#define glPolygonOffsetClamp glad_glPolygonOffsetClamp\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/Glad/premake5.lua",
    "content": "project \"Glad\"\n    kind \"StaticLib\"\n    language \"C\"\n    staticruntime \"off\"\n    \n    targetdir (\"bin/\" .. outputdir .. \"/%{prj.name}\")\n    objdir (\"bin-int/\" .. outputdir .. \"/%{prj.name}\")\n\n    files\n    {\n        \"include/glad/glad.h\",\n        \"include/KHR/khrplatform.h\",\n        \"src/glad.c\"\n    }\n\n    includedirs\n    {\n        \"include\"\n    }\n    \n    filter \"system:windows\"\n        systemversion \"latest\"\n\n    filter \"configurations:Debug\"\n        runtime \"Debug\"\n        symbols \"on\"\n\n    filter \"configurations:Release\"\n        runtime \"Release\"\n        optimize \"on\"\n"
  },
  {
    "path": "Hazel/vendor/Glad/src/glad.c",
    "content": "/*\n\n    OpenGL loader generated by glad 0.1.28 on Sat Jan  5 02:36:41 2019.\n\n    Language/Generator: C/C++\n    Specification: gl\n    APIs: gl=4.6\n    Profile: core\n    Extensions:\n        \n    Loader: True\n    Local files: False\n    Omit khrplatform: False\n    Reproducible: False\n\n    Commandline:\n        --profile=\"core\" --api=\"gl=4.6\" --generator=\"c\" --spec=\"gl\" --extensions=\"\"\n    Online:\n        https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <glad/glad.h>\n\nstatic void* get_proc(const char *namez);\n\n#if defined(_WIN32) || defined(__CYGWIN__)\n#include <windows.h>\nstatic HMODULE libGL;\n\ntypedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*);\nstatic PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;\n\n#ifdef _MSC_VER\n#ifdef __has_include\n  #if __has_include(<winapifamily.h>)\n    #define HAVE_WINAPIFAMILY 1\n  #endif\n#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_\n  #define HAVE_WINAPIFAMILY 1\n#endif\n#endif\n\n#ifdef HAVE_WINAPIFAMILY\n  #include <winapifamily.h>\n  #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)\n    #define IS_UWP 1\n  #endif\n#endif\n\nstatic\nint open_gl(void) {\n#ifndef IS_UWP\n    libGL = LoadLibraryW(L\"opengl32.dll\");\n    if(libGL != NULL) {\n        void (* tmp)(void);\n        tmp = (void(*)(void)) GetProcAddress(libGL, \"wglGetProcAddress\");\n        gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp;\n        return gladGetProcAddressPtr != NULL;\n    }\n#endif\n\n    return 0;\n}\n\nstatic\nvoid close_gl(void) {\n    if(libGL != NULL) {\n        FreeLibrary((HMODULE) libGL);\n        libGL = NULL;\n    }\n}\n#else\n#include <dlfcn.h>\nstatic void* libGL;\n\n#if !defined(__APPLE__) && !defined(__HAIKU__)\ntypedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*);\nstatic PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;\n#endif\n\nstatic\nint open_gl(void) {\n#ifdef __APPLE__\n    static const char *NAMES[] = {\n        \"../Frameworks/OpenGL.framework/OpenGL\",\n        \"/Library/Frameworks/OpenGL.framework/OpenGL\",\n        \"/System/Library/Frameworks/OpenGL.framework/OpenGL\",\n        \"/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL\"\n    };\n#else\n    static const char *NAMES[] = {\"libGL.so.1\", \"libGL.so\"};\n#endif\n\n    unsigned int index = 0;\n    for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) {\n        libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL);\n\n        if(libGL != NULL) {\n#if defined(__APPLE__) || defined(__HAIKU__)\n            return 1;\n#else\n            gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL,\n                \"glXGetProcAddressARB\");\n            return gladGetProcAddressPtr != NULL;\n#endif\n        }\n    }\n\n    return 0;\n}\n\nstatic\nvoid close_gl(void) {\n    if(libGL != NULL) {\n        dlclose(libGL);\n        libGL = NULL;\n    }\n}\n#endif\n\nstatic\nvoid* get_proc(const char *namez) {\n    void* result = NULL;\n    if(libGL == NULL) return NULL;\n\n#if !defined(__APPLE__) && !defined(__HAIKU__)\n    if(gladGetProcAddressPtr != NULL) {\n        result = gladGetProcAddressPtr(namez);\n    }\n#endif\n    if(result == NULL) {\n#if defined(_WIN32) || defined(__CYGWIN__)\n        result = (void*)GetProcAddress((HMODULE) libGL, namez);\n#else\n        result = dlsym(libGL, namez);\n#endif\n    }\n\n    return result;\n}\n\nint gladLoadGL(void) {\n    int status = 0;\n\n    if(open_gl()) {\n        status = gladLoadGLLoader(&get_proc);\n        close_gl();\n    }\n\n    return status;\n}\n\nstruct gladGLversionStruct GLVersion = { 0, 0 };\n\n#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0)\n#define _GLAD_IS_SOME_NEW_VERSION 1\n#endif\n\nstatic int max_loaded_major;\nstatic int max_loaded_minor;\n\nstatic const char *exts = NULL;\nstatic int num_exts_i = 0;\nstatic char **exts_i = NULL;\n\nstatic int get_exts(void) {\n#ifdef _GLAD_IS_SOME_NEW_VERSION\n    if(max_loaded_major < 3) {\n#endif\n        exts = (const char *)glGetString(GL_EXTENSIONS);\n#ifdef _GLAD_IS_SOME_NEW_VERSION\n    } else {\n        unsigned int index;\n\n        num_exts_i = 0;\n        glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i);\n        if (num_exts_i > 0) {\n            char **tmp_exts_i = (char **)realloc((void *)exts_i, (size_t)num_exts_i * (sizeof *exts_i));\n            if (tmp_exts_i == NULL) {\n                return 0;\n            }\n            exts_i = tmp_exts_i;\n        }\n\n        if (exts_i == NULL) {\n            return 0;\n        }\n\n        for(index = 0; index < (unsigned)num_exts_i; index++) {\n            const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index);\n            size_t len = strlen(gl_str_tmp);\n\n            char *local_str = (char*)malloc((len+1) * sizeof(char));\n            if(local_str != NULL) {\n                memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char));\n            }\n            exts_i[index] = local_str;\n        }\n    }\n#endif\n    return 1;\n}\n\nstatic void free_exts(void) {\n    if (exts_i != NULL) {\n        int index;\n        for(index = 0; index < num_exts_i; index++) {\n            free((char *)exts_i[index]);\n        }\n        free((void *)exts_i);\n        exts_i = NULL;\n    }\n}\n\nstatic int has_ext(const char *ext) {\n#ifdef _GLAD_IS_SOME_NEW_VERSION\n    if(max_loaded_major < 3) {\n#endif\n        const char *extensions;\n        const char *loc;\n        const char *terminator;\n        extensions = exts;\n        if(extensions == NULL || ext == NULL) {\n            return 0;\n        }\n\n        while(1) {\n            loc = strstr(extensions, ext);\n            if(loc == NULL) {\n                return 0;\n            }\n\n            terminator = loc + strlen(ext);\n            if((loc == extensions || *(loc - 1) == ' ') &&\n                (*terminator == ' ' || *terminator == '\\0')) {\n                return 1;\n            }\n            extensions = terminator;\n        }\n#ifdef _GLAD_IS_SOME_NEW_VERSION\n    } else {\n        int index;\n        if(exts_i == NULL) return 0;\n        for(index = 0; index < num_exts_i; index++) {\n            const char *e = exts_i[index];\n\n            if(exts_i[index] != NULL && strcmp(e, ext) == 0) {\n                return 1;\n            }\n        }\n    }\n#endif\n\n    return 0;\n}\nint GLAD_GL_VERSION_1_0 = 0;\nint GLAD_GL_VERSION_1_1 = 0;\nint GLAD_GL_VERSION_1_2 = 0;\nint GLAD_GL_VERSION_1_3 = 0;\nint GLAD_GL_VERSION_1_4 = 0;\nint GLAD_GL_VERSION_1_5 = 0;\nint GLAD_GL_VERSION_2_0 = 0;\nint GLAD_GL_VERSION_2_1 = 0;\nint GLAD_GL_VERSION_3_0 = 0;\nint GLAD_GL_VERSION_3_1 = 0;\nint GLAD_GL_VERSION_3_2 = 0;\nint GLAD_GL_VERSION_3_3 = 0;\nint GLAD_GL_VERSION_4_0 = 0;\nint GLAD_GL_VERSION_4_1 = 0;\nint GLAD_GL_VERSION_4_2 = 0;\nint GLAD_GL_VERSION_4_3 = 0;\nint GLAD_GL_VERSION_4_4 = 0;\nint GLAD_GL_VERSION_4_5 = 0;\nint GLAD_GL_VERSION_4_6 = 0;\nPFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram = NULL;\nPFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL;\nPFNGLATTACHSHADERPROC glad_glAttachShader = NULL;\nPFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL;\nPFNGLBEGINQUERYPROC glad_glBeginQuery = NULL;\nPFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed = NULL;\nPFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL;\nPFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL;\nPFNGLBINDBUFFERPROC glad_glBindBuffer = NULL;\nPFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL;\nPFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL;\nPFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase = NULL;\nPFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange = NULL;\nPFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL;\nPFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL;\nPFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL;\nPFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture = NULL;\nPFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures = NULL;\nPFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline = NULL;\nPFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL;\nPFNGLBINDSAMPLERPROC glad_glBindSampler = NULL;\nPFNGLBINDSAMPLERSPROC glad_glBindSamplers = NULL;\nPFNGLBINDTEXTUREPROC glad_glBindTexture = NULL;\nPFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit = NULL;\nPFNGLBINDTEXTURESPROC glad_glBindTextures = NULL;\nPFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL;\nPFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL;\nPFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer = NULL;\nPFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers = NULL;\nPFNGLBLENDCOLORPROC glad_glBlendColor = NULL;\nPFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL;\nPFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL;\nPFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei = NULL;\nPFNGLBLENDEQUATIONIPROC glad_glBlendEquationi = NULL;\nPFNGLBLENDFUNCPROC glad_glBlendFunc = NULL;\nPFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL;\nPFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei = NULL;\nPFNGLBLENDFUNCIPROC glad_glBlendFunci = NULL;\nPFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL;\nPFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer = NULL;\nPFNGLBUFFERDATAPROC glad_glBufferData = NULL;\nPFNGLBUFFERSTORAGEPROC glad_glBufferStorage = NULL;\nPFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL;\nPFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL;\nPFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus = NULL;\nPFNGLCLAMPCOLORPROC glad_glClampColor = NULL;\nPFNGLCLEARPROC glad_glClear = NULL;\nPFNGLCLEARBUFFERDATAPROC glad_glClearBufferData = NULL;\nPFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData = NULL;\nPFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL;\nPFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL;\nPFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL;\nPFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL;\nPFNGLCLEARCOLORPROC glad_glClearColor = NULL;\nPFNGLCLEARDEPTHPROC glad_glClearDepth = NULL;\nPFNGLCLEARDEPTHFPROC glad_glClearDepthf = NULL;\nPFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData = NULL;\nPFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData = NULL;\nPFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi = NULL;\nPFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv = NULL;\nPFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv = NULL;\nPFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv = NULL;\nPFNGLCLEARSTENCILPROC glad_glClearStencil = NULL;\nPFNGLCLEARTEXIMAGEPROC glad_glClearTexImage = NULL;\nPFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage = NULL;\nPFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL;\nPFNGLCLIPCONTROLPROC glad_glClipControl = NULL;\nPFNGLCOLORMASKPROC glad_glColorMask = NULL;\nPFNGLCOLORMASKIPROC glad_glColorMaski = NULL;\nPFNGLCOLORP3UIPROC glad_glColorP3ui = NULL;\nPFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL;\nPFNGLCOLORP4UIPROC glad_glColorP4ui = NULL;\nPFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL;\nPFNGLCOMPILESHADERPROC glad_glCompileShader = NULL;\nPFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL;\nPFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL;\nPFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL;\nPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL;\nPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL;\nPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL;\nPFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D = NULL;\nPFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D = NULL;\nPFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D = NULL;\nPFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL;\nPFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData = NULL;\nPFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData = NULL;\nPFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL;\nPFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL;\nPFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL;\nPFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL;\nPFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL;\nPFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D = NULL;\nPFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D = NULL;\nPFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D = NULL;\nPFNGLCREATEBUFFERSPROC glad_glCreateBuffers = NULL;\nPFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers = NULL;\nPFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL;\nPFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines = NULL;\nPFNGLCREATEQUERIESPROC glad_glCreateQueries = NULL;\nPFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers = NULL;\nPFNGLCREATESAMPLERSPROC glad_glCreateSamplers = NULL;\nPFNGLCREATESHADERPROC glad_glCreateShader = NULL;\nPFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv = NULL;\nPFNGLCREATETEXTURESPROC glad_glCreateTextures = NULL;\nPFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks = NULL;\nPFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays = NULL;\nPFNGLCULLFACEPROC glad_glCullFace = NULL;\nPFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback = NULL;\nPFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl = NULL;\nPFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert = NULL;\nPFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL;\nPFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL;\nPFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL;\nPFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines = NULL;\nPFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL;\nPFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL;\nPFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL;\nPFNGLDELETESHADERPROC glad_glDeleteShader = NULL;\nPFNGLDELETESYNCPROC glad_glDeleteSync = NULL;\nPFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL;\nPFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks = NULL;\nPFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL;\nPFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL;\nPFNGLDEPTHMASKPROC glad_glDepthMask = NULL;\nPFNGLDEPTHRANGEPROC glad_glDepthRange = NULL;\nPFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv = NULL;\nPFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed = NULL;\nPFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL;\nPFNGLDETACHSHADERPROC glad_glDetachShader = NULL;\nPFNGLDISABLEPROC glad_glDisable = NULL;\nPFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib = NULL;\nPFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL;\nPFNGLDISABLEIPROC glad_glDisablei = NULL;\nPFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute = NULL;\nPFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect = NULL;\nPFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL;\nPFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect = NULL;\nPFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL;\nPFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance = NULL;\nPFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL;\nPFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL;\nPFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL;\nPFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL;\nPFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect = NULL;\nPFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL;\nPFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance = NULL;\nPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL;\nPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance = NULL;\nPFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL;\nPFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL;\nPFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback = NULL;\nPFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced = NULL;\nPFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream = NULL;\nPFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced = NULL;\nPFNGLENABLEPROC glad_glEnable = NULL;\nPFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib = NULL;\nPFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL;\nPFNGLENABLEIPROC glad_glEnablei = NULL;\nPFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL;\nPFNGLENDQUERYPROC glad_glEndQuery = NULL;\nPFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed = NULL;\nPFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL;\nPFNGLFENCESYNCPROC glad_glFenceSync = NULL;\nPFNGLFINISHPROC glad_glFinish = NULL;\nPFNGLFLUSHPROC glad_glFlush = NULL;\nPFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL;\nPFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange = NULL;\nPFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri = NULL;\nPFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL;\nPFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL;\nPFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL;\nPFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL;\nPFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL;\nPFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL;\nPFNGLFRONTFACEPROC glad_glFrontFace = NULL;\nPFNGLGENBUFFERSPROC glad_glGenBuffers = NULL;\nPFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL;\nPFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines = NULL;\nPFNGLGENQUERIESPROC glad_glGenQueries = NULL;\nPFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL;\nPFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL;\nPFNGLGENTEXTURESPROC glad_glGenTextures = NULL;\nPFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks = NULL;\nPFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL;\nPFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL;\nPFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap = NULL;\nPFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv = NULL;\nPFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL;\nPFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName = NULL;\nPFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName = NULL;\nPFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv = NULL;\nPFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL;\nPFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL;\nPFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL;\nPFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL;\nPFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL;\nPFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL;\nPFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL;\nPFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL;\nPFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL;\nPFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL;\nPFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL;\nPFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL;\nPFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL;\nPFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL;\nPFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage = NULL;\nPFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage = NULL;\nPFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog = NULL;\nPFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v = NULL;\nPFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL;\nPFNGLGETERRORPROC glad_glGetError = NULL;\nPFNGLGETFLOATI_VPROC glad_glGetFloati_v = NULL;\nPFNGLGETFLOATVPROC glad_glGetFloatv = NULL;\nPFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL;\nPFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL;\nPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL;\nPFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv = NULL;\nPFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus = NULL;\nPFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL;\nPFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL;\nPFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL;\nPFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL;\nPFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v = NULL;\nPFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ = NULL;\nPFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL;\nPFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v = NULL;\nPFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv = NULL;\nPFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv = NULL;\nPFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData = NULL;\nPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv = NULL;\nPFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv = NULL;\nPFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv = NULL;\nPFNGLGETOBJECTLABELPROC glad_glGetObjectLabel = NULL;\nPFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel = NULL;\nPFNGLGETPOINTERVPROC glad_glGetPointerv = NULL;\nPFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary = NULL;\nPFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL;\nPFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv = NULL;\nPFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog = NULL;\nPFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv = NULL;\nPFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex = NULL;\nPFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation = NULL;\nPFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex = NULL;\nPFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName = NULL;\nPFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv = NULL;\nPFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv = NULL;\nPFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL;\nPFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v = NULL;\nPFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv = NULL;\nPFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v = NULL;\nPFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv = NULL;\nPFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv = NULL;\nPFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL;\nPFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL;\nPFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL;\nPFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL;\nPFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL;\nPFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL;\nPFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL;\nPFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL;\nPFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL;\nPFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL;\nPFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL;\nPFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat = NULL;\nPFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL;\nPFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL;\nPFNGLGETSTRINGPROC glad_glGetString = NULL;\nPFNGLGETSTRINGIPROC glad_glGetStringi = NULL;\nPFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex = NULL;\nPFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation = NULL;\nPFNGLGETSYNCIVPROC glad_glGetSynciv = NULL;\nPFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL;\nPFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL;\nPFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL;\nPFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL;\nPFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL;\nPFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL;\nPFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL;\nPFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage = NULL;\nPFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv = NULL;\nPFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv = NULL;\nPFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv = NULL;\nPFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv = NULL;\nPFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv = NULL;\nPFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv = NULL;\nPFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage = NULL;\nPFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL;\nPFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v = NULL;\nPFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v = NULL;\nPFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv = NULL;\nPFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL;\nPFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL;\nPFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL;\nPFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv = NULL;\nPFNGLGETUNIFORMDVPROC glad_glGetUniformdv = NULL;\nPFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL;\nPFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL;\nPFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL;\nPFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv = NULL;\nPFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv = NULL;\nPFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv = NULL;\nPFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL;\nPFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL;\nPFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv = NULL;\nPFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL;\nPFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL;\nPFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL;\nPFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL;\nPFNGLGETNCOLORTABLEPROC glad_glGetnColorTable = NULL;\nPFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage = NULL;\nPFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter = NULL;\nPFNGLGETNHISTOGRAMPROC glad_glGetnHistogram = NULL;\nPFNGLGETNMAPDVPROC glad_glGetnMapdv = NULL;\nPFNGLGETNMAPFVPROC glad_glGetnMapfv = NULL;\nPFNGLGETNMAPIVPROC glad_glGetnMapiv = NULL;\nPFNGLGETNMINMAXPROC glad_glGetnMinmax = NULL;\nPFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv = NULL;\nPFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv = NULL;\nPFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv = NULL;\nPFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple = NULL;\nPFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter = NULL;\nPFNGLGETNTEXIMAGEPROC glad_glGetnTexImage = NULL;\nPFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv = NULL;\nPFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv = NULL;\nPFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv = NULL;\nPFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv = NULL;\nPFNGLHINTPROC glad_glHint = NULL;\nPFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData = NULL;\nPFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData = NULL;\nPFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer = NULL;\nPFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData = NULL;\nPFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData = NULL;\nPFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer = NULL;\nPFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage = NULL;\nPFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage = NULL;\nPFNGLISBUFFERPROC glad_glIsBuffer = NULL;\nPFNGLISENABLEDPROC glad_glIsEnabled = NULL;\nPFNGLISENABLEDIPROC glad_glIsEnabledi = NULL;\nPFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL;\nPFNGLISPROGRAMPROC glad_glIsProgram = NULL;\nPFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline = NULL;\nPFNGLISQUERYPROC glad_glIsQuery = NULL;\nPFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL;\nPFNGLISSAMPLERPROC glad_glIsSampler = NULL;\nPFNGLISSHADERPROC glad_glIsShader = NULL;\nPFNGLISSYNCPROC glad_glIsSync = NULL;\nPFNGLISTEXTUREPROC glad_glIsTexture = NULL;\nPFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback = NULL;\nPFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL;\nPFNGLLINEWIDTHPROC glad_glLineWidth = NULL;\nPFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL;\nPFNGLLOGICOPPROC glad_glLogicOp = NULL;\nPFNGLMAPBUFFERPROC glad_glMapBuffer = NULL;\nPFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL;\nPFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer = NULL;\nPFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange = NULL;\nPFNGLMEMORYBARRIERPROC glad_glMemoryBarrier = NULL;\nPFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion = NULL;\nPFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading = NULL;\nPFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL;\nPFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect = NULL;\nPFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount = NULL;\nPFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL;\nPFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL;\nPFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect = NULL;\nPFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount = NULL;\nPFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL;\nPFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL;\nPFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL;\nPFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL;\nPFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL;\nPFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL;\nPFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL;\nPFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL;\nPFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData = NULL;\nPFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage = NULL;\nPFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData = NULL;\nPFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer = NULL;\nPFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers = NULL;\nPFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri = NULL;\nPFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer = NULL;\nPFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer = NULL;\nPFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture = NULL;\nPFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer = NULL;\nPFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage = NULL;\nPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample = NULL;\nPFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL;\nPFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL;\nPFNGLOBJECTLABELPROC glad_glObjectLabel = NULL;\nPFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel = NULL;\nPFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv = NULL;\nPFNGLPATCHPARAMETERIPROC glad_glPatchParameteri = NULL;\nPFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL;\nPFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL;\nPFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL;\nPFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL;\nPFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL;\nPFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL;\nPFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL;\nPFNGLPOINTSIZEPROC glad_glPointSize = NULL;\nPFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL;\nPFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL;\nPFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp = NULL;\nPFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup = NULL;\nPFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL;\nPFNGLPROGRAMBINARYPROC glad_glProgramBinary = NULL;\nPFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri = NULL;\nPFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d = NULL;\nPFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv = NULL;\nPFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f = NULL;\nPFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv = NULL;\nPFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i = NULL;\nPFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv = NULL;\nPFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui = NULL;\nPFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv = NULL;\nPFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d = NULL;\nPFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv = NULL;\nPFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f = NULL;\nPFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv = NULL;\nPFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i = NULL;\nPFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv = NULL;\nPFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui = NULL;\nPFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv = NULL;\nPFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d = NULL;\nPFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv = NULL;\nPFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f = NULL;\nPFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv = NULL;\nPFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i = NULL;\nPFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv = NULL;\nPFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui = NULL;\nPFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv = NULL;\nPFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d = NULL;\nPFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv = NULL;\nPFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f = NULL;\nPFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv = NULL;\nPFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i = NULL;\nPFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv = NULL;\nPFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui = NULL;\nPFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv = NULL;\nPFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv = NULL;\nPFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL;\nPFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup = NULL;\nPFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL;\nPFNGLREADBUFFERPROC glad_glReadBuffer = NULL;\nPFNGLREADPIXELSPROC glad_glReadPixels = NULL;\nPFNGLREADNPIXELSPROC glad_glReadnPixels = NULL;\nPFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler = NULL;\nPFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL;\nPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL;\nPFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback = NULL;\nPFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL;\nPFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL;\nPFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL;\nPFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL;\nPFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL;\nPFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL;\nPFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL;\nPFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL;\nPFNGLSCISSORPROC glad_glScissor = NULL;\nPFNGLSCISSORARRAYVPROC glad_glScissorArrayv = NULL;\nPFNGLSCISSORINDEXEDPROC glad_glScissorIndexed = NULL;\nPFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv = NULL;\nPFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL;\nPFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL;\nPFNGLSHADERBINARYPROC glad_glShaderBinary = NULL;\nPFNGLSHADERSOURCEPROC glad_glShaderSource = NULL;\nPFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding = NULL;\nPFNGLSPECIALIZESHADERPROC glad_glSpecializeShader = NULL;\nPFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL;\nPFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL;\nPFNGLSTENCILMASKPROC glad_glStencilMask = NULL;\nPFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL;\nPFNGLSTENCILOPPROC glad_glStencilOp = NULL;\nPFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL;\nPFNGLTEXBUFFERPROC glad_glTexBuffer = NULL;\nPFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange = NULL;\nPFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL;\nPFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL;\nPFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL;\nPFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL;\nPFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL;\nPFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL;\nPFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL;\nPFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL;\nPFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL;\nPFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL;\nPFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL;\nPFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL;\nPFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL;\nPFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL;\nPFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL;\nPFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL;\nPFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL;\nPFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL;\nPFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL;\nPFNGLTEXSTORAGE1DPROC glad_glTexStorage1D = NULL;\nPFNGLTEXSTORAGE2DPROC glad_glTexStorage2D = NULL;\nPFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample = NULL;\nPFNGLTEXSTORAGE3DPROC glad_glTexStorage3D = NULL;\nPFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample = NULL;\nPFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL;\nPFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL;\nPFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL;\nPFNGLTEXTUREBARRIERPROC glad_glTextureBarrier = NULL;\nPFNGLTEXTUREBUFFERPROC glad_glTextureBuffer = NULL;\nPFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange = NULL;\nPFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv = NULL;\nPFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv = NULL;\nPFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf = NULL;\nPFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv = NULL;\nPFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri = NULL;\nPFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv = NULL;\nPFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D = NULL;\nPFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D = NULL;\nPFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample = NULL;\nPFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D = NULL;\nPFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample = NULL;\nPFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D = NULL;\nPFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D = NULL;\nPFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D = NULL;\nPFNGLTEXTUREVIEWPROC glad_glTextureView = NULL;\nPFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase = NULL;\nPFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange = NULL;\nPFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL;\nPFNGLUNIFORM1DPROC glad_glUniform1d = NULL;\nPFNGLUNIFORM1DVPROC glad_glUniform1dv = NULL;\nPFNGLUNIFORM1FPROC glad_glUniform1f = NULL;\nPFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL;\nPFNGLUNIFORM1IPROC glad_glUniform1i = NULL;\nPFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL;\nPFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL;\nPFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL;\nPFNGLUNIFORM2DPROC glad_glUniform2d = NULL;\nPFNGLUNIFORM2DVPROC glad_glUniform2dv = NULL;\nPFNGLUNIFORM2FPROC glad_glUniform2f = NULL;\nPFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL;\nPFNGLUNIFORM2IPROC glad_glUniform2i = NULL;\nPFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL;\nPFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL;\nPFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL;\nPFNGLUNIFORM3DPROC glad_glUniform3d = NULL;\nPFNGLUNIFORM3DVPROC glad_glUniform3dv = NULL;\nPFNGLUNIFORM3FPROC glad_glUniform3f = NULL;\nPFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL;\nPFNGLUNIFORM3IPROC glad_glUniform3i = NULL;\nPFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL;\nPFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL;\nPFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL;\nPFNGLUNIFORM4DPROC glad_glUniform4d = NULL;\nPFNGLUNIFORM4DVPROC glad_glUniform4dv = NULL;\nPFNGLUNIFORM4FPROC glad_glUniform4f = NULL;\nPFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL;\nPFNGLUNIFORM4IPROC glad_glUniform4i = NULL;\nPFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL;\nPFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL;\nPFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL;\nPFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL;\nPFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv = NULL;\nPFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL;\nPFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv = NULL;\nPFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL;\nPFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv = NULL;\nPFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL;\nPFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv = NULL;\nPFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL;\nPFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv = NULL;\nPFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL;\nPFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv = NULL;\nPFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL;\nPFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv = NULL;\nPFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL;\nPFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv = NULL;\nPFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL;\nPFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv = NULL;\nPFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL;\nPFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv = NULL;\nPFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL;\nPFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer = NULL;\nPFNGLUSEPROGRAMPROC glad_glUseProgram = NULL;\nPFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages = NULL;\nPFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL;\nPFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline = NULL;\nPFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding = NULL;\nPFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat = NULL;\nPFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat = NULL;\nPFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat = NULL;\nPFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor = NULL;\nPFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer = NULL;\nPFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer = NULL;\nPFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers = NULL;\nPFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL;\nPFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL;\nPFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL;\nPFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL;\nPFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL;\nPFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL;\nPFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL;\nPFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL;\nPFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL;\nPFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL;\nPFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL;\nPFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL;\nPFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL;\nPFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL;\nPFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL;\nPFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL;\nPFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL;\nPFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL;\nPFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL;\nPFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL;\nPFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL;\nPFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL;\nPFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL;\nPFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL;\nPFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL;\nPFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL;\nPFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL;\nPFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL;\nPFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL;\nPFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL;\nPFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL;\nPFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL;\nPFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL;\nPFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL;\nPFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL;\nPFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL;\nPFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding = NULL;\nPFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL;\nPFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat = NULL;\nPFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL;\nPFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL;\nPFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL;\nPFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL;\nPFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL;\nPFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL;\nPFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL;\nPFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL;\nPFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL;\nPFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL;\nPFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL;\nPFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL;\nPFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL;\nPFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL;\nPFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL;\nPFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL;\nPFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL;\nPFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL;\nPFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL;\nPFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL;\nPFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat = NULL;\nPFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL;\nPFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d = NULL;\nPFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv = NULL;\nPFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d = NULL;\nPFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv = NULL;\nPFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d = NULL;\nPFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv = NULL;\nPFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d = NULL;\nPFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv = NULL;\nPFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat = NULL;\nPFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer = NULL;\nPFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL;\nPFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL;\nPFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL;\nPFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL;\nPFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL;\nPFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL;\nPFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL;\nPFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL;\nPFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL;\nPFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor = NULL;\nPFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL;\nPFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL;\nPFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL;\nPFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL;\nPFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL;\nPFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL;\nPFNGLVIEWPORTPROC glad_glViewport = NULL;\nPFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv = NULL;\nPFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf = NULL;\nPFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv = NULL;\nPFNGLWAITSYNCPROC glad_glWaitSync = NULL;\nstatic void load_GL_VERSION_1_0(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_1_0) return;\n\tglad_glCullFace = (PFNGLCULLFACEPROC)load(\"glCullFace\");\n\tglad_glFrontFace = (PFNGLFRONTFACEPROC)load(\"glFrontFace\");\n\tglad_glHint = (PFNGLHINTPROC)load(\"glHint\");\n\tglad_glLineWidth = (PFNGLLINEWIDTHPROC)load(\"glLineWidth\");\n\tglad_glPointSize = (PFNGLPOINTSIZEPROC)load(\"glPointSize\");\n\tglad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load(\"glPolygonMode\");\n\tglad_glScissor = (PFNGLSCISSORPROC)load(\"glScissor\");\n\tglad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load(\"glTexParameterf\");\n\tglad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load(\"glTexParameterfv\");\n\tglad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load(\"glTexParameteri\");\n\tglad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load(\"glTexParameteriv\");\n\tglad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load(\"glTexImage1D\");\n\tglad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load(\"glTexImage2D\");\n\tglad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load(\"glDrawBuffer\");\n\tglad_glClear = (PFNGLCLEARPROC)load(\"glClear\");\n\tglad_glClearColor = (PFNGLCLEARCOLORPROC)load(\"glClearColor\");\n\tglad_glClearStencil = (PFNGLCLEARSTENCILPROC)load(\"glClearStencil\");\n\tglad_glClearDepth = (PFNGLCLEARDEPTHPROC)load(\"glClearDepth\");\n\tglad_glStencilMask = (PFNGLSTENCILMASKPROC)load(\"glStencilMask\");\n\tglad_glColorMask = (PFNGLCOLORMASKPROC)load(\"glColorMask\");\n\tglad_glDepthMask = (PFNGLDEPTHMASKPROC)load(\"glDepthMask\");\n\tglad_glDisable = (PFNGLDISABLEPROC)load(\"glDisable\");\n\tglad_glEnable = (PFNGLENABLEPROC)load(\"glEnable\");\n\tglad_glFinish = (PFNGLFINISHPROC)load(\"glFinish\");\n\tglad_glFlush = (PFNGLFLUSHPROC)load(\"glFlush\");\n\tglad_glBlendFunc = (PFNGLBLENDFUNCPROC)load(\"glBlendFunc\");\n\tglad_glLogicOp = (PFNGLLOGICOPPROC)load(\"glLogicOp\");\n\tglad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load(\"glStencilFunc\");\n\tglad_glStencilOp = (PFNGLSTENCILOPPROC)load(\"glStencilOp\");\n\tglad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load(\"glDepthFunc\");\n\tglad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load(\"glPixelStoref\");\n\tglad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load(\"glPixelStorei\");\n\tglad_glReadBuffer = (PFNGLREADBUFFERPROC)load(\"glReadBuffer\");\n\tglad_glReadPixels = (PFNGLREADPIXELSPROC)load(\"glReadPixels\");\n\tglad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load(\"glGetBooleanv\");\n\tglad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load(\"glGetDoublev\");\n\tglad_glGetError = (PFNGLGETERRORPROC)load(\"glGetError\");\n\tglad_glGetFloatv = (PFNGLGETFLOATVPROC)load(\"glGetFloatv\");\n\tglad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load(\"glGetIntegerv\");\n\tglad_glGetString = (PFNGLGETSTRINGPROC)load(\"glGetString\");\n\tglad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load(\"glGetTexImage\");\n\tglad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load(\"glGetTexParameterfv\");\n\tglad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load(\"glGetTexParameteriv\");\n\tglad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load(\"glGetTexLevelParameterfv\");\n\tglad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load(\"glGetTexLevelParameteriv\");\n\tglad_glIsEnabled = (PFNGLISENABLEDPROC)load(\"glIsEnabled\");\n\tglad_glDepthRange = (PFNGLDEPTHRANGEPROC)load(\"glDepthRange\");\n\tglad_glViewport = (PFNGLVIEWPORTPROC)load(\"glViewport\");\n}\nstatic void load_GL_VERSION_1_1(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_1_1) return;\n\tglad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load(\"glDrawArrays\");\n\tglad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load(\"glDrawElements\");\n\tglad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load(\"glPolygonOffset\");\n\tglad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load(\"glCopyTexImage1D\");\n\tglad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load(\"glCopyTexImage2D\");\n\tglad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load(\"glCopyTexSubImage1D\");\n\tglad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load(\"glCopyTexSubImage2D\");\n\tglad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load(\"glTexSubImage1D\");\n\tglad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load(\"glTexSubImage2D\");\n\tglad_glBindTexture = (PFNGLBINDTEXTUREPROC)load(\"glBindTexture\");\n\tglad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load(\"glDeleteTextures\");\n\tglad_glGenTextures = (PFNGLGENTEXTURESPROC)load(\"glGenTextures\");\n\tglad_glIsTexture = (PFNGLISTEXTUREPROC)load(\"glIsTexture\");\n}\nstatic void load_GL_VERSION_1_2(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_1_2) return;\n\tglad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load(\"glDrawRangeElements\");\n\tglad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load(\"glTexImage3D\");\n\tglad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load(\"glTexSubImage3D\");\n\tglad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load(\"glCopyTexSubImage3D\");\n}\nstatic void load_GL_VERSION_1_3(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_1_3) return;\n\tglad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load(\"glActiveTexture\");\n\tglad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load(\"glSampleCoverage\");\n\tglad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load(\"glCompressedTexImage3D\");\n\tglad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load(\"glCompressedTexImage2D\");\n\tglad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load(\"glCompressedTexImage1D\");\n\tglad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load(\"glCompressedTexSubImage3D\");\n\tglad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load(\"glCompressedTexSubImage2D\");\n\tglad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load(\"glCompressedTexSubImage1D\");\n\tglad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load(\"glGetCompressedTexImage\");\n}\nstatic void load_GL_VERSION_1_4(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_1_4) return;\n\tglad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load(\"glBlendFuncSeparate\");\n\tglad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load(\"glMultiDrawArrays\");\n\tglad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load(\"glMultiDrawElements\");\n\tglad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load(\"glPointParameterf\");\n\tglad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load(\"glPointParameterfv\");\n\tglad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load(\"glPointParameteri\");\n\tglad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load(\"glPointParameteriv\");\n\tglad_glBlendColor = (PFNGLBLENDCOLORPROC)load(\"glBlendColor\");\n\tglad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load(\"glBlendEquation\");\n}\nstatic void load_GL_VERSION_1_5(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_1_5) return;\n\tglad_glGenQueries = (PFNGLGENQUERIESPROC)load(\"glGenQueries\");\n\tglad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load(\"glDeleteQueries\");\n\tglad_glIsQuery = (PFNGLISQUERYPROC)load(\"glIsQuery\");\n\tglad_glBeginQuery = (PFNGLBEGINQUERYPROC)load(\"glBeginQuery\");\n\tglad_glEndQuery = (PFNGLENDQUERYPROC)load(\"glEndQuery\");\n\tglad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load(\"glGetQueryiv\");\n\tglad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load(\"glGetQueryObjectiv\");\n\tglad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load(\"glGetQueryObjectuiv\");\n\tglad_glBindBuffer = (PFNGLBINDBUFFERPROC)load(\"glBindBuffer\");\n\tglad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load(\"glDeleteBuffers\");\n\tglad_glGenBuffers = (PFNGLGENBUFFERSPROC)load(\"glGenBuffers\");\n\tglad_glIsBuffer = (PFNGLISBUFFERPROC)load(\"glIsBuffer\");\n\tglad_glBufferData = (PFNGLBUFFERDATAPROC)load(\"glBufferData\");\n\tglad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load(\"glBufferSubData\");\n\tglad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load(\"glGetBufferSubData\");\n\tglad_glMapBuffer = (PFNGLMAPBUFFERPROC)load(\"glMapBuffer\");\n\tglad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load(\"glUnmapBuffer\");\n\tglad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load(\"glGetBufferParameteriv\");\n\tglad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load(\"glGetBufferPointerv\");\n}\nstatic void load_GL_VERSION_2_0(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_2_0) return;\n\tglad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load(\"glBlendEquationSeparate\");\n\tglad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load(\"glDrawBuffers\");\n\tglad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load(\"glStencilOpSeparate\");\n\tglad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load(\"glStencilFuncSeparate\");\n\tglad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load(\"glStencilMaskSeparate\");\n\tglad_glAttachShader = (PFNGLATTACHSHADERPROC)load(\"glAttachShader\");\n\tglad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load(\"glBindAttribLocation\");\n\tglad_glCompileShader = (PFNGLCOMPILESHADERPROC)load(\"glCompileShader\");\n\tglad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load(\"glCreateProgram\");\n\tglad_glCreateShader = (PFNGLCREATESHADERPROC)load(\"glCreateShader\");\n\tglad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load(\"glDeleteProgram\");\n\tglad_glDeleteShader = (PFNGLDELETESHADERPROC)load(\"glDeleteShader\");\n\tglad_glDetachShader = (PFNGLDETACHSHADERPROC)load(\"glDetachShader\");\n\tglad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load(\"glDisableVertexAttribArray\");\n\tglad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load(\"glEnableVertexAttribArray\");\n\tglad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load(\"glGetActiveAttrib\");\n\tglad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load(\"glGetActiveUniform\");\n\tglad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load(\"glGetAttachedShaders\");\n\tglad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load(\"glGetAttribLocation\");\n\tglad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load(\"glGetProgramiv\");\n\tglad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load(\"glGetProgramInfoLog\");\n\tglad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load(\"glGetShaderiv\");\n\tglad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load(\"glGetShaderInfoLog\");\n\tglad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load(\"glGetShaderSource\");\n\tglad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load(\"glGetUniformLocation\");\n\tglad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load(\"glGetUniformfv\");\n\tglad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load(\"glGetUniformiv\");\n\tglad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load(\"glGetVertexAttribdv\");\n\tglad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load(\"glGetVertexAttribfv\");\n\tglad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load(\"glGetVertexAttribiv\");\n\tglad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load(\"glGetVertexAttribPointerv\");\n\tglad_glIsProgram = (PFNGLISPROGRAMPROC)load(\"glIsProgram\");\n\tglad_glIsShader = (PFNGLISSHADERPROC)load(\"glIsShader\");\n\tglad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load(\"glLinkProgram\");\n\tglad_glShaderSource = (PFNGLSHADERSOURCEPROC)load(\"glShaderSource\");\n\tglad_glUseProgram = (PFNGLUSEPROGRAMPROC)load(\"glUseProgram\");\n\tglad_glUniform1f = (PFNGLUNIFORM1FPROC)load(\"glUniform1f\");\n\tglad_glUniform2f = (PFNGLUNIFORM2FPROC)load(\"glUniform2f\");\n\tglad_glUniform3f = (PFNGLUNIFORM3FPROC)load(\"glUniform3f\");\n\tglad_glUniform4f = (PFNGLUNIFORM4FPROC)load(\"glUniform4f\");\n\tglad_glUniform1i = (PFNGLUNIFORM1IPROC)load(\"glUniform1i\");\n\tglad_glUniform2i = (PFNGLUNIFORM2IPROC)load(\"glUniform2i\");\n\tglad_glUniform3i = (PFNGLUNIFORM3IPROC)load(\"glUniform3i\");\n\tglad_glUniform4i = (PFNGLUNIFORM4IPROC)load(\"glUniform4i\");\n\tglad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load(\"glUniform1fv\");\n\tglad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load(\"glUniform2fv\");\n\tglad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load(\"glUniform3fv\");\n\tglad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load(\"glUniform4fv\");\n\tglad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load(\"glUniform1iv\");\n\tglad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load(\"glUniform2iv\");\n\tglad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load(\"glUniform3iv\");\n\tglad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load(\"glUniform4iv\");\n\tglad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load(\"glUniformMatrix2fv\");\n\tglad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load(\"glUniformMatrix3fv\");\n\tglad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load(\"glUniformMatrix4fv\");\n\tglad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load(\"glValidateProgram\");\n\tglad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load(\"glVertexAttrib1d\");\n\tglad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load(\"glVertexAttrib1dv\");\n\tglad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load(\"glVertexAttrib1f\");\n\tglad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load(\"glVertexAttrib1fv\");\n\tglad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load(\"glVertexAttrib1s\");\n\tglad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load(\"glVertexAttrib1sv\");\n\tglad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load(\"glVertexAttrib2d\");\n\tglad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load(\"glVertexAttrib2dv\");\n\tglad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load(\"glVertexAttrib2f\");\n\tglad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load(\"glVertexAttrib2fv\");\n\tglad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load(\"glVertexAttrib2s\");\n\tglad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load(\"glVertexAttrib2sv\");\n\tglad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load(\"glVertexAttrib3d\");\n\tglad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load(\"glVertexAttrib3dv\");\n\tglad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load(\"glVertexAttrib3f\");\n\tglad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load(\"glVertexAttrib3fv\");\n\tglad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load(\"glVertexAttrib3s\");\n\tglad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load(\"glVertexAttrib3sv\");\n\tglad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load(\"glVertexAttrib4Nbv\");\n\tglad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load(\"glVertexAttrib4Niv\");\n\tglad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load(\"glVertexAttrib4Nsv\");\n\tglad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load(\"glVertexAttrib4Nub\");\n\tglad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load(\"glVertexAttrib4Nubv\");\n\tglad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load(\"glVertexAttrib4Nuiv\");\n\tglad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load(\"glVertexAttrib4Nusv\");\n\tglad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load(\"glVertexAttrib4bv\");\n\tglad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load(\"glVertexAttrib4d\");\n\tglad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load(\"glVertexAttrib4dv\");\n\tglad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load(\"glVertexAttrib4f\");\n\tglad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load(\"glVertexAttrib4fv\");\n\tglad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load(\"glVertexAttrib4iv\");\n\tglad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load(\"glVertexAttrib4s\");\n\tglad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load(\"glVertexAttrib4sv\");\n\tglad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load(\"glVertexAttrib4ubv\");\n\tglad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load(\"glVertexAttrib4uiv\");\n\tglad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load(\"glVertexAttrib4usv\");\n\tglad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load(\"glVertexAttribPointer\");\n}\nstatic void load_GL_VERSION_2_1(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_2_1) return;\n\tglad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load(\"glUniformMatrix2x3fv\");\n\tglad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load(\"glUniformMatrix3x2fv\");\n\tglad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load(\"glUniformMatrix2x4fv\");\n\tglad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load(\"glUniformMatrix4x2fv\");\n\tglad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load(\"glUniformMatrix3x4fv\");\n\tglad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load(\"glUniformMatrix4x3fv\");\n}\nstatic void load_GL_VERSION_3_0(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_3_0) return;\n\tglad_glColorMaski = (PFNGLCOLORMASKIPROC)load(\"glColorMaski\");\n\tglad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load(\"glGetBooleani_v\");\n\tglad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load(\"glGetIntegeri_v\");\n\tglad_glEnablei = (PFNGLENABLEIPROC)load(\"glEnablei\");\n\tglad_glDisablei = (PFNGLDISABLEIPROC)load(\"glDisablei\");\n\tglad_glIsEnabledi = (PFNGLISENABLEDIPROC)load(\"glIsEnabledi\");\n\tglad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load(\"glBeginTransformFeedback\");\n\tglad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load(\"glEndTransformFeedback\");\n\tglad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load(\"glBindBufferRange\");\n\tglad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load(\"glBindBufferBase\");\n\tglad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load(\"glTransformFeedbackVaryings\");\n\tglad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load(\"glGetTransformFeedbackVarying\");\n\tglad_glClampColor = (PFNGLCLAMPCOLORPROC)load(\"glClampColor\");\n\tglad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load(\"glBeginConditionalRender\");\n\tglad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load(\"glEndConditionalRender\");\n\tglad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load(\"glVertexAttribIPointer\");\n\tglad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load(\"glGetVertexAttribIiv\");\n\tglad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load(\"glGetVertexAttribIuiv\");\n\tglad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load(\"glVertexAttribI1i\");\n\tglad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load(\"glVertexAttribI2i\");\n\tglad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load(\"glVertexAttribI3i\");\n\tglad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load(\"glVertexAttribI4i\");\n\tglad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load(\"glVertexAttribI1ui\");\n\tglad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load(\"glVertexAttribI2ui\");\n\tglad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load(\"glVertexAttribI3ui\");\n\tglad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load(\"glVertexAttribI4ui\");\n\tglad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load(\"glVertexAttribI1iv\");\n\tglad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load(\"glVertexAttribI2iv\");\n\tglad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load(\"glVertexAttribI3iv\");\n\tglad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load(\"glVertexAttribI4iv\");\n\tglad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load(\"glVertexAttribI1uiv\");\n\tglad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load(\"glVertexAttribI2uiv\");\n\tglad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load(\"glVertexAttribI3uiv\");\n\tglad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load(\"glVertexAttribI4uiv\");\n\tglad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load(\"glVertexAttribI4bv\");\n\tglad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load(\"glVertexAttribI4sv\");\n\tglad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load(\"glVertexAttribI4ubv\");\n\tglad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load(\"glVertexAttribI4usv\");\n\tglad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load(\"glGetUniformuiv\");\n\tglad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load(\"glBindFragDataLocation\");\n\tglad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load(\"glGetFragDataLocation\");\n\tglad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load(\"glUniform1ui\");\n\tglad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load(\"glUniform2ui\");\n\tglad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load(\"glUniform3ui\");\n\tglad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load(\"glUniform4ui\");\n\tglad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load(\"glUniform1uiv\");\n\tglad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load(\"glUniform2uiv\");\n\tglad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load(\"glUniform3uiv\");\n\tglad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load(\"glUniform4uiv\");\n\tglad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load(\"glTexParameterIiv\");\n\tglad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load(\"glTexParameterIuiv\");\n\tglad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load(\"glGetTexParameterIiv\");\n\tglad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load(\"glGetTexParameterIuiv\");\n\tglad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load(\"glClearBufferiv\");\n\tglad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load(\"glClearBufferuiv\");\n\tglad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load(\"glClearBufferfv\");\n\tglad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load(\"glClearBufferfi\");\n\tglad_glGetStringi = (PFNGLGETSTRINGIPROC)load(\"glGetStringi\");\n\tglad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load(\"glIsRenderbuffer\");\n\tglad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load(\"glBindRenderbuffer\");\n\tglad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load(\"glDeleteRenderbuffers\");\n\tglad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load(\"glGenRenderbuffers\");\n\tglad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load(\"glRenderbufferStorage\");\n\tglad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load(\"glGetRenderbufferParameteriv\");\n\tglad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load(\"glIsFramebuffer\");\n\tglad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load(\"glBindFramebuffer\");\n\tglad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load(\"glDeleteFramebuffers\");\n\tglad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load(\"glGenFramebuffers\");\n\tglad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load(\"glCheckFramebufferStatus\");\n\tglad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load(\"glFramebufferTexture1D\");\n\tglad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load(\"glFramebufferTexture2D\");\n\tglad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load(\"glFramebufferTexture3D\");\n\tglad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load(\"glFramebufferRenderbuffer\");\n\tglad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load(\"glGetFramebufferAttachmentParameteriv\");\n\tglad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load(\"glGenerateMipmap\");\n\tglad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load(\"glBlitFramebuffer\");\n\tglad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load(\"glRenderbufferStorageMultisample\");\n\tglad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load(\"glFramebufferTextureLayer\");\n\tglad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load(\"glMapBufferRange\");\n\tglad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load(\"glFlushMappedBufferRange\");\n\tglad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load(\"glBindVertexArray\");\n\tglad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load(\"glDeleteVertexArrays\");\n\tglad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load(\"glGenVertexArrays\");\n\tglad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load(\"glIsVertexArray\");\n}\nstatic void load_GL_VERSION_3_1(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_3_1) return;\n\tglad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load(\"glDrawArraysInstanced\");\n\tglad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load(\"glDrawElementsInstanced\");\n\tglad_glTexBuffer = (PFNGLTEXBUFFERPROC)load(\"glTexBuffer\");\n\tglad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load(\"glPrimitiveRestartIndex\");\n\tglad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load(\"glCopyBufferSubData\");\n\tglad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load(\"glGetUniformIndices\");\n\tglad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load(\"glGetActiveUniformsiv\");\n\tglad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load(\"glGetActiveUniformName\");\n\tglad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load(\"glGetUniformBlockIndex\");\n\tglad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load(\"glGetActiveUniformBlockiv\");\n\tglad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load(\"glGetActiveUniformBlockName\");\n\tglad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load(\"glUniformBlockBinding\");\n\tglad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load(\"glBindBufferRange\");\n\tglad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load(\"glBindBufferBase\");\n\tglad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load(\"glGetIntegeri_v\");\n}\nstatic void load_GL_VERSION_3_2(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_3_2) return;\n\tglad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load(\"glDrawElementsBaseVertex\");\n\tglad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load(\"glDrawRangeElementsBaseVertex\");\n\tglad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load(\"glDrawElementsInstancedBaseVertex\");\n\tglad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load(\"glMultiDrawElementsBaseVertex\");\n\tglad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load(\"glProvokingVertex\");\n\tglad_glFenceSync = (PFNGLFENCESYNCPROC)load(\"glFenceSync\");\n\tglad_glIsSync = (PFNGLISSYNCPROC)load(\"glIsSync\");\n\tglad_glDeleteSync = (PFNGLDELETESYNCPROC)load(\"glDeleteSync\");\n\tglad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load(\"glClientWaitSync\");\n\tglad_glWaitSync = (PFNGLWAITSYNCPROC)load(\"glWaitSync\");\n\tglad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load(\"glGetInteger64v\");\n\tglad_glGetSynciv = (PFNGLGETSYNCIVPROC)load(\"glGetSynciv\");\n\tglad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load(\"glGetInteger64i_v\");\n\tglad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load(\"glGetBufferParameteri64v\");\n\tglad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load(\"glFramebufferTexture\");\n\tglad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load(\"glTexImage2DMultisample\");\n\tglad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load(\"glTexImage3DMultisample\");\n\tglad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load(\"glGetMultisamplefv\");\n\tglad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load(\"glSampleMaski\");\n}\nstatic void load_GL_VERSION_3_3(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_3_3) return;\n\tglad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load(\"glBindFragDataLocationIndexed\");\n\tglad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load(\"glGetFragDataIndex\");\n\tglad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load(\"glGenSamplers\");\n\tglad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load(\"glDeleteSamplers\");\n\tglad_glIsSampler = (PFNGLISSAMPLERPROC)load(\"glIsSampler\");\n\tglad_glBindSampler = (PFNGLBINDSAMPLERPROC)load(\"glBindSampler\");\n\tglad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load(\"glSamplerParameteri\");\n\tglad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load(\"glSamplerParameteriv\");\n\tglad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load(\"glSamplerParameterf\");\n\tglad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load(\"glSamplerParameterfv\");\n\tglad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load(\"glSamplerParameterIiv\");\n\tglad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load(\"glSamplerParameterIuiv\");\n\tglad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load(\"glGetSamplerParameteriv\");\n\tglad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load(\"glGetSamplerParameterIiv\");\n\tglad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load(\"glGetSamplerParameterfv\");\n\tglad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load(\"glGetSamplerParameterIuiv\");\n\tglad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load(\"glQueryCounter\");\n\tglad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load(\"glGetQueryObjecti64v\");\n\tglad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load(\"glGetQueryObjectui64v\");\n\tglad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load(\"glVertexAttribDivisor\");\n\tglad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load(\"glVertexAttribP1ui\");\n\tglad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load(\"glVertexAttribP1uiv\");\n\tglad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load(\"glVertexAttribP2ui\");\n\tglad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load(\"glVertexAttribP2uiv\");\n\tglad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load(\"glVertexAttribP3ui\");\n\tglad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load(\"glVertexAttribP3uiv\");\n\tglad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load(\"glVertexAttribP4ui\");\n\tglad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load(\"glVertexAttribP4uiv\");\n\tglad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load(\"glVertexP2ui\");\n\tglad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load(\"glVertexP2uiv\");\n\tglad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load(\"glVertexP3ui\");\n\tglad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load(\"glVertexP3uiv\");\n\tglad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load(\"glVertexP4ui\");\n\tglad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load(\"glVertexP4uiv\");\n\tglad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load(\"glTexCoordP1ui\");\n\tglad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load(\"glTexCoordP1uiv\");\n\tglad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load(\"glTexCoordP2ui\");\n\tglad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load(\"glTexCoordP2uiv\");\n\tglad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load(\"glTexCoordP3ui\");\n\tglad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load(\"glTexCoordP3uiv\");\n\tglad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load(\"glTexCoordP4ui\");\n\tglad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load(\"glTexCoordP4uiv\");\n\tglad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load(\"glMultiTexCoordP1ui\");\n\tglad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load(\"glMultiTexCoordP1uiv\");\n\tglad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load(\"glMultiTexCoordP2ui\");\n\tglad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load(\"glMultiTexCoordP2uiv\");\n\tglad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load(\"glMultiTexCoordP3ui\");\n\tglad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load(\"glMultiTexCoordP3uiv\");\n\tglad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load(\"glMultiTexCoordP4ui\");\n\tglad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load(\"glMultiTexCoordP4uiv\");\n\tglad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load(\"glNormalP3ui\");\n\tglad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load(\"glNormalP3uiv\");\n\tglad_glColorP3ui = (PFNGLCOLORP3UIPROC)load(\"glColorP3ui\");\n\tglad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load(\"glColorP3uiv\");\n\tglad_glColorP4ui = (PFNGLCOLORP4UIPROC)load(\"glColorP4ui\");\n\tglad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load(\"glColorP4uiv\");\n\tglad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load(\"glSecondaryColorP3ui\");\n\tglad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load(\"glSecondaryColorP3uiv\");\n}\nstatic void load_GL_VERSION_4_0(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_0) return;\n\tglad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load(\"glMinSampleShading\");\n\tglad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load(\"glBlendEquationi\");\n\tglad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load(\"glBlendEquationSeparatei\");\n\tglad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load(\"glBlendFunci\");\n\tglad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load(\"glBlendFuncSeparatei\");\n\tglad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load(\"glDrawArraysIndirect\");\n\tglad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load(\"glDrawElementsIndirect\");\n\tglad_glUniform1d = (PFNGLUNIFORM1DPROC)load(\"glUniform1d\");\n\tglad_glUniform2d = (PFNGLUNIFORM2DPROC)load(\"glUniform2d\");\n\tglad_glUniform3d = (PFNGLUNIFORM3DPROC)load(\"glUniform3d\");\n\tglad_glUniform4d = (PFNGLUNIFORM4DPROC)load(\"glUniform4d\");\n\tglad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load(\"glUniform1dv\");\n\tglad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load(\"glUniform2dv\");\n\tglad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load(\"glUniform3dv\");\n\tglad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load(\"glUniform4dv\");\n\tglad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load(\"glUniformMatrix2dv\");\n\tglad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load(\"glUniformMatrix3dv\");\n\tglad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load(\"glUniformMatrix4dv\");\n\tglad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load(\"glUniformMatrix2x3dv\");\n\tglad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load(\"glUniformMatrix2x4dv\");\n\tglad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load(\"glUniformMatrix3x2dv\");\n\tglad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load(\"glUniformMatrix3x4dv\");\n\tglad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load(\"glUniformMatrix4x2dv\");\n\tglad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load(\"glUniformMatrix4x3dv\");\n\tglad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load(\"glGetUniformdv\");\n\tglad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load(\"glGetSubroutineUniformLocation\");\n\tglad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load(\"glGetSubroutineIndex\");\n\tglad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load(\"glGetActiveSubroutineUniformiv\");\n\tglad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load(\"glGetActiveSubroutineUniformName\");\n\tglad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load(\"glGetActiveSubroutineName\");\n\tglad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load(\"glUniformSubroutinesuiv\");\n\tglad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load(\"glGetUniformSubroutineuiv\");\n\tglad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load(\"glGetProgramStageiv\");\n\tglad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load(\"glPatchParameteri\");\n\tglad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load(\"glPatchParameterfv\");\n\tglad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load(\"glBindTransformFeedback\");\n\tglad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load(\"glDeleteTransformFeedbacks\");\n\tglad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load(\"glGenTransformFeedbacks\");\n\tglad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load(\"glIsTransformFeedback\");\n\tglad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load(\"glPauseTransformFeedback\");\n\tglad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load(\"glResumeTransformFeedback\");\n\tglad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load(\"glDrawTransformFeedback\");\n\tglad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load(\"glDrawTransformFeedbackStream\");\n\tglad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load(\"glBeginQueryIndexed\");\n\tglad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load(\"glEndQueryIndexed\");\n\tglad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load(\"glGetQueryIndexediv\");\n}\nstatic void load_GL_VERSION_4_1(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_1) return;\n\tglad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load(\"glReleaseShaderCompiler\");\n\tglad_glShaderBinary = (PFNGLSHADERBINARYPROC)load(\"glShaderBinary\");\n\tglad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load(\"glGetShaderPrecisionFormat\");\n\tglad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load(\"glDepthRangef\");\n\tglad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load(\"glClearDepthf\");\n\tglad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load(\"glGetProgramBinary\");\n\tglad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load(\"glProgramBinary\");\n\tglad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load(\"glProgramParameteri\");\n\tglad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load(\"glUseProgramStages\");\n\tglad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load(\"glActiveShaderProgram\");\n\tglad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load(\"glCreateShaderProgramv\");\n\tglad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load(\"glBindProgramPipeline\");\n\tglad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load(\"glDeleteProgramPipelines\");\n\tglad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load(\"glGenProgramPipelines\");\n\tglad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load(\"glIsProgramPipeline\");\n\tglad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load(\"glGetProgramPipelineiv\");\n\tglad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load(\"glProgramParameteri\");\n\tglad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load(\"glProgramUniform1i\");\n\tglad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load(\"glProgramUniform1iv\");\n\tglad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load(\"glProgramUniform1f\");\n\tglad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load(\"glProgramUniform1fv\");\n\tglad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)load(\"glProgramUniform1d\");\n\tglad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)load(\"glProgramUniform1dv\");\n\tglad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load(\"glProgramUniform1ui\");\n\tglad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load(\"glProgramUniform1uiv\");\n\tglad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load(\"glProgramUniform2i\");\n\tglad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load(\"glProgramUniform2iv\");\n\tglad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load(\"glProgramUniform2f\");\n\tglad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load(\"glProgramUniform2fv\");\n\tglad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)load(\"glProgramUniform2d\");\n\tglad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)load(\"glProgramUniform2dv\");\n\tglad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load(\"glProgramUniform2ui\");\n\tglad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load(\"glProgramUniform2uiv\");\n\tglad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load(\"glProgramUniform3i\");\n\tglad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load(\"glProgramUniform3iv\");\n\tglad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load(\"glProgramUniform3f\");\n\tglad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load(\"glProgramUniform3fv\");\n\tglad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)load(\"glProgramUniform3d\");\n\tglad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)load(\"glProgramUniform3dv\");\n\tglad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load(\"glProgramUniform3ui\");\n\tglad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load(\"glProgramUniform3uiv\");\n\tglad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load(\"glProgramUniform4i\");\n\tglad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load(\"glProgramUniform4iv\");\n\tglad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load(\"glProgramUniform4f\");\n\tglad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load(\"glProgramUniform4fv\");\n\tglad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)load(\"glProgramUniform4d\");\n\tglad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)load(\"glProgramUniform4dv\");\n\tglad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load(\"glProgramUniform4ui\");\n\tglad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load(\"glProgramUniform4uiv\");\n\tglad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load(\"glProgramUniformMatrix2fv\");\n\tglad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load(\"glProgramUniformMatrix3fv\");\n\tglad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load(\"glProgramUniformMatrix4fv\");\n\tglad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)load(\"glProgramUniformMatrix2dv\");\n\tglad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)load(\"glProgramUniformMatrix3dv\");\n\tglad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)load(\"glProgramUniformMatrix4dv\");\n\tglad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load(\"glProgramUniformMatrix2x3fv\");\n\tglad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load(\"glProgramUniformMatrix3x2fv\");\n\tglad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load(\"glProgramUniformMatrix2x4fv\");\n\tglad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load(\"glProgramUniformMatrix4x2fv\");\n\tglad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load(\"glProgramUniformMatrix3x4fv\");\n\tglad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load(\"glProgramUniformMatrix4x3fv\");\n\tglad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)load(\"glProgramUniformMatrix2x3dv\");\n\tglad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)load(\"glProgramUniformMatrix3x2dv\");\n\tglad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)load(\"glProgramUniformMatrix2x4dv\");\n\tglad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)load(\"glProgramUniformMatrix4x2dv\");\n\tglad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)load(\"glProgramUniformMatrix3x4dv\");\n\tglad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)load(\"glProgramUniformMatrix4x3dv\");\n\tglad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load(\"glValidateProgramPipeline\");\n\tglad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load(\"glGetProgramPipelineInfoLog\");\n\tglad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)load(\"glVertexAttribL1d\");\n\tglad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)load(\"glVertexAttribL2d\");\n\tglad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)load(\"glVertexAttribL3d\");\n\tglad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)load(\"glVertexAttribL4d\");\n\tglad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)load(\"glVertexAttribL1dv\");\n\tglad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)load(\"glVertexAttribL2dv\");\n\tglad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)load(\"glVertexAttribL3dv\");\n\tglad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)load(\"glVertexAttribL4dv\");\n\tglad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)load(\"glVertexAttribLPointer\");\n\tglad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)load(\"glGetVertexAttribLdv\");\n\tglad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load(\"glViewportArrayv\");\n\tglad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load(\"glViewportIndexedf\");\n\tglad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load(\"glViewportIndexedfv\");\n\tglad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load(\"glScissorArrayv\");\n\tglad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load(\"glScissorIndexed\");\n\tglad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load(\"glScissorIndexedv\");\n\tglad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load(\"glDepthRangeArrayv\");\n\tglad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load(\"glDepthRangeIndexed\");\n\tglad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load(\"glGetFloati_v\");\n\tglad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load(\"glGetDoublei_v\");\n}\nstatic void load_GL_VERSION_4_2(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_2) return;\n\tglad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)load(\"glDrawArraysInstancedBaseInstance\");\n\tglad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)load(\"glDrawElementsInstancedBaseInstance\");\n\tglad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)load(\"glDrawElementsInstancedBaseVertexBaseInstance\");\n\tglad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load(\"glGetInternalformativ\");\n\tglad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)load(\"glGetActiveAtomicCounterBufferiv\");\n\tglad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load(\"glBindImageTexture\");\n\tglad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load(\"glMemoryBarrier\");\n\tglad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)load(\"glTexStorage1D\");\n\tglad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load(\"glTexStorage2D\");\n\tglad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load(\"glTexStorage3D\");\n\tglad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)load(\"glDrawTransformFeedbackInstanced\");\n\tglad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)load(\"glDrawTransformFeedbackStreamInstanced\");\n}\nstatic void load_GL_VERSION_4_3(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_3) return;\n\tglad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)load(\"glClearBufferData\");\n\tglad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)load(\"glClearBufferSubData\");\n\tglad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load(\"glDispatchCompute\");\n\tglad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load(\"glDispatchComputeIndirect\");\n\tglad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load(\"glCopyImageSubData\");\n\tglad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load(\"glFramebufferParameteri\");\n\tglad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load(\"glGetFramebufferParameteriv\");\n\tglad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)load(\"glGetInternalformati64v\");\n\tglad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)load(\"glInvalidateTexSubImage\");\n\tglad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)load(\"glInvalidateTexImage\");\n\tglad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)load(\"glInvalidateBufferSubData\");\n\tglad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)load(\"glInvalidateBufferData\");\n\tglad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load(\"glInvalidateFramebuffer\");\n\tglad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load(\"glInvalidateSubFramebuffer\");\n\tglad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)load(\"glMultiDrawArraysIndirect\");\n\tglad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)load(\"glMultiDrawElementsIndirect\");\n\tglad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load(\"glGetProgramInterfaceiv\");\n\tglad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load(\"glGetProgramResourceIndex\");\n\tglad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load(\"glGetProgramResourceName\");\n\tglad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load(\"glGetProgramResourceiv\");\n\tglad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load(\"glGetProgramResourceLocation\");\n\tglad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)load(\"glGetProgramResourceLocationIndex\");\n\tglad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)load(\"glShaderStorageBlockBinding\");\n\tglad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load(\"glTexBufferRange\");\n\tglad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load(\"glTexStorage2DMultisample\");\n\tglad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load(\"glTexStorage3DMultisample\");\n\tglad_glTextureView = (PFNGLTEXTUREVIEWPROC)load(\"glTextureView\");\n\tglad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load(\"glBindVertexBuffer\");\n\tglad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load(\"glVertexAttribFormat\");\n\tglad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load(\"glVertexAttribIFormat\");\n\tglad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load(\"glVertexAttribLFormat\");\n\tglad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load(\"glVertexAttribBinding\");\n\tglad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load(\"glVertexBindingDivisor\");\n\tglad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load(\"glDebugMessageControl\");\n\tglad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load(\"glDebugMessageInsert\");\n\tglad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load(\"glDebugMessageCallback\");\n\tglad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load(\"glGetDebugMessageLog\");\n\tglad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load(\"glPushDebugGroup\");\n\tglad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load(\"glPopDebugGroup\");\n\tglad_glObjectLabel = (PFNGLOBJECTLABELPROC)load(\"glObjectLabel\");\n\tglad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load(\"glGetObjectLabel\");\n\tglad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load(\"glObjectPtrLabel\");\n\tglad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load(\"glGetObjectPtrLabel\");\n\tglad_glGetPointerv = (PFNGLGETPOINTERVPROC)load(\"glGetPointerv\");\n}\nstatic void load_GL_VERSION_4_4(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_4) return;\n\tglad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load(\"glBufferStorage\");\n\tglad_glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)load(\"glClearTexImage\");\n\tglad_glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)load(\"glClearTexSubImage\");\n\tglad_glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)load(\"glBindBuffersBase\");\n\tglad_glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)load(\"glBindBuffersRange\");\n\tglad_glBindTextures = (PFNGLBINDTEXTURESPROC)load(\"glBindTextures\");\n\tglad_glBindSamplers = (PFNGLBINDSAMPLERSPROC)load(\"glBindSamplers\");\n\tglad_glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)load(\"glBindImageTextures\");\n\tglad_glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)load(\"glBindVertexBuffers\");\n}\nstatic void load_GL_VERSION_4_5(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_5) return;\n\tglad_glClipControl = (PFNGLCLIPCONTROLPROC)load(\"glClipControl\");\n\tglad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC)load(\"glCreateTransformFeedbacks\");\n\tglad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)load(\"glTransformFeedbackBufferBase\");\n\tglad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)load(\"glTransformFeedbackBufferRange\");\n\tglad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC)load(\"glGetTransformFeedbackiv\");\n\tglad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC)load(\"glGetTransformFeedbacki_v\");\n\tglad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC)load(\"glGetTransformFeedbacki64_v\");\n\tglad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC)load(\"glCreateBuffers\");\n\tglad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC)load(\"glNamedBufferStorage\");\n\tglad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC)load(\"glNamedBufferData\");\n\tglad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC)load(\"glNamedBufferSubData\");\n\tglad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC)load(\"glCopyNamedBufferSubData\");\n\tglad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC)load(\"glClearNamedBufferData\");\n\tglad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC)load(\"glClearNamedBufferSubData\");\n\tglad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC)load(\"glMapNamedBuffer\");\n\tglad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC)load(\"glMapNamedBufferRange\");\n\tglad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC)load(\"glUnmapNamedBuffer\");\n\tglad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)load(\"glFlushMappedNamedBufferRange\");\n\tglad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC)load(\"glGetNamedBufferParameteriv\");\n\tglad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)load(\"glGetNamedBufferParameteri64v\");\n\tglad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC)load(\"glGetNamedBufferPointerv\");\n\tglad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)load(\"glGetNamedBufferSubData\");\n\tglad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC)load(\"glCreateFramebuffers\");\n\tglad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)load(\"glNamedFramebufferRenderbuffer\");\n\tglad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)load(\"glNamedFramebufferParameteri\");\n\tglad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)load(\"glNamedFramebufferTexture\");\n\tglad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)load(\"glNamedFramebufferTextureLayer\");\n\tglad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)load(\"glNamedFramebufferDrawBuffer\");\n\tglad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)load(\"glNamedFramebufferDrawBuffers\");\n\tglad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)load(\"glNamedFramebufferReadBuffer\");\n\tglad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)load(\"glInvalidateNamedFramebufferData\");\n\tglad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)load(\"glInvalidateNamedFramebufferSubData\");\n\tglad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)load(\"glClearNamedFramebufferiv\");\n\tglad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)load(\"glClearNamedFramebufferuiv\");\n\tglad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)load(\"glClearNamedFramebufferfv\");\n\tglad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)load(\"glClearNamedFramebufferfi\");\n\tglad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC)load(\"glBlitNamedFramebuffer\");\n\tglad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)load(\"glCheckNamedFramebufferStatus\");\n\tglad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)load(\"glGetNamedFramebufferParameteriv\");\n\tglad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load(\"glGetNamedFramebufferAttachmentParameteriv\");\n\tglad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC)load(\"glCreateRenderbuffers\");\n\tglad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC)load(\"glNamedRenderbufferStorage\");\n\tglad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)load(\"glNamedRenderbufferStorageMultisample\");\n\tglad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)load(\"glGetNamedRenderbufferParameteriv\");\n\tglad_glCreateTextures = (PFNGLCREATETEXTURESPROC)load(\"glCreateTextures\");\n\tglad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC)load(\"glTextureBuffer\");\n\tglad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC)load(\"glTextureBufferRange\");\n\tglad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC)load(\"glTextureStorage1D\");\n\tglad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC)load(\"glTextureStorage2D\");\n\tglad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC)load(\"glTextureStorage3D\");\n\tglad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)load(\"glTextureStorage2DMultisample\");\n\tglad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)load(\"glTextureStorage3DMultisample\");\n\tglad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC)load(\"glTextureSubImage1D\");\n\tglad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC)load(\"glTextureSubImage2D\");\n\tglad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC)load(\"glTextureSubImage3D\");\n\tglad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)load(\"glCompressedTextureSubImage1D\");\n\tglad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)load(\"glCompressedTextureSubImage2D\");\n\tglad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)load(\"glCompressedTextureSubImage3D\");\n\tglad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC)load(\"glCopyTextureSubImage1D\");\n\tglad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC)load(\"glCopyTextureSubImage2D\");\n\tglad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC)load(\"glCopyTextureSubImage3D\");\n\tglad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC)load(\"glTextureParameterf\");\n\tglad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC)load(\"glTextureParameterfv\");\n\tglad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC)load(\"glTextureParameteri\");\n\tglad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC)load(\"glTextureParameterIiv\");\n\tglad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC)load(\"glTextureParameterIuiv\");\n\tglad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC)load(\"glTextureParameteriv\");\n\tglad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC)load(\"glGenerateTextureMipmap\");\n\tglad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC)load(\"glBindTextureUnit\");\n\tglad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC)load(\"glGetTextureImage\");\n\tglad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)load(\"glGetCompressedTextureImage\");\n\tglad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC)load(\"glGetTextureLevelParameterfv\");\n\tglad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC)load(\"glGetTextureLevelParameteriv\");\n\tglad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC)load(\"glGetTextureParameterfv\");\n\tglad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC)load(\"glGetTextureParameterIiv\");\n\tglad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC)load(\"glGetTextureParameterIuiv\");\n\tglad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC)load(\"glGetTextureParameteriv\");\n\tglad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC)load(\"glCreateVertexArrays\");\n\tglad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC)load(\"glDisableVertexArrayAttrib\");\n\tglad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC)load(\"glEnableVertexArrayAttrib\");\n\tglad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC)load(\"glVertexArrayElementBuffer\");\n\tglad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC)load(\"glVertexArrayVertexBuffer\");\n\tglad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC)load(\"glVertexArrayVertexBuffers\");\n\tglad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC)load(\"glVertexArrayAttribBinding\");\n\tglad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC)load(\"glVertexArrayAttribFormat\");\n\tglad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC)load(\"glVertexArrayAttribIFormat\");\n\tglad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC)load(\"glVertexArrayAttribLFormat\");\n\tglad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC)load(\"glVertexArrayBindingDivisor\");\n\tglad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC)load(\"glGetVertexArrayiv\");\n\tglad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC)load(\"glGetVertexArrayIndexediv\");\n\tglad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC)load(\"glGetVertexArrayIndexed64iv\");\n\tglad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC)load(\"glCreateSamplers\");\n\tglad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC)load(\"glCreateProgramPipelines\");\n\tglad_glCreateQueries = (PFNGLCREATEQUERIESPROC)load(\"glCreateQueries\");\n\tglad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC)load(\"glGetQueryBufferObjecti64v\");\n\tglad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC)load(\"glGetQueryBufferObjectiv\");\n\tglad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC)load(\"glGetQueryBufferObjectui64v\");\n\tglad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC)load(\"glGetQueryBufferObjectuiv\");\n\tglad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load(\"glMemoryBarrierByRegion\");\n\tglad_glGetTextureSubImage = (PFNGLGETTEXTURESUBIMAGEPROC)load(\"glGetTextureSubImage\");\n\tglad_glGetCompressedTextureSubImage = (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)load(\"glGetCompressedTextureSubImage\");\n\tglad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load(\"glGetGraphicsResetStatus\");\n\tglad_glGetnCompressedTexImage = (PFNGLGETNCOMPRESSEDTEXIMAGEPROC)load(\"glGetnCompressedTexImage\");\n\tglad_glGetnTexImage = (PFNGLGETNTEXIMAGEPROC)load(\"glGetnTexImage\");\n\tglad_glGetnUniformdv = (PFNGLGETNUNIFORMDVPROC)load(\"glGetnUniformdv\");\n\tglad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load(\"glGetnUniformfv\");\n\tglad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load(\"glGetnUniformiv\");\n\tglad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load(\"glGetnUniformuiv\");\n\tglad_glReadnPixels = (PFNGLREADNPIXELSPROC)load(\"glReadnPixels\");\n\tglad_glGetnMapdv = (PFNGLGETNMAPDVPROC)load(\"glGetnMapdv\");\n\tglad_glGetnMapfv = (PFNGLGETNMAPFVPROC)load(\"glGetnMapfv\");\n\tglad_glGetnMapiv = (PFNGLGETNMAPIVPROC)load(\"glGetnMapiv\");\n\tglad_glGetnPixelMapfv = (PFNGLGETNPIXELMAPFVPROC)load(\"glGetnPixelMapfv\");\n\tglad_glGetnPixelMapuiv = (PFNGLGETNPIXELMAPUIVPROC)load(\"glGetnPixelMapuiv\");\n\tglad_glGetnPixelMapusv = (PFNGLGETNPIXELMAPUSVPROC)load(\"glGetnPixelMapusv\");\n\tglad_glGetnPolygonStipple = (PFNGLGETNPOLYGONSTIPPLEPROC)load(\"glGetnPolygonStipple\");\n\tglad_glGetnColorTable = (PFNGLGETNCOLORTABLEPROC)load(\"glGetnColorTable\");\n\tglad_glGetnConvolutionFilter = (PFNGLGETNCONVOLUTIONFILTERPROC)load(\"glGetnConvolutionFilter\");\n\tglad_glGetnSeparableFilter = (PFNGLGETNSEPARABLEFILTERPROC)load(\"glGetnSeparableFilter\");\n\tglad_glGetnHistogram = (PFNGLGETNHISTOGRAMPROC)load(\"glGetnHistogram\");\n\tglad_glGetnMinmax = (PFNGLGETNMINMAXPROC)load(\"glGetnMinmax\");\n\tglad_glTextureBarrier = (PFNGLTEXTUREBARRIERPROC)load(\"glTextureBarrier\");\n}\nstatic void load_GL_VERSION_4_6(GLADloadproc load) {\n\tif(!GLAD_GL_VERSION_4_6) return;\n\tglad_glSpecializeShader = (PFNGLSPECIALIZESHADERPROC)load(\"glSpecializeShader\");\n\tglad_glMultiDrawArraysIndirectCount = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)load(\"glMultiDrawArraysIndirectCount\");\n\tglad_glMultiDrawElementsIndirectCount = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)load(\"glMultiDrawElementsIndirectCount\");\n\tglad_glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC)load(\"glPolygonOffsetClamp\");\n}\nstatic int find_extensionsGL(void) {\n\tif (!get_exts()) return 0;\n\t(void)&has_ext;\n\tfree_exts();\n\treturn 1;\n}\n\nstatic void find_coreGL(void) {\n\n    /* Thank you @elmindreda\n     * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176\n     * https://github.com/glfw/glfw/blob/master/src/context.c#L36\n     */\n    int i, major, minor;\n\n    const char* version;\n    const char* prefixes[] = {\n        \"OpenGL ES-CM \",\n        \"OpenGL ES-CL \",\n        \"OpenGL ES \",\n        NULL\n    };\n\n    version = (const char*) glGetString(GL_VERSION);\n    if (!version) return;\n\n    for (i = 0;  prefixes[i];  i++) {\n        const size_t length = strlen(prefixes[i]);\n        if (strncmp(version, prefixes[i], length) == 0) {\n            version += length;\n            break;\n        }\n    }\n\n/* PR #18 */\n#ifdef _MSC_VER\n    sscanf_s(version, \"%d.%d\", &major, &minor);\n#else\n    sscanf(version, \"%d.%d\", &major, &minor);\n#endif\n\n    GLVersion.major = major; GLVersion.minor = minor;\n    max_loaded_major = major; max_loaded_minor = minor;\n\tGLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1;\n\tGLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1;\n\tGLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1;\n\tGLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1;\n\tGLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1;\n\tGLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1;\n\tGLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2;\n\tGLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2;\n\tGLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3;\n\tGLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3;\n\tGLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3;\n\tGLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3;\n\tGLAD_GL_VERSION_4_0 = (major == 4 && minor >= 0) || major > 4;\n\tGLAD_GL_VERSION_4_1 = (major == 4 && minor >= 1) || major > 4;\n\tGLAD_GL_VERSION_4_2 = (major == 4 && minor >= 2) || major > 4;\n\tGLAD_GL_VERSION_4_3 = (major == 4 && minor >= 3) || major > 4;\n\tGLAD_GL_VERSION_4_4 = (major == 4 && minor >= 4) || major > 4;\n\tGLAD_GL_VERSION_4_5 = (major == 4 && minor >= 5) || major > 4;\n\tGLAD_GL_VERSION_4_6 = (major == 4 && minor >= 6) || major > 4;\n\tif (GLVersion.major > 4 || (GLVersion.major >= 4 && GLVersion.minor >= 6)) {\n\t\tmax_loaded_major = 4;\n\t\tmax_loaded_minor = 6;\n\t}\n}\n\nint gladLoadGLLoader(GLADloadproc load) {\n\tGLVersion.major = 0; GLVersion.minor = 0;\n\tglGetString = (PFNGLGETSTRINGPROC)load(\"glGetString\");\n\tif(glGetString == NULL) return 0;\n\tif(glGetString(GL_VERSION) == NULL) return 0;\n\tfind_coreGL();\n\tload_GL_VERSION_1_0(load);\n\tload_GL_VERSION_1_1(load);\n\tload_GL_VERSION_1_2(load);\n\tload_GL_VERSION_1_3(load);\n\tload_GL_VERSION_1_4(load);\n\tload_GL_VERSION_1_5(load);\n\tload_GL_VERSION_2_0(load);\n\tload_GL_VERSION_2_1(load);\n\tload_GL_VERSION_3_0(load);\n\tload_GL_VERSION_3_1(load);\n\tload_GL_VERSION_3_2(load);\n\tload_GL_VERSION_3_3(load);\n\tload_GL_VERSION_4_0(load);\n\tload_GL_VERSION_4_1(load);\n\tload_GL_VERSION_4_2(load);\n\tload_GL_VERSION_4_3(load);\n\tload_GL_VERSION_4_4(load);\n\tload_GL_VERSION_4_5(load);\n\tload_GL_VERSION_4_6(load);\n\n\tif (!find_extensionsGL()) return 0;\n\treturn GLVersion.major != 0 || GLVersion.minor != 0;\n}\n\n"
  },
  {
    "path": "Hazel/vendor/entt/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017-2020 Michele Caini\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\ncopy 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\ncopy 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"
  },
  {
    "path": "Hazel/vendor/entt/include/entt.hpp",
    "content": "// #include \"core/algorithm.hpp\"\n#ifndef ENTT_CORE_ALGORITHM_HPP\n#define ENTT_CORE_ALGORITHM_HPP\n\n\n#include <vector>\n#include <utility>\n#include <iterator>\n#include <algorithm>\n#include <functional>\n// #include \"utility.hpp\"\n#ifndef ENTT_CORE_UTILITY_HPP\n#define ENTT_CORE_UTILITY_HPP\n\n\n#include <utility>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/*! @brief Identity function object (waiting for C++20). */\nstruct identity {\n    /**\n     * @brief Returns its argument unchanged.\n     * @tparam Type Type of the argument.\n     * @param value The actual argument.\n     * @return The submitted value as-is.\n     */\n    template<class Type>\n    constexpr Type && operator()(Type &&value) const ENTT_NOEXCEPT {\n        return std::forward<Type>(value);\n    }\n};\n\n\n/**\n * @brief Constant utility to disambiguate overloaded members of a class.\n * @tparam Type Type of the desired overload.\n * @tparam Class Type of class to which the member belongs.\n * @param member A valid pointer to a member.\n * @return Pointer to the member.\n */\ntemplate<typename Type, typename Class>\nconstexpr auto overload(Type Class:: *member) ENTT_NOEXCEPT { return member; }\n\n\n/**\n * @brief Constant utility to disambiguate overloaded functions.\n * @tparam Func Function type of the desired overload.\n * @param func A valid pointer to a function.\n * @return Pointer to the function.\n */\ntemplate<typename Func>\nconstexpr auto overload(Func *func) ENTT_NOEXCEPT { return func; }\n\n\n/**\n * @brief Helper type for visitors.\n * @tparam Func Types of function objects.\n */\ntemplate<class... Func>\nstruct overloaded: Func... {\n    using Func::operator()...;\n};\n\n\n/**\n * @brief Deduction guide.\n * @tparam Func Types of function objects.\n */\ntemplate<class... Func>\noverloaded(Func...) -> overloaded<Func...>;\n\n\n/**\n * @brief Basic implementation of a y-combinator.\n * @tparam Func Type of a potentially recursive function.\n */\ntemplate<class Func>\nstruct y_combinator {\n    /**\n     * @brief Constructs a y-combinator from a given function.\n     * @param recursive A potentially recursive function.\n     */\n    y_combinator(Func recursive):\n        func{std::move(recursive)}\n    {}\n\n    /**\n     * @brief Invokes a y-combinator and therefore its underlying function.\n     * @tparam Args Types of arguments to use to invoke the underlying function.\n     * @param args Parameters to use to invoke the underlying function.\n     * @return Return value of the underlying function, if any.\n     */\n    template <class... Args>\n    decltype(auto) operator()(Args &&... args) const {\n        return func(*this, std::forward<Args>(args)...);\n    }\n\n    /*! @copydoc operator()() */\n    template <class... Args>\n    decltype(auto) operator()(Args &&... args) {\n        return func(*this, std::forward<Args>(args)...);\n    }\n\nprivate:\n    Func func;\n};\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Function object to wrap `std::sort` in a class type.\n *\n * Unfortunately, `std::sort` cannot be passed as template argument to a class\n * template or a function template.<br/>\n * This class fills the gap by wrapping some flavors of `std::sort` in a\n * function object.\n */\nstruct std_sort {\n    /**\n     * @brief Sorts the elements in a range.\n     *\n     * Sorts the elements in a range using the given binary comparison function.\n     *\n     * @tparam It Type of random access iterator.\n     * @tparam Compare Type of comparison function object.\n     * @tparam Args Types of arguments to forward to the sort function.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param compare A valid comparison function object.\n     * @param args Arguments to forward to the sort function, if any.\n     */\n    template<typename It, typename Compare = std::less<>, typename... Args>\n    void operator()(It first, It last, Compare compare = Compare{}, Args &&... args) const {\n        std::sort(std::forward<Args>(args)..., std::move(first), std::move(last), std::move(compare));\n    }\n};\n\n\n/*! @brief Function object for performing insertion sort. */\nstruct insertion_sort {\n    /**\n     * @brief Sorts the elements in a range.\n     *\n     * Sorts the elements in a range using the given binary comparison function.\n     *\n     * @tparam It Type of random access iterator.\n     * @tparam Compare Type of comparison function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param compare A valid comparison function object.\n     */\n    template<typename It, typename Compare = std::less<>>\n    void operator()(It first, It last, Compare compare = Compare{}) const {\n        if(first < last) {\n            for(auto it = first+1; it < last; ++it) {\n                auto value = std::move(*it);\n                auto pre = it;\n\n                for(; pre > first && compare(value, *(pre-1)); --pre) {\n                    *pre = std::move(*(pre-1));\n                }\n\n                *pre = std::move(value);\n            }\n        }\n    }\n};\n\n\n/**\n * @brief Function object for performing LSD radix sort.\n * @tparam Bit Number of bits processed per pass.\n * @tparam N Maximum number of bits to sort.\n */\ntemplate<std::size_t Bit, std::size_t N>\nstruct radix_sort {\n    static_assert((N % Bit) == 0);\n\n    /**\n     * @brief Sorts the elements in a range.\n     *\n     * Sorts the elements in a range using the given _getter_ to access the\n     * actual data to be sorted.\n     *\n     * This implementation is inspired by the online book\n     * [Physically Based Rendering](http://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/Bounding_Volume_Hierarchies.html#RadixSort).\n     *\n     * @tparam It Type of random access iterator.\n     * @tparam Getter Type of _getter_ function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param getter A valid _getter_ function object.\n     */\n    template<typename It, typename Getter = identity>\n    void operator()(It first, It last, Getter getter = Getter{}) const {\n        if(first < last) {\n            static constexpr auto mask = (1 << Bit) - 1;\n            static constexpr auto buckets = 1 << Bit;\n            static constexpr auto passes = N / Bit;\n\n            using value_type = typename std::iterator_traits<It>::value_type;\n            std::vector<value_type> aux(std::distance(first, last));\n\n            auto part = [getter = std::move(getter)](auto from, auto to, auto out, auto start) {\n                std::size_t index[buckets]{};\n                std::size_t count[buckets]{};\n\n                std::for_each(from, to, [&getter, &count, start](const value_type &item) {\n                    ++count[(getter(item) >> start) & mask];\n                });\n\n                std::for_each(std::next(std::begin(index)), std::end(index), [index = std::begin(index), count = std::begin(count)](auto &item) mutable {\n                    item = *(index++) + *(count++);\n                });\n\n                std::for_each(from, to, [&getter, &out, &index, start](value_type &item) {\n                    out[index[(getter(item) >> start) & mask]++] = std::move(item);\n                });\n            };\n\n            for(std::size_t pass = 0; pass < (passes & ~1); pass += 2) {\n                part(first, last, aux.begin(), pass * Bit);\n                part(aux.begin(), aux.end(), first, (pass + 1) * Bit);\n            }\n\n            if constexpr(passes & 1) {\n                part(first, last, aux.begin(), (passes - 1) * Bit);\n                std::move(aux.begin(), aux.end(), first);\n            }\n        }\n    }\n};\n\n\n}\n\n\n#endif\n\n// #include \"core/attribute.h\"\n#ifndef ENTT_CORE_ATTRIBUTE_H\n#define ENTT_CORE_ATTRIBUTE_H\n\n\n#ifndef ENTT_EXPORT\n#   if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER\n#       define ENTT_EXPORT __declspec(dllexport)\n#       define ENTT_IMPORT __declspec(dllimport)\n#       define ENTT_HIDDEN\n#   elif defined __GNUC__ && __GNUC__ >= 4\n#       define ENTT_EXPORT __attribute__((visibility(\"default\")))\n#       define ENTT_IMPORT __attribute__((visibility(\"default\")))\n#       define ENTT_HIDDEN __attribute__((visibility(\"hidden\")))\n#   else /* Unsupported compiler */\n#       define ENTT_EXPORT\n#       define ENTT_IMPORT\n#       define ENTT_HIDDEN\n#   endif\n#endif\n\n\n#ifndef ENTT_API\n#   if defined ENTT_API_EXPORT\n#       define ENTT_API ENTT_EXPORT\n#   elif defined ENTT_API_IMPORT\n#       define ENTT_API ENTT_IMPORT\n#   else /* No API */\n#       define ENTT_API\n#   endif\n#endif\n\n\n#endif\n\n// #include \"core/family.hpp\"\n#ifndef ENTT_CORE_FAMILY_HPP\n#define ENTT_CORE_FAMILY_HPP\n\n\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n#ifndef ENTT_CORE_FWD_HPP\n#define ENTT_CORE_FWD_HPP\n\n\n// #include \"../config/config.h\"\n\n\n\nnamespace entt {\n\n\n/*! @brief Alias declaration for type identifiers. */\nusing id_type = ENTT_ID_TYPE;\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Dynamic identifier generator.\n *\n * Utility class template that can be used to assign unique identifiers to types\n * at runtime. Use different specializations to create separate sets of\n * identifiers.\n */\ntemplate<typename...>\nclass family {\n    inline static ENTT_MAYBE_ATOMIC(id_type) identifier{};\n\npublic:\n    /*! @brief Unsigned integer type. */\n    using family_type = id_type;\n\n    /*! @brief Statically generated unique identifier for the given type. */\n    template<typename... Type>\n    // at the time I'm writing, clang crashes during compilation if auto is used instead of family_type\n    inline static const family_type type = identifier++;\n};\n\n\n}\n\n\n#endif\n\n// #include \"core/hashed_string.hpp\"\n#ifndef ENTT_CORE_HASHED_STRING_HPP\n#define ENTT_CORE_HASHED_STRING_HPP\n\n\n#include <cstddef>\n#include <cstdint>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename>\nstruct fnv1a_traits;\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint32_t> {\n    using type = std::uint32_t;\n    static constexpr std::uint32_t offset = 2166136261;\n    static constexpr std::uint32_t prime = 16777619;\n};\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint64_t> {\n    using type = std::uint64_t;\n    static constexpr std::uint64_t offset = 14695981039346656037ull;\n    static constexpr std::uint64_t prime = 1099511628211ull;\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Zero overhead unique identifier.\n *\n * A hashed string is a compile-time tool that allows users to use\n * human-readable identifers in the codebase while using their numeric\n * counterparts at runtime.<br/>\n * Because of that, a hashed string can also be used in constant expressions if\n * required.\n *\n * @tparam Char Character type.\n */\ntemplate<typename Char>\nclass basic_hashed_string {\n    using traits_type = internal::fnv1a_traits<id_type>;\n\n    struct const_wrapper {\n        // non-explicit constructor on purpose\n        constexpr const_wrapper(const Char *curr) ENTT_NOEXCEPT: str{curr} {}\n        const Char *str;\n    };\n\n    // Fowler–Noll–Vo hash function v. 1a - the good\n    static constexpr id_type helper(const Char *curr) ENTT_NOEXCEPT {\n        auto value = traits_type::offset;\n\n        while(*curr != 0) {\n            value = (value ^ static_cast<traits_type::type>(*(curr++))) * traits_type::prime;\n        }\n\n        return value;\n    }\n\npublic:\n    /*! @brief Character type. */\n    using value_type = Char;\n    /*! @brief Unsigned integer type. */\n    using hash_type = id_type;\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * const auto value = basic_hashed_string<char>::to_value(\"my.png\");\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param str Human-readable identifer.\n     * @return The numeric representation of the string.\n     */\n    template<std::size_t N>\n    static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT {\n        return helper(str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT {\n        return helper(wrapper.str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string view.\n     * @param str Human-readable identifer.\n     * @param size Length of the string to hash.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const value_type *str, std::size_t size) ENTT_NOEXCEPT {\n        id_type partial{traits_type::offset};\n        while(size--) { partial = (partial^(str++)[0])*traits_type::prime; }\n        return partial;\n    }\n\n    /*! @brief Constructs an empty hashed string. */\n    constexpr basic_hashed_string() ENTT_NOEXCEPT\n        : str{nullptr}, hash{}\n    {}\n\n    /**\n     * @brief Constructs a hashed string from an array of const characters.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * basic_hashed_string<char> hs{\"my.png\"};\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param curr Human-readable identifer.\n     */\n    template<std::size_t N>\n    constexpr basic_hashed_string(const value_type (&curr)[N]) ENTT_NOEXCEPT\n        : str{curr}, hash{helper(curr)}\n    {}\n\n    /**\n     * @brief Explicit constructor on purpose to avoid constructing a hashed\n     * string directly from a `const value_type *`.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     */\n    explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT\n        : str{wrapper.str}, hash{helper(wrapper.str)}\n    {}\n\n    /**\n     * @brief Returns the human-readable representation of a hashed string.\n     * @return The string used to initialize the instance.\n     */\n    constexpr const value_type * data() const ENTT_NOEXCEPT {\n        return str;\n    }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr hash_type value() const ENTT_NOEXCEPT {\n        return hash;\n    }\n\n    /*! @copydoc data */\n    constexpr operator const value_type *() const ENTT_NOEXCEPT { return data(); }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr operator hash_type() const ENTT_NOEXCEPT { return value(); }\n\n    /**\n     * @brief Compares two hashed strings.\n     * @param other Hashed string with which to compare.\n     * @return True if the two hashed strings are identical, false otherwise.\n     */\n    constexpr bool operator==(const basic_hashed_string &other) const ENTT_NOEXCEPT {\n        return hash == other.hash;\n    }\n\nprivate:\n    const value_type *str;\n    hash_type hash;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the character type of the hashed string directly from a\n * human-readable identifer provided to the constructor.\n *\n * @tparam Char Character type.\n * @tparam N Number of characters of the identifier.\n * @param str Human-readable identifer.\n */\ntemplate<typename Char, std::size_t N>\nbasic_hashed_string(const Char (&str)[N]) ENTT_NOEXCEPT\n-> basic_hashed_string<Char>;\n\n\n/**\n * @brief Compares two hashed strings.\n * @tparam Char Character type.\n * @param lhs A valid hashed string.\n * @param rhs A valid hashed string.\n * @return True if the two hashed strings are identical, false otherwise.\n */\ntemplate<typename Char>\nconstexpr bool operator!=(const basic_hashed_string<Char> &lhs, const basic_hashed_string<Char> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_string = basic_hashed_string<char>;\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_wstring = basic_hashed_string<wchar_t>;\n\n\n}\n\n\n/**\n * @brief User defined literal for hashed strings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed string.\n */\nconstexpr entt::hashed_string operator\"\" ENTT_HS_SUFFIX(const char *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_string{str};\n}\n\n\n/**\n * @brief User defined literal for hashed wstrings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed wstring.\n */\nconstexpr entt::hashed_wstring operator\"\" ENTT_HWS_SUFFIX(const wchar_t *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_wstring{str};\n}\n\n\n#endif\n\n// #include \"core/ident.hpp\"\n#ifndef ENTT_CORE_IDENT_HPP\n#define ENTT_CORE_IDENT_HPP\n\n\n#include <tuple>\n#include <cstddef>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Types identifiers.\n *\n * Variable template used to generate identifiers at compile-time for the given\n * types. Use the `get` member function to know what's the identifier associated\n * to the specific type.\n *\n * @note\n * Identifiers are constant expression and can be used in any context where such\n * an expression is required. As an example:\n * @code{.cpp}\n * using id = entt::identifier<a_type, another_type>;\n *\n * switch(a_type_identifier) {\n * case id::type<a_type>:\n *     // ...\n *     break;\n * case id::type<another_type>:\n *     // ...\n *     break;\n * default:\n *     // ...\n * }\n * @endcode\n *\n * @tparam Types List of types for which to generate identifiers.\n */\ntemplate<typename... Types>\nclass identifier {\n    using tuple_type = std::tuple<std::decay_t<Types>...>;\n\n    template<typename Type, std::size_t... Indexes>\n    static constexpr id_type get(std::index_sequence<Indexes...>) {\n        static_assert(std::disjunction_v<std::is_same<Type, Types>...>);\n        return (0 + ... + (std::is_same_v<Type, std::tuple_element_t<Indexes, tuple_type>> ? id_type(Indexes) : id_type{}));\n    }\n\npublic:\n    /*! @brief Unsigned integer type. */\n    using identifier_type = id_type;\n\n    /*! @brief Statically generated unique identifier for the given type. */\n    template<typename Type>\n    static constexpr identifier_type type = get<std::decay_t<Type>>(std::index_sequence_for<Types...>{});\n};\n\n\n}\n\n\n#endif\n\n// #include \"core/monostate.hpp\"\n#ifndef ENTT_CORE_MONOSTATE_HPP\n#define ENTT_CORE_MONOSTATE_HPP\n\n\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Minimal implementation of the monostate pattern.\n *\n * A minimal, yet complete configuration system built on top of the monostate\n * pattern. Thread safe by design, it works only with basic types like `int`s or\n * `bool`s.<br/>\n * Multiple types and therefore more than one value can be associated with a\n * single key. Because of this, users must pay attention to use the same type\n * both during an assignment and when they try to read back their data.\n * Otherwise, they can incur in unexpected results.\n */\ntemplate<id_type>\nstruct monostate {\n    /**\n     * @brief Assigns a value of a specific type to a given key.\n     * @tparam Type Type of the value to assign.\n     * @param val User data to assign to the given key.\n     */\n    template<typename Type>\n    void operator=(Type val) const ENTT_NOEXCEPT {\n        value<Type> = val;\n    }\n\n    /**\n     * @brief Gets a value of a specific type for a given key.\n     * @tparam Type Type of the value to get.\n     * @return Stored value, if any.\n     */\n    template<typename Type>\n    operator Type() const ENTT_NOEXCEPT {\n        return value<Type>;\n    }\n\nprivate:\n    template<typename Type>\n    inline static ENTT_MAYBE_ATOMIC(Type) value{};\n};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Value Value used to differentiate between different variables.\n */\ntemplate<id_type Value>\ninline monostate<Value> monostate_v = {};\n\n\n}\n\n\n#endif\n\n// #include \"core/type_info.hpp\"\n#ifndef ENTT_CORE_TYPE_INFO_HPP\n#define ENTT_CORE_TYPE_INFO_HPP\n\n\n// #include \"../config/config.h\"\n\n// #include \"../core/attribute.h\"\n#ifndef ENTT_CORE_ATTRIBUTE_H\n#define ENTT_CORE_ATTRIBUTE_H\n\n\n#ifndef ENTT_EXPORT\n#   if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER\n#       define ENTT_EXPORT __declspec(dllexport)\n#       define ENTT_IMPORT __declspec(dllimport)\n#       define ENTT_HIDDEN\n#   elif defined __GNUC__ && __GNUC__ >= 4\n#       define ENTT_EXPORT __attribute__((visibility(\"default\")))\n#       define ENTT_IMPORT __attribute__((visibility(\"default\")))\n#       define ENTT_HIDDEN __attribute__((visibility(\"hidden\")))\n#   else /* Unsupported compiler */\n#       define ENTT_EXPORT\n#       define ENTT_IMPORT\n#       define ENTT_HIDDEN\n#   endif\n#endif\n\n\n#ifndef ENTT_API\n#   if defined ENTT_API_EXPORT\n#       define ENTT_API ENTT_EXPORT\n#   elif defined ENTT_API_IMPORT\n#       define ENTT_API ENTT_IMPORT\n#   else /* No API */\n#       define ENTT_API\n#   endif\n#endif\n\n\n#endif\n\n// #include \"hashed_string.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\nstruct ENTT_API type_index {\n    static id_type next() ENTT_NOEXCEPT {\n        static ENTT_MAYBE_ATOMIC(id_type) value{};\n        return value++;\n    }\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Type index.\n * @tparam Type Type for which to generate a sequential identifier.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_index {\n    /**\n     * @brief Returns the sequential identifier of a given type.\n     * @return The sequential identifier of a given type.\n     */\n    static id_type value() ENTT_NOEXCEPT {\n        static const id_type value = internal::type_index::next();\n        return value;\n    }\n};\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * indexable, false otherwise.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename, typename = void>\nstruct has_type_index: std::false_type {};\n\n\n/*! @brief has_type_index */\ntemplate<typename Type>\nstruct has_type_index<Type, std::void_t<decltype(type_index<Type>::value())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename Type>\ninline constexpr bool has_type_index_v = has_type_index<Type>::value;\n\n\n/**\n * @brief Type info.\n * @tparam Type Type for which to generate information.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_info {\n    /**\n     * @brief Returns the numeric representation of a given type.\n     * @return The numeric representation of the given type.\n     */\n#if defined ENTT_PRETTY_FUNCTION\n    static ENTT_PRETTY_FUNCTION_CONSTEXPR() id_type id() ENTT_NOEXCEPT {\n        ENTT_PRETTY_FUNCTION_CONSTEXPR(static const) auto value = entt::hashed_string::value(ENTT_PRETTY_FUNCTION);\n        return value;\n    }\n#else\n    static id_type id() ENTT_NOEXCEPT {\n        return type_index<Type>::value();\n    }\n#endif\n};\n\n\n}\n\n\n#endif\n\n// #include \"core/type_traits.hpp\"\n#ifndef ENTT_CORE_TYPE_TRAITS_HPP\n#define ENTT_CORE_TYPE_TRAITS_HPP\n\n\n#include <cstddef>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"hashed_string.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Wraps a static constant.\n * @tparam Value A static constant.\n */\ntemplate<auto Value>\nusing integral_constant = std::integral_constant<decltype(Value), Value>;\n\n\n/**\n * @brief Alias template to ease the creation of named values.\n * @tparam Value A constant value at least convertible to `id_type`.\n */\ntemplate<id_type Value>\nusing tag = integral_constant<Value>;\n\n\n/**\n * @brief Utility class to disambiguate overloaded functions.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\nstruct choice_t\n        // Unfortunately, doxygen cannot parse such a construct.\n        /*! @cond TURN_OFF_DOXYGEN */\n        : choice_t<N-1>\n        /*! @endcond TURN_OFF_DOXYGEN */\n{};\n\n\n/*! @copybrief choice_t */\ntemplate<>\nstruct choice_t<0> {};\n\n\n/**\n * @brief Variable template for the choice trick.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\ninline constexpr choice_t<N> choice{};\n\n\n/*! @brief A class to use to push around lists of types, nothing more. */\ntemplate<typename...>\nstruct type_list {};\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_size;\n\n\n/**\n * @brief Compile-time number of elements in a type list.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_size<type_list<Type...>>\n        : std::integral_constant<std::size_t, sizeof...(Type)>\n{};\n\n\n/**\n * @brief Helper variable template.\n * @tparam List Type list.\n */\ntemplate<class List>\ninline constexpr auto type_list_size_v = type_list_size<List>::value;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename...>\nstruct type_list_cat;\n\n\n/*! @brief Concatenates multiple type lists. */\ntemplate<>\nstruct type_list_cat<> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the first type list.\n * @tparam Other Types provided by the second type list.\n * @tparam List Other type lists, if any.\n */\ntemplate<typename... Type, typename... Other, typename... List>\nstruct type_list_cat<type_list<Type...>, type_list<Other...>, List...> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = typename type_list_cat<type_list<Type..., Other...>, List...>::type;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_cat<type_list<Type...>> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<Type...>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam List Type lists to concatenate.\n */\ntemplate<typename... List>\nusing type_list_cat_t = typename type_list_cat<List...>::type;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_unique;\n\n\n/**\n * @brief Removes duplicates types from a type list.\n * @tparam Type One of the types provided by the given type list.\n * @tparam Other The other types provided by the given type list.\n */\ntemplate<typename Type, typename... Other>\nstruct type_list_unique<type_list<Type, Other...>> {\n    /*! @brief A type list without duplicate types. */\n    using type = std::conditional_t<\n        std::disjunction_v<std::is_same<Type, Other>...>,\n        typename type_list_unique<type_list<Other...>>::type,\n        type_list_cat_t<type_list<Type>, typename type_list_unique<type_list<Other...>>::type>\n    >;\n};\n\n\n/*! @brief Removes duplicates types from a type list. */\ntemplate<>\nstruct type_list_unique<type_list<>> {\n    /*! @brief A type list without duplicate types. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Type A type list.\n */\ntemplate<typename Type>\nusing type_list_unique_t = typename type_list_unique<Type>::type;\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * equality comparable, false otherwise.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<typename Type, typename = std::void_t<>>\nstruct is_equality_comparable: std::false_type {};\n\n\n/*! @copydoc is_equality_comparable */\ntemplate<typename Type>\nstruct is_equality_comparable<Type, std::void_t<decltype(std::declval<Type>() == std::declval<Type>())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<class Type>\ninline constexpr auto is_equality_comparable_v = is_equality_comparable<Type>::value;\n\n\n/**\n * @brief Extracts the class of a non-static member object or function.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nclass member_class {\n    static_assert(std::is_member_pointer_v<Member>);\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...));\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...) const);\n\n    template<typename Class, typename Type>\n    static Class * clazz(Type Class:: *);\n\npublic:\n    /*! @brief The class of the given non-static member object or function. */\n    using type = std::remove_pointer_t<decltype(clazz(std::declval<Member>()))>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nusing member_class_t = typename member_class<Member>::type;\n\n\n}\n\n\n/**\n * @brief Defines an enum class to use for opaque identifiers and a dedicate\n * `to_integer` function to convert the identifiers to their underlying type.\n * @param clazz The name to use for the enum class.\n * @param type The underlying type for the enum class.\n */\n#define ENTT_OPAQUE_TYPE(clazz, type)\\\n    enum class clazz: type {};\\\n    constexpr auto to_integral(const clazz id) ENTT_NOEXCEPT {\\\n        return static_cast<std::underlying_type_t<clazz>>(id);\\\n    }\\\n    static_assert(true)\n\n\n#endif\n\n// #include \"core/utility.hpp\"\n\n// #include \"entity/actor.hpp\"\n#ifndef ENTT_ENTITY_ACTOR_HPP\n#define ENTT_ENTITY_ACTOR_HPP\n\n\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n// #include \"registry.hpp\"\n#ifndef ENTT_ENTITY_REGISTRY_HPP\n#define ENTT_ENTITY_REGISTRY_HPP\n\n\n#include <algorithm>\n#include <cstddef>\n#include <iterator>\n#include <memory>\n#include <tuple>\n#include <type_traits>\n#include <utility>\n#include <vector>\n// #include \"../config/config.h\"\n\n// #include \"../core/algorithm.hpp\"\n#ifndef ENTT_CORE_ALGORITHM_HPP\n#define ENTT_CORE_ALGORITHM_HPP\n\n\n#include <vector>\n#include <utility>\n#include <iterator>\n#include <algorithm>\n#include <functional>\n// #include \"utility.hpp\"\n#ifndef ENTT_CORE_UTILITY_HPP\n#define ENTT_CORE_UTILITY_HPP\n\n\n#include <utility>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/*! @brief Identity function object (waiting for C++20). */\nstruct identity {\n    /**\n     * @brief Returns its argument unchanged.\n     * @tparam Type Type of the argument.\n     * @param value The actual argument.\n     * @return The submitted value as-is.\n     */\n    template<class Type>\n    constexpr Type && operator()(Type &&value) const ENTT_NOEXCEPT {\n        return std::forward<Type>(value);\n    }\n};\n\n\n/**\n * @brief Constant utility to disambiguate overloaded members of a class.\n * @tparam Type Type of the desired overload.\n * @tparam Class Type of class to which the member belongs.\n * @param member A valid pointer to a member.\n * @return Pointer to the member.\n */\ntemplate<typename Type, typename Class>\nconstexpr auto overload(Type Class:: *member) ENTT_NOEXCEPT { return member; }\n\n\n/**\n * @brief Constant utility to disambiguate overloaded functions.\n * @tparam Func Function type of the desired overload.\n * @param func A valid pointer to a function.\n * @return Pointer to the function.\n */\ntemplate<typename Func>\nconstexpr auto overload(Func *func) ENTT_NOEXCEPT { return func; }\n\n\n/**\n * @brief Helper type for visitors.\n * @tparam Func Types of function objects.\n */\ntemplate<class... Func>\nstruct overloaded: Func... {\n    using Func::operator()...;\n};\n\n\n/**\n * @brief Deduction guide.\n * @tparam Func Types of function objects.\n */\ntemplate<class... Func>\noverloaded(Func...) -> overloaded<Func...>;\n\n\n/**\n * @brief Basic implementation of a y-combinator.\n * @tparam Func Type of a potentially recursive function.\n */\ntemplate<class Func>\nstruct y_combinator {\n    /**\n     * @brief Constructs a y-combinator from a given function.\n     * @param recursive A potentially recursive function.\n     */\n    y_combinator(Func recursive):\n        func{std::move(recursive)}\n    {}\n\n    /**\n     * @brief Invokes a y-combinator and therefore its underlying function.\n     * @tparam Args Types of arguments to use to invoke the underlying function.\n     * @param args Parameters to use to invoke the underlying function.\n     * @return Return value of the underlying function, if any.\n     */\n    template <class... Args>\n    decltype(auto) operator()(Args &&... args) const {\n        return func(*this, std::forward<Args>(args)...);\n    }\n\n    /*! @copydoc operator()() */\n    template <class... Args>\n    decltype(auto) operator()(Args &&... args) {\n        return func(*this, std::forward<Args>(args)...);\n    }\n\nprivate:\n    Func func;\n};\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Function object to wrap `std::sort` in a class type.\n *\n * Unfortunately, `std::sort` cannot be passed as template argument to a class\n * template or a function template.<br/>\n * This class fills the gap by wrapping some flavors of `std::sort` in a\n * function object.\n */\nstruct std_sort {\n    /**\n     * @brief Sorts the elements in a range.\n     *\n     * Sorts the elements in a range using the given binary comparison function.\n     *\n     * @tparam It Type of random access iterator.\n     * @tparam Compare Type of comparison function object.\n     * @tparam Args Types of arguments to forward to the sort function.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param compare A valid comparison function object.\n     * @param args Arguments to forward to the sort function, if any.\n     */\n    template<typename It, typename Compare = std::less<>, typename... Args>\n    void operator()(It first, It last, Compare compare = Compare{}, Args &&... args) const {\n        std::sort(std::forward<Args>(args)..., std::move(first), std::move(last), std::move(compare));\n    }\n};\n\n\n/*! @brief Function object for performing insertion sort. */\nstruct insertion_sort {\n    /**\n     * @brief Sorts the elements in a range.\n     *\n     * Sorts the elements in a range using the given binary comparison function.\n     *\n     * @tparam It Type of random access iterator.\n     * @tparam Compare Type of comparison function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param compare A valid comparison function object.\n     */\n    template<typename It, typename Compare = std::less<>>\n    void operator()(It first, It last, Compare compare = Compare{}) const {\n        if(first < last) {\n            for(auto it = first+1; it < last; ++it) {\n                auto value = std::move(*it);\n                auto pre = it;\n\n                for(; pre > first && compare(value, *(pre-1)); --pre) {\n                    *pre = std::move(*(pre-1));\n                }\n\n                *pre = std::move(value);\n            }\n        }\n    }\n};\n\n\n/**\n * @brief Function object for performing LSD radix sort.\n * @tparam Bit Number of bits processed per pass.\n * @tparam N Maximum number of bits to sort.\n */\ntemplate<std::size_t Bit, std::size_t N>\nstruct radix_sort {\n    static_assert((N % Bit) == 0);\n\n    /**\n     * @brief Sorts the elements in a range.\n     *\n     * Sorts the elements in a range using the given _getter_ to access the\n     * actual data to be sorted.\n     *\n     * This implementation is inspired by the online book\n     * [Physically Based Rendering](http://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/Bounding_Volume_Hierarchies.html#RadixSort).\n     *\n     * @tparam It Type of random access iterator.\n     * @tparam Getter Type of _getter_ function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param getter A valid _getter_ function object.\n     */\n    template<typename It, typename Getter = identity>\n    void operator()(It first, It last, Getter getter = Getter{}) const {\n        if(first < last) {\n            static constexpr auto mask = (1 << Bit) - 1;\n            static constexpr auto buckets = 1 << Bit;\n            static constexpr auto passes = N / Bit;\n\n            using value_type = typename std::iterator_traits<It>::value_type;\n            std::vector<value_type> aux(std::distance(first, last));\n\n            auto part = [getter = std::move(getter)](auto from, auto to, auto out, auto start) {\n                std::size_t index[buckets]{};\n                std::size_t count[buckets]{};\n\n                std::for_each(from, to, [&getter, &count, start](const value_type &item) {\n                    ++count[(getter(item) >> start) & mask];\n                });\n\n                std::for_each(std::next(std::begin(index)), std::end(index), [index = std::begin(index), count = std::begin(count)](auto &item) mutable {\n                    item = *(index++) + *(count++);\n                });\n\n                std::for_each(from, to, [&getter, &out, &index, start](value_type &item) {\n                    out[index[(getter(item) >> start) & mask]++] = std::move(item);\n                });\n            };\n\n            for(std::size_t pass = 0; pass < (passes & ~1); pass += 2) {\n                part(first, last, aux.begin(), pass * Bit);\n                part(aux.begin(), aux.end(), first, (pass + 1) * Bit);\n            }\n\n            if constexpr(passes & 1) {\n                part(first, last, aux.begin(), (passes - 1) * Bit);\n                std::move(aux.begin(), aux.end(), first);\n            }\n        }\n    }\n};\n\n\n}\n\n\n#endif\n\n// #include \"../core/fwd.hpp\"\n#ifndef ENTT_CORE_FWD_HPP\n#define ENTT_CORE_FWD_HPP\n\n\n// #include \"../config/config.h\"\n\n\n\nnamespace entt {\n\n\n/*! @brief Alias declaration for type identifiers. */\nusing id_type = ENTT_ID_TYPE;\n\n\n}\n\n\n#endif\n\n// #include \"../core/type_info.hpp\"\n#ifndef ENTT_CORE_TYPE_INFO_HPP\n#define ENTT_CORE_TYPE_INFO_HPP\n\n\n// #include \"../config/config.h\"\n\n// #include \"../core/attribute.h\"\n#ifndef ENTT_CORE_ATTRIBUTE_H\n#define ENTT_CORE_ATTRIBUTE_H\n\n\n#ifndef ENTT_EXPORT\n#   if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER\n#       define ENTT_EXPORT __declspec(dllexport)\n#       define ENTT_IMPORT __declspec(dllimport)\n#       define ENTT_HIDDEN\n#   elif defined __GNUC__ && __GNUC__ >= 4\n#       define ENTT_EXPORT __attribute__((visibility(\"default\")))\n#       define ENTT_IMPORT __attribute__((visibility(\"default\")))\n#       define ENTT_HIDDEN __attribute__((visibility(\"hidden\")))\n#   else /* Unsupported compiler */\n#       define ENTT_EXPORT\n#       define ENTT_IMPORT\n#       define ENTT_HIDDEN\n#   endif\n#endif\n\n\n#ifndef ENTT_API\n#   if defined ENTT_API_EXPORT\n#       define ENTT_API ENTT_EXPORT\n#   elif defined ENTT_API_IMPORT\n#       define ENTT_API ENTT_IMPORT\n#   else /* No API */\n#       define ENTT_API\n#   endif\n#endif\n\n\n#endif\n\n// #include \"hashed_string.hpp\"\n#ifndef ENTT_CORE_HASHED_STRING_HPP\n#define ENTT_CORE_HASHED_STRING_HPP\n\n\n#include <cstddef>\n#include <cstdint>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename>\nstruct fnv1a_traits;\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint32_t> {\n    using type = std::uint32_t;\n    static constexpr std::uint32_t offset = 2166136261;\n    static constexpr std::uint32_t prime = 16777619;\n};\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint64_t> {\n    using type = std::uint64_t;\n    static constexpr std::uint64_t offset = 14695981039346656037ull;\n    static constexpr std::uint64_t prime = 1099511628211ull;\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Zero overhead unique identifier.\n *\n * A hashed string is a compile-time tool that allows users to use\n * human-readable identifers in the codebase while using their numeric\n * counterparts at runtime.<br/>\n * Because of that, a hashed string can also be used in constant expressions if\n * required.\n *\n * @tparam Char Character type.\n */\ntemplate<typename Char>\nclass basic_hashed_string {\n    using traits_type = internal::fnv1a_traits<id_type>;\n\n    struct const_wrapper {\n        // non-explicit constructor on purpose\n        constexpr const_wrapper(const Char *curr) ENTT_NOEXCEPT: str{curr} {}\n        const Char *str;\n    };\n\n    // Fowler–Noll–Vo hash function v. 1a - the good\n    static constexpr id_type helper(const Char *curr) ENTT_NOEXCEPT {\n        auto value = traits_type::offset;\n\n        while(*curr != 0) {\n            value = (value ^ static_cast<traits_type::type>(*(curr++))) * traits_type::prime;\n        }\n\n        return value;\n    }\n\npublic:\n    /*! @brief Character type. */\n    using value_type = Char;\n    /*! @brief Unsigned integer type. */\n    using hash_type = id_type;\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * const auto value = basic_hashed_string<char>::to_value(\"my.png\");\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param str Human-readable identifer.\n     * @return The numeric representation of the string.\n     */\n    template<std::size_t N>\n    static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT {\n        return helper(str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT {\n        return helper(wrapper.str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string view.\n     * @param str Human-readable identifer.\n     * @param size Length of the string to hash.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const value_type *str, std::size_t size) ENTT_NOEXCEPT {\n        id_type partial{traits_type::offset};\n        while(size--) { partial = (partial^(str++)[0])*traits_type::prime; }\n        return partial;\n    }\n\n    /*! @brief Constructs an empty hashed string. */\n    constexpr basic_hashed_string() ENTT_NOEXCEPT\n        : str{nullptr}, hash{}\n    {}\n\n    /**\n     * @brief Constructs a hashed string from an array of const characters.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * basic_hashed_string<char> hs{\"my.png\"};\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param curr Human-readable identifer.\n     */\n    template<std::size_t N>\n    constexpr basic_hashed_string(const value_type (&curr)[N]) ENTT_NOEXCEPT\n        : str{curr}, hash{helper(curr)}\n    {}\n\n    /**\n     * @brief Explicit constructor on purpose to avoid constructing a hashed\n     * string directly from a `const value_type *`.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     */\n    explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT\n        : str{wrapper.str}, hash{helper(wrapper.str)}\n    {}\n\n    /**\n     * @brief Returns the human-readable representation of a hashed string.\n     * @return The string used to initialize the instance.\n     */\n    constexpr const value_type * data() const ENTT_NOEXCEPT {\n        return str;\n    }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr hash_type value() const ENTT_NOEXCEPT {\n        return hash;\n    }\n\n    /*! @copydoc data */\n    constexpr operator const value_type *() const ENTT_NOEXCEPT { return data(); }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr operator hash_type() const ENTT_NOEXCEPT { return value(); }\n\n    /**\n     * @brief Compares two hashed strings.\n     * @param other Hashed string with which to compare.\n     * @return True if the two hashed strings are identical, false otherwise.\n     */\n    constexpr bool operator==(const basic_hashed_string &other) const ENTT_NOEXCEPT {\n        return hash == other.hash;\n    }\n\nprivate:\n    const value_type *str;\n    hash_type hash;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the character type of the hashed string directly from a\n * human-readable identifer provided to the constructor.\n *\n * @tparam Char Character type.\n * @tparam N Number of characters of the identifier.\n * @param str Human-readable identifer.\n */\ntemplate<typename Char, std::size_t N>\nbasic_hashed_string(const Char (&str)[N]) ENTT_NOEXCEPT\n-> basic_hashed_string<Char>;\n\n\n/**\n * @brief Compares two hashed strings.\n * @tparam Char Character type.\n * @param lhs A valid hashed string.\n * @param rhs A valid hashed string.\n * @return True if the two hashed strings are identical, false otherwise.\n */\ntemplate<typename Char>\nconstexpr bool operator!=(const basic_hashed_string<Char> &lhs, const basic_hashed_string<Char> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_string = basic_hashed_string<char>;\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_wstring = basic_hashed_string<wchar_t>;\n\n\n}\n\n\n/**\n * @brief User defined literal for hashed strings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed string.\n */\nconstexpr entt::hashed_string operator\"\" ENTT_HS_SUFFIX(const char *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_string{str};\n}\n\n\n/**\n * @brief User defined literal for hashed wstrings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed wstring.\n */\nconstexpr entt::hashed_wstring operator\"\" ENTT_HWS_SUFFIX(const wchar_t *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_wstring{str};\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\nstruct ENTT_API type_index {\n    static id_type next() ENTT_NOEXCEPT {\n        static ENTT_MAYBE_ATOMIC(id_type) value{};\n        return value++;\n    }\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Type index.\n * @tparam Type Type for which to generate a sequential identifier.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_index {\n    /**\n     * @brief Returns the sequential identifier of a given type.\n     * @return The sequential identifier of a given type.\n     */\n    static id_type value() ENTT_NOEXCEPT {\n        static const id_type value = internal::type_index::next();\n        return value;\n    }\n};\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * indexable, false otherwise.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename, typename = void>\nstruct has_type_index: std::false_type {};\n\n\n/*! @brief has_type_index */\ntemplate<typename Type>\nstruct has_type_index<Type, std::void_t<decltype(type_index<Type>::value())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename Type>\ninline constexpr bool has_type_index_v = has_type_index<Type>::value;\n\n\n/**\n * @brief Type info.\n * @tparam Type Type for which to generate information.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_info {\n    /**\n     * @brief Returns the numeric representation of a given type.\n     * @return The numeric representation of the given type.\n     */\n#if defined ENTT_PRETTY_FUNCTION\n    static ENTT_PRETTY_FUNCTION_CONSTEXPR() id_type id() ENTT_NOEXCEPT {\n        ENTT_PRETTY_FUNCTION_CONSTEXPR(static const) auto value = entt::hashed_string::value(ENTT_PRETTY_FUNCTION);\n        return value;\n    }\n#else\n    static id_type id() ENTT_NOEXCEPT {\n        return type_index<Type>::value();\n    }\n#endif\n};\n\n\n}\n\n\n#endif\n\n// #include \"../core/type_traits.hpp\"\n#ifndef ENTT_CORE_TYPE_TRAITS_HPP\n#define ENTT_CORE_TYPE_TRAITS_HPP\n\n\n#include <cstddef>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"hashed_string.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Wraps a static constant.\n * @tparam Value A static constant.\n */\ntemplate<auto Value>\nusing integral_constant = std::integral_constant<decltype(Value), Value>;\n\n\n/**\n * @brief Alias template to ease the creation of named values.\n * @tparam Value A constant value at least convertible to `id_type`.\n */\ntemplate<id_type Value>\nusing tag = integral_constant<Value>;\n\n\n/**\n * @brief Utility class to disambiguate overloaded functions.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\nstruct choice_t\n        // Unfortunately, doxygen cannot parse such a construct.\n        /*! @cond TURN_OFF_DOXYGEN */\n        : choice_t<N-1>\n        /*! @endcond TURN_OFF_DOXYGEN */\n{};\n\n\n/*! @copybrief choice_t */\ntemplate<>\nstruct choice_t<0> {};\n\n\n/**\n * @brief Variable template for the choice trick.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\ninline constexpr choice_t<N> choice{};\n\n\n/*! @brief A class to use to push around lists of types, nothing more. */\ntemplate<typename...>\nstruct type_list {};\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_size;\n\n\n/**\n * @brief Compile-time number of elements in a type list.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_size<type_list<Type...>>\n        : std::integral_constant<std::size_t, sizeof...(Type)>\n{};\n\n\n/**\n * @brief Helper variable template.\n * @tparam List Type list.\n */\ntemplate<class List>\ninline constexpr auto type_list_size_v = type_list_size<List>::value;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename...>\nstruct type_list_cat;\n\n\n/*! @brief Concatenates multiple type lists. */\ntemplate<>\nstruct type_list_cat<> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the first type list.\n * @tparam Other Types provided by the second type list.\n * @tparam List Other type lists, if any.\n */\ntemplate<typename... Type, typename... Other, typename... List>\nstruct type_list_cat<type_list<Type...>, type_list<Other...>, List...> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = typename type_list_cat<type_list<Type..., Other...>, List...>::type;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_cat<type_list<Type...>> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<Type...>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam List Type lists to concatenate.\n */\ntemplate<typename... List>\nusing type_list_cat_t = typename type_list_cat<List...>::type;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_unique;\n\n\n/**\n * @brief Removes duplicates types from a type list.\n * @tparam Type One of the types provided by the given type list.\n * @tparam Other The other types provided by the given type list.\n */\ntemplate<typename Type, typename... Other>\nstruct type_list_unique<type_list<Type, Other...>> {\n    /*! @brief A type list without duplicate types. */\n    using type = std::conditional_t<\n        std::disjunction_v<std::is_same<Type, Other>...>,\n        typename type_list_unique<type_list<Other...>>::type,\n        type_list_cat_t<type_list<Type>, typename type_list_unique<type_list<Other...>>::type>\n    >;\n};\n\n\n/*! @brief Removes duplicates types from a type list. */\ntemplate<>\nstruct type_list_unique<type_list<>> {\n    /*! @brief A type list without duplicate types. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Type A type list.\n */\ntemplate<typename Type>\nusing type_list_unique_t = typename type_list_unique<Type>::type;\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * equality comparable, false otherwise.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<typename Type, typename = std::void_t<>>\nstruct is_equality_comparable: std::false_type {};\n\n\n/*! @copydoc is_equality_comparable */\ntemplate<typename Type>\nstruct is_equality_comparable<Type, std::void_t<decltype(std::declval<Type>() == std::declval<Type>())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<class Type>\ninline constexpr auto is_equality_comparable_v = is_equality_comparable<Type>::value;\n\n\n/**\n * @brief Extracts the class of a non-static member object or function.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nclass member_class {\n    static_assert(std::is_member_pointer_v<Member>);\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...));\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...) const);\n\n    template<typename Class, typename Type>\n    static Class * clazz(Type Class:: *);\n\npublic:\n    /*! @brief The class of the given non-static member object or function. */\n    using type = std::remove_pointer_t<decltype(clazz(std::declval<Member>()))>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nusing member_class_t = typename member_class<Member>::type;\n\n\n}\n\n\n/**\n * @brief Defines an enum class to use for opaque identifiers and a dedicate\n * `to_integer` function to convert the identifiers to their underlying type.\n * @param clazz The name to use for the enum class.\n * @param type The underlying type for the enum class.\n */\n#define ENTT_OPAQUE_TYPE(clazz, type)\\\n    enum class clazz: type {};\\\n    constexpr auto to_integral(const clazz id) ENTT_NOEXCEPT {\\\n        return static_cast<std::underlying_type_t<clazz>>(id);\\\n    }\\\n    static_assert(true)\n\n\n#endif\n\n// #include \"../signal/sigh.hpp\"\n#ifndef ENTT_SIGNAL_SIGH_HPP\n#define ENTT_SIGNAL_SIGH_HPP\n\n\n#include <vector>\n#include <utility>\n#include <iterator>\n#include <algorithm>\n#include <functional>\n#include <type_traits>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n// #include \"delegate.hpp\"\n#ifndef ENTT_SIGNAL_DELEGATE_HPP\n#define ENTT_SIGNAL_DELEGATE_HPP\n\n\n#include <tuple>\n#include <cstddef>\n#include <utility>\n#include <functional>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename Ret, typename... Args>\nauto function_pointer(Ret(*)(Args...)) -> Ret(*)(Args...);\n\n\ntemplate<typename Ret, typename Type, typename... Args, typename Other>\nauto function_pointer(Ret(*)(Type, Args...), Other &&) -> Ret(*)(Args...);\n\n\ntemplate<typename Class, typename Ret, typename... Args, typename... Other>\nauto function_pointer(Ret(Class:: *)(Args...), Other &&...) -> Ret(*)(Args...);\n\n\ntemplate<typename Class, typename Ret, typename... Args, typename... Other>\nauto function_pointer(Ret(Class:: *)(Args...) const, Other &&...) -> Ret(*)(Args...);\n\n\ntemplate<typename Class, typename Type, typename... Other>\nauto function_pointer(Type Class:: *, Other &&...) -> Type(*)();\n\n\ntemplate<typename... Type>\nusing function_pointer_t = decltype(internal::function_pointer(std::declval<Type>()...));\n\n\ntemplate<typename... Class, typename Ret, typename... Args>\nconstexpr auto index_sequence_for(Ret(*)(Args...)) {\n    return std::index_sequence_for<Class..., Args...>{};\n}\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/*! @brief Used to wrap a function or a member of a specified type. */\ntemplate<auto>\nstruct connect_arg_t {};\n\n\n/*! @brief Constant of type connect_arg_t used to disambiguate calls. */\ntemplate<auto Func>\ninline constexpr connect_arg_t<Func> connect_arg{};\n\n\n/**\n * @brief Basic delegate implementation.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is a function type.\n */\ntemplate<typename>\nclass delegate;\n\n\n/**\n * @brief Utility class to use to send around functions and members.\n *\n * Unmanaged delegate for function pointers and members. Users of this class are\n * in charge of disconnecting instances before deleting them.\n *\n * A delegate can be used as a general purpose invoker without memory overhead\n * for free functions possibly with payloads and bound or unbound members.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nclass delegate<Ret(Args...)> {\n    using proto_fn_type = Ret(const void *, Args...);\n\n    template<auto Candidate, std::size_t... Index>\n    auto wrap(std::index_sequence<Index...>) ENTT_NOEXCEPT {\n        return [](const void *, Args... args) -> Ret {\n            const auto arguments = std::forward_as_tuple(std::forward<Args>(args)...);\n            return Ret(std::invoke(Candidate, std::forward<std::tuple_element_t<Index, std::tuple<Args...>>>(std::get<Index>(arguments))...));\n        };\n    }\n\n    template<auto Candidate, typename Type, std::size_t... Index>\n    auto wrap(Type &, std::index_sequence<Index...>) ENTT_NOEXCEPT {\n        return [](const void *payload, Args... args) -> Ret {\n            const auto arguments = std::forward_as_tuple(std::forward<Args>(args)...);\n            Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n            return Ret(std::invoke(Candidate, *curr, std::forward<std::tuple_element_t<Index, std::tuple<Args...>>>(std::get<Index>(arguments))...));\n        };\n    }\n\n    template<auto Candidate, typename Type, std::size_t... Index>\n    auto wrap(Type *, std::index_sequence<Index...>) ENTT_NOEXCEPT {\n        return [](const void *payload, Args... args) -> Ret {\n            const auto arguments = std::forward_as_tuple(std::forward<Args>(args)...);\n            Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n            return Ret(std::invoke(Candidate, curr, std::forward<std::tuple_element_t<Index, std::tuple<Args...>>>(std::get<Index>(arguments))...));\n        };\n    }\n\npublic:\n    /*! @brief Function type of the delegate. */\n    using function_type = Ret(Args...);\n\n    /*! @brief Default constructor. */\n    delegate() ENTT_NOEXCEPT\n        : fn{nullptr}, data{nullptr}\n    {}\n\n    /**\n     * @brief Constructs a delegate and connects a free function or an unbound\n     * member.\n     * @tparam Candidate Function or member to connect to the delegate.\n     */\n    template<auto Candidate>\n    delegate(connect_arg_t<Candidate>) ENTT_NOEXCEPT\n        : delegate{}\n    {\n        connect<Candidate>();\n    }\n\n    /**\n     * @brief Constructs a delegate and connects a free function with payload or\n     * a bound member.\n     * @tparam Candidate Function or member to connect to the delegate.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    delegate(connect_arg_t<Candidate>, Type &&value_or_instance) ENTT_NOEXCEPT\n        : delegate{}\n    {\n        connect<Candidate>(std::forward<Type>(value_or_instance));\n    }\n\n    /**\n     * @brief Connects a free function or an unbound member to a delegate.\n     * @tparam Candidate Function or member to connect to the delegate.\n     */\n    template<auto Candidate>\n    void connect() ENTT_NOEXCEPT {\n        data = nullptr;\n\n        if constexpr(std::is_invocable_r_v<Ret, decltype(Candidate), Args...>) {\n            fn = [](const void *, Args... args) -> Ret {\n                return Ret(std::invoke(Candidate, std::forward<Args>(args)...));\n            };\n        } else if constexpr(std::is_member_pointer_v<decltype(Candidate)>) {\n            fn = wrap<Candidate>(internal::index_sequence_for<std::tuple_element_t<0, std::tuple<Args...>>>(internal::function_pointer_t<decltype(Candidate)>{}));\n        } else {\n            fn = wrap<Candidate>(internal::index_sequence_for(internal::function_pointer_t<decltype(Candidate)>{}));\n        }\n    }\n\n    /**\n     * @brief Connects a free function with payload or a bound member to a\n     * delegate.\n     *\n     * The delegate isn't responsible for the connected object or the payload.\n     * Users must always guarantee that the lifetime of the instance overcomes\n     * the one  of the delegate.<br/>\n     * When used to connect a free function with payload, its signature must be\n     * such that the instance is the first argument before the ones used to\n     * define the delegate itself.\n     *\n     * @tparam Candidate Function or member to connect to the delegate.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid reference that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    void connect(Type &value_or_instance) ENTT_NOEXCEPT {\n        data = &value_or_instance;\n\n        if constexpr(std::is_invocable_r_v<Ret, decltype(Candidate), Type &, Args...>) {\n            fn = [](const void *payload, Args... args) -> Ret {\n                Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n                return Ret(std::invoke(Candidate, *curr, std::forward<Args>(args)...));\n            };\n        } else {\n            fn = wrap<Candidate>(value_or_instance, internal::index_sequence_for(internal::function_pointer_t<decltype(Candidate), Type>{}));\n        }\n    }\n\n    /**\n     * @brief Connects a free function with payload or a bound member to a\n     * delegate.\n     *\n     * @sa connect(Type &)\n     *\n     * @tparam Candidate Function or member to connect to the delegate.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid pointer that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    void connect(Type *value_or_instance) ENTT_NOEXCEPT {\n        data = value_or_instance;\n\n        if constexpr(std::is_invocable_r_v<Ret, decltype(Candidate), Type *, Args...>) {\n            fn = [](const void *payload, Args... args) -> Ret {\n                Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n                return Ret(std::invoke(Candidate, curr, std::forward<Args>(args)...));\n            };\n        } else {\n            fn = wrap<Candidate>(value_or_instance, internal::index_sequence_for(internal::function_pointer_t<decltype(Candidate), Type>{}));\n        }\n    }\n\n    /**\n     * @brief Resets a delegate.\n     *\n     * After a reset, a delegate cannot be invoked anymore.\n     */\n    void reset() ENTT_NOEXCEPT {\n        fn = nullptr;\n        data = nullptr;\n    }\n\n    /**\n     * @brief Returns the instance or the payload linked to a delegate, if any.\n     * @return An opaque pointer to the underlying data.\n     */\n    const void * instance() const ENTT_NOEXCEPT {\n        return data;\n    }\n\n    /**\n     * @brief Triggers a delegate.\n     *\n     * The delegate invokes the underlying function and returns the result.\n     *\n     * @warning\n     * Attempting to trigger an invalid delegate results in undefined\n     * behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * delegate has not yet been set.\n     *\n     * @param args Arguments to use to invoke the underlying function.\n     * @return The value returned by the underlying function.\n     */\n    Ret operator()(Args... args) const {\n        ENTT_ASSERT(fn);\n        return fn(data, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Checks whether a delegate actually stores a listener.\n     * @return False if the delegate is empty, true otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        // no need to test also data\n        return !(fn == nullptr);\n    }\n\n    /**\n     * @brief Compares the contents of two delegates.\n     * @param other Delegate with which to compare.\n     * @return False if the two contents differ, true otherwise.\n     */\n    bool operator==(const delegate<Ret(Args...)> &other) const ENTT_NOEXCEPT {\n        return fn == other.fn && data == other.data;\n    }\n\nprivate:\n    proto_fn_type *fn;\n    const void *data;\n};\n\n\n/**\n * @brief Compares the contents of two delegates.\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n * @param lhs A valid delegate object.\n * @param rhs A valid delegate object.\n * @return True if the two contents differ, false otherwise.\n */\ntemplate<typename Ret, typename... Args>\nbool operator!=(const delegate<Ret(Args...)> &lhs, const delegate<Ret(Args...)> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/**\n * @brief Deduction guide.\n * @tparam Candidate Function or member to connect to the delegate.\n */\ntemplate<auto Candidate>\ndelegate(connect_arg_t<Candidate>) ENTT_NOEXCEPT\n-> delegate<std::remove_pointer_t<internal::function_pointer_t<decltype(Candidate)>>>;\n\n\n/**\n * @brief Deduction guide.\n * @tparam Candidate Function or member to connect to the delegate.\n * @tparam Type Type of class or type of payload.\n */\ntemplate<auto Candidate, typename Type>\ndelegate(connect_arg_t<Candidate>, Type &&) ENTT_NOEXCEPT\n-> delegate<std::remove_pointer_t<internal::function_pointer_t<decltype(Candidate), Type>>>;\n\n\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n#ifndef ENTT_SIGNAL_FWD_HPP\n#define ENTT_SIGNAL_FWD_HPP\n\n\nnamespace entt {\n\n\n/*! @class delegate */\ntemplate<typename>\nclass delegate;\n\n/*! @class dispatcher */\nclass dispatcher;\n\n/*! @class emitter */\ntemplate<typename>\nclass emitter;\n\n/*! @class connection */\nclass connection;\n\n/*! @class scoped_connection */\nstruct scoped_connection;\n\n/*! @class sink */\ntemplate<typename>\nclass sink;\n\n/*! @class sigh */\ntemplate<typename>\nclass sigh;\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Sink class.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is a function type.\n *\n * @tparam Function A valid function type.\n */\ntemplate<typename Function>\nclass sink;\n\n\n/**\n * @brief Unmanaged signal handler.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is a function type.\n *\n * @tparam Function A valid function type.\n */\ntemplate<typename Function>\nclass sigh;\n\n\n/**\n * @brief Unmanaged signal handler.\n *\n * It works directly with references to classes and pointers to member functions\n * as well as pointers to free functions. Users of this class are in charge of\n * disconnecting instances before deleting them.\n *\n * This class serves mainly two purposes:\n *\n * * Creating signals to use later to notify a bunch of listeners.\n * * Collecting results from a set of functions like in a voting system.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nclass sigh<Ret(Args...)> {\n    /*! @brief A sink is allowed to modify a signal. */\n    friend class sink<Ret(Args...)>;\n\npublic:\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Sink type. */\n    using sink_type = entt::sink<Ret(Args...)>;\n\n    /**\n     * @brief Instance type when it comes to connecting member functions.\n     * @tparam Class Type of class to which the member function belongs.\n     */\n    template<typename Class>\n    using instance_type = Class *;\n\n    /**\n     * @brief Number of listeners connected to the signal.\n     * @return Number of listeners currently connected.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return calls.size();\n    }\n\n    /**\n     * @brief Returns false if at least a listener is connected to the signal.\n     * @return True if the signal has no listeners connected, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return calls.empty();\n    }\n\n    /**\n     * @brief Triggers a signal.\n     *\n     * All the listeners are notified. Order isn't guaranteed.\n     *\n     * @param args Arguments to use to invoke listeners.\n     */\n    void publish(Args... args) const {\n        for(auto &&call: std::as_const(calls)) {\n            call(args...);\n        }\n    }\n\n    /**\n     * @brief Collects return values from the listeners.\n     *\n     * The collector must expose a call operator with the following properties:\n     *\n     * * The return type is either `void` or such that it's convertible to\n     *   `bool`. In the second case, a true value will stop the iteration.\n     * * The list of parameters is empty if `Ret` is `void`, otherwise it\n     *   contains a single element such that `Ret` is convertible to it.\n     *\n     * @tparam Func Type of collector to use, if any.\n     * @param func A valid function object.\n     * @param args Arguments to use to invoke listeners.\n     */\n    template<typename Func>\n    void collect(Func func, Args... args) const {\n        for(auto &&call: calls) {\n            if constexpr(std::is_void_v<Ret>) {\n                if constexpr(std::is_invocable_r_v<bool, Func>) {\n                    call(args...);\n                    if(func()) { break; }\n                } else {\n                    call(args...);\n                    func();\n                }\n            } else {\n                if constexpr(std::is_invocable_r_v<bool, Func, Ret>) {\n                    if(func(call(args...))) { break; }\n                } else {\n                    func(call(args...));\n                }\n            }\n        }\n    }\n\nprivate:\n    std::vector<delegate<Ret(Args...)>> calls;\n};\n\n\n/**\n * @brief Connection class.\n *\n * Opaque object the aim of which is to allow users to release an already\n * estabilished connection without having to keep a reference to the signal or\n * the sink that generated it.\n */\nclass connection {\n    /*! @brief A sink is allowed to create connection objects. */\n    template<typename>\n    friend class sink;\n\n    connection(delegate<void(void *)> fn, void *ref)\n        : disconnect{fn}, signal{ref}\n    {}\n\npublic:\n    /*! @brief Default constructor. */\n    connection() = default;\n\n    /**\n     * @brief Checks whether a connection is properly initialized.\n     * @return True if the connection is properly initialized, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return static_cast<bool>(disconnect);\n    }\n\n    /*! @brief Breaks the connection. */\n    void release() {\n        if(disconnect) {\n            disconnect(signal);\n            disconnect.reset();\n        }\n    }\n\nprivate:\n    delegate<void(void *)> disconnect;\n    void *signal{};\n};\n\n\n/**\n * @brief Scoped connection class.\n *\n * Opaque object the aim of which is to allow users to release an already\n * estabilished connection without having to keep a reference to the signal or\n * the sink that generated it.<br/>\n * A scoped connection automatically breaks the link between the two objects\n * when it goes out of scope.\n */\nstruct scoped_connection {\n    /*! @brief Default constructor. */\n    scoped_connection() = default;\n\n    /**\n     * @brief Constructs a scoped connection from a basic connection.\n     * @param other A valid connection object.\n     */\n    scoped_connection(const connection &other)\n        : conn{other}\n    {}\n\n    /*! @brief Default copy constructor, deleted on purpose. */\n    scoped_connection(const scoped_connection &) = delete;\n\n    /*! @brief Automatically breaks the link on destruction. */\n    ~scoped_connection() {\n        conn.release();\n    }\n\n    /**\n     * @brief Default copy assignment operator, deleted on purpose.\n     * @return This scoped connection.\n     */\n    scoped_connection & operator=(const scoped_connection &) = delete;\n\n    /**\n     * @brief Acquires a connection.\n     * @param other The connection object to acquire.\n     * @return This scoped connection.\n     */\n    scoped_connection & operator=(connection other) {\n        conn = std::move(other);\n        return *this;\n    }\n\n    /**\n     * @brief Checks whether a scoped connection is properly initialized.\n     * @return True if the connection is properly initialized, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return static_cast<bool>(conn);\n    }\n\n    /*! @brief Breaks the connection. */\n    void release() {\n        conn.release();\n    }\n\nprivate:\n    connection conn;\n};\n\n\n/**\n * @brief Sink class.\n *\n * A sink is used to connect listeners to signals and to disconnect them.<br/>\n * The function type for a listener is the one of the signal to which it\n * belongs.\n *\n * The clear separation between a signal and a sink permits to store the former\n * as private data member without exposing the publish functionality to the\n * users of the class.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nclass sink<Ret(Args...)> {\n    using signal_type = sigh<Ret(Args...)>;\n    using difference_type = typename std::iterator_traits<typename decltype(signal_type::calls)::iterator>::difference_type;\n\n    template<auto Candidate, typename Type>\n    static void release(Type value_or_instance, void *signal) {\n        sink{*static_cast<signal_type *>(signal)}.disconnect<Candidate>(value_or_instance);\n    }\n\n    template<auto Candidate>\n    static void release(void *signal) {\n        sink{*static_cast<signal_type *>(signal)}.disconnect<Candidate>();\n    }\n\npublic:\n    /**\n     * @brief Constructs a sink that is allowed to modify a given signal.\n     * @param ref A valid reference to a signal object.\n     */\n    sink(sigh<Ret(Args...)> &ref) ENTT_NOEXCEPT\n        : offset{},\n          signal{&ref}\n    {}\n\n    /**\n     * @brief Returns false if at least a listener is connected to the sink.\n     * @return True if the sink has no listeners connected, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return signal->calls.empty();\n    }\n\n    /**\n     * @brief Returns a sink that connects before a given free function or an\n     * unbound member.\n     * @tparam Function A valid free function pointer.\n     * @return A properly initialized sink object.\n     */\n    template<auto Function>\n    sink before() {\n        delegate<Ret(Args...)> call{};\n        call.template connect<Function>();\n\n        const auto &calls = signal->calls;\n        const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));\n\n        sink other{*this};\n        other.offset = std::distance(it, calls.cend());\n        return other;\n    }\n\n    /**\n     * @brief Returns a sink that connects before a free function with payload\n     * or a bound member.\n     * @tparam Candidate Member or free function to look for.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     * @return A properly initialized sink object.\n     */\n    template<auto Candidate, typename Type>\n    sink before(Type &&value_or_instance) {\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>(std::forward<Type>(value_or_instance));\n\n        const auto &calls = signal->calls;\n        const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));\n\n        sink other{*this};\n        other.offset = std::distance(it, calls.cend());\n        return other;\n    }\n\n    /**\n     * @brief Returns a sink that connects before a given instance or specific\n     * payload.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     * @return A properly initialized sink object.\n     */\n    template<typename Type>\n    sink before(Type &value_or_instance) {\n        return before(&value_or_instance);\n    }\n\n    /**\n     * @brief Returns a sink that connects before a given instance or specific\n     * payload.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid pointer that fits the purpose.\n     * @return A properly initialized sink object.\n     */\n    template<typename Type>\n    sink before(Type *value_or_instance) {\n        sink other{*this};\n\n        if(value_or_instance) {\n            const auto &calls = signal->calls;\n            const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) {\n                return delegate.instance() == value_or_instance;\n            });\n\n            other.offset = std::distance(it, calls.cend());\n        }\n\n        return other;\n    }\n\n    /**\n     * @brief Returns a sink that connects before anything else.\n     * @return A properly initialized sink object.\n     */\n    sink before() {\n        sink other{*this};\n        other.offset = signal->calls.size();\n        return other;\n    }\n\n    /**\n     * @brief Connects a free function or an unbound member to a signal.\n     *\n     * The signal handler performs checks to avoid multiple connections for the\n     * same function.\n     *\n     * @tparam Candidate Function or member to connect to the signal.\n     * @return A properly initialized connection object.\n     */\n    template<auto Candidate>\n    connection connect() {\n        disconnect<Candidate>();\n\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>();\n        signal->calls.insert(signal->calls.end() - offset, std::move(call));\n\n        delegate<void(void *)> conn{};\n        conn.template connect<&release<Candidate>>();\n        return { std::move(conn), signal };\n    }\n\n    /**\n     * @brief Connects a free function with payload or a bound member to a\n     * signal.\n     *\n     * The signal isn't responsible for the connected object or the payload.\n     * Users must always guarantee that the lifetime of the instance overcomes\n     * the one of the signal. On the other side, the signal handler performs\n     * checks to avoid multiple connections for the same function.<br/>\n     * When used to connect a free function with payload, its signature must be\n     * such that the instance is the first argument before the ones used to\n     * define the signal itself.\n     *\n     * @tparam Candidate Function or member to connect to the signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     * @return A properly initialized connection object.\n     */\n    template<auto Candidate, typename Type>\n    connection connect(Type &&value_or_instance) {\n        disconnect<Candidate>(value_or_instance);\n\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>(value_or_instance);\n        signal->calls.insert(signal->calls.end() - offset, std::move(call));\n\n        delegate<void(void *)> conn{};\n        conn.template connect<&release<Candidate, Type>>(value_or_instance);\n        return { std::move(conn), signal };\n    }\n\n    /**\n     * @brief Disconnects a free function or an unbound member from a signal.\n     * @tparam Candidate Function or member to disconnect from the signal.\n     */\n    template<auto Candidate>\n    void disconnect() {\n        auto &calls = signal->calls;\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>();\n        calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());\n    }\n\n    /**\n     * @brief Disconnects a free function with payload or a bound member from a\n     * signal.\n     * @tparam Candidate Function or member to disconnect from the signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    void disconnect(Type &&value_or_instance) {\n        auto &calls = signal->calls;\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>(std::forward<Type>(value_or_instance));\n        calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());\n    }\n\n    /**\n     * @brief Disconnects free functions with payload or bound members from a\n     * signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<typename Type>\n    void disconnect(Type &value_or_instance) {\n        disconnect(&value_or_instance);\n    }\n\n    /**\n     * @brief Disconnects free functions with payload or bound members from a\n     * signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<typename Type>\n    void disconnect(Type *value_or_instance) {\n        if(value_or_instance) {\n            auto &calls = signal->calls;\n            calls.erase(std::remove_if(calls.begin(), calls.end(), [value_or_instance](const auto &delegate) {\n                return delegate.instance() == value_or_instance;\n            }), calls.end());\n        }\n    }\n\n    /*! @brief Disconnects all the listeners from a signal. */\n    void disconnect() {\n        signal->calls.clear();\n    }\n\nprivate:\n    difference_type offset;\n    signal_type *signal;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the function type of a sink directly from the signal it\n * refers to.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nsink(sigh<Ret(Args...)> &) ENTT_NOEXCEPT -> sink<Ret(Args...)>;\n\n\n}\n\n\n#endif\n\n// #include \"entity.hpp\"\n#ifndef ENTT_ENTITY_ENTITY_HPP\n#define ENTT_ENTITY_ENTITY_HPP\n\n\n#include <cstdint>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/type_traits.hpp\"\n\n// #include \"../core/fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Entity traits.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is an accepted entity type.\n */\ntemplate<typename>\nstruct entt_traits;\n\n\n/**\n * @brief Entity traits for a 16 bits entity identifier.\n *\n * A 16 bits entity identifier guarantees:\n *\n * * 12 bits for the entity number (up to 4k entities).\n * * 4 bit for the version (resets in [0-15]).\n */\ntemplate<>\nstruct entt_traits<std::uint16_t> {\n    /*! @brief Underlying entity type. */\n    using entity_type = std::uint16_t;\n    /*! @brief Underlying version type. */\n    using version_type = std::uint8_t;\n    /*! @brief Difference type. */\n    using difference_type = std::int32_t;\n\n    /*! @brief Mask to use to get the entity number out of an identifier. */\n    static constexpr std::uint16_t entity_mask = 0xFFF;\n    /*! @brief Mask to use to get the version out of an identifier. */\n    static constexpr std::uint16_t version_mask = 0xF;\n    /*! @brief Extent of the entity number within an identifier. */\n    static constexpr auto entity_shift = 12;\n};\n\n\n/**\n * @brief Entity traits for a 32 bits entity identifier.\n *\n * A 32 bits entity identifier guarantees:\n *\n * * 20 bits for the entity number (suitable for almost all the games).\n * * 12 bit for the version (resets in [0-4095]).\n */\ntemplate<>\nstruct entt_traits<std::uint32_t> {\n    /*! @brief Underlying entity type. */\n    using entity_type = std::uint32_t;\n    /*! @brief Underlying version type. */\n    using version_type = std::uint16_t;\n    /*! @brief Difference type. */\n    using difference_type = std::int64_t;\n\n    /*! @brief Mask to use to get the entity number out of an identifier. */\n    static constexpr std::uint32_t entity_mask = 0xFFFFF;\n    /*! @brief Mask to use to get the version out of an identifier. */\n    static constexpr std::uint32_t version_mask = 0xFFF;\n    /*! @brief Extent of the entity number within an identifier. */\n    static constexpr auto entity_shift = 20;\n};\n\n\n/**\n * @brief Entity traits for a 64 bits entity identifier.\n *\n * A 64 bits entity identifier guarantees:\n *\n * * 32 bits for the entity number (an indecently large number).\n * * 32 bit for the version (an indecently large number).\n */\ntemplate<>\nstruct entt_traits<std::uint64_t> {\n    /*! @brief Underlying entity type. */\n    using entity_type = std::uint64_t;\n    /*! @brief Underlying version type. */\n    using version_type = std::uint32_t;\n    /*! @brief Difference type. */\n    using difference_type = std::int64_t;\n\n    /*! @brief Mask to use to get the entity number out of an identifier. */\n    static constexpr std::uint64_t entity_mask = 0xFFFFFFFF;\n    /*! @brief Mask to use to get the version out of an identifier. */\n    static constexpr std::uint64_t version_mask = 0xFFFFFFFF;\n    /*! @brief Extent of the entity number within an identifier. */\n    static constexpr auto entity_shift = 32;\n};\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\nclass null {\n    template<typename Entity>\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n\npublic:\n    template<typename Entity>\n    constexpr operator Entity() const ENTT_NOEXCEPT {\n        return Entity{traits_type<Entity>::entity_mask};\n    }\n\n    constexpr bool operator==(null) const ENTT_NOEXCEPT {\n        return true;\n    }\n\n    constexpr bool operator!=(null) const ENTT_NOEXCEPT {\n        return false;\n    }\n\n    template<typename Entity>\n    constexpr bool operator==(const Entity entity) const ENTT_NOEXCEPT {\n        return (to_integral(entity) & traits_type<Entity>::entity_mask) == to_integral(static_cast<Entity>(*this));\n    }\n\n    template<typename Entity>\n    constexpr bool operator!=(const Entity entity) const ENTT_NOEXCEPT {\n        return !(entity == *this);\n    }\n};\n\n\ntemplate<typename Entity>\nconstexpr bool operator==(const Entity entity, null other) ENTT_NOEXCEPT {\n    return other.operator==(entity);\n}\n\n\ntemplate<typename Entity>\nconstexpr bool operator!=(const Entity entity, null other) ENTT_NOEXCEPT {\n    return !(other == entity);\n}\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/*! @brief Default entity identifier. */\nENTT_OPAQUE_TYPE(entity, id_type);\n\n\n/**\n * @brief Compile-time constant for null entities.\n *\n * There exist implicit conversions from this variable to entity identifiers of\n * any allowed type. Similarly, there exist comparision operators between the\n * null entity and any other entity identifier.\n */\ninline constexpr auto null = internal::null{};\n\n\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n#ifndef ENTT_ENTITY_FWD_HPP\n#define ENTT_ENTITY_FWD_HPP\n\n\n// #include \"../core/fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/*! @class basic_registry */\ntemplate <typename>\nclass basic_registry;\n\n/*! @class basic_view */\ntemplate<typename...>\nclass basic_view;\n\n/*! @class basic_runtime_view */\ntemplate<typename>\nclass basic_runtime_view;\n\n/*! @class basic_group */\ntemplate<typename...>\nclass basic_group;\n\n/*! @class basic_observer */\ntemplate<typename>\nclass basic_observer;\n\n/*! @struct basic_actor */\ntemplate <typename>\nstruct basic_actor;\n\n/*! @class basic_snapshot */\ntemplate<typename>\nclass basic_snapshot;\n\n/*! @class basic_snapshot_loader */\ntemplate<typename>\nclass basic_snapshot_loader;\n\n/*! @class basic_continuous_loader */\ntemplate<typename>\nclass basic_continuous_loader;\n\n/*! @class entity */\nenum class entity: id_type;\n\n/*! @brief Alias declaration for the most common use case. */\nusing registry = basic_registry<entity>;\n\n/*! @brief Alias declaration for the most common use case. */\nusing observer = basic_observer<entity>;\n\n/*! @brief Alias declaration for the most common use case. */\nusing actor = basic_actor<entity>;\n\n/*! @brief Alias declaration for the most common use case. */\nusing snapshot = basic_snapshot<entity>;\n\n/*! @brief Alias declaration for the most common use case. */\nusing snapshot_loader = basic_snapshot_loader<entity>;\n\n/*! @brief Alias declaration for the most common use case. */\nusing continuous_loader = basic_continuous_loader<entity>;\n\n/**\n * @brief Alias declaration for the most common use case.\n * @tparam Types Types of components iterated by the view.\n */\ntemplate<typename... Types>\nusing view = basic_view<entity, Types...>;\n\n/*! @brief Alias declaration for the most common use case. */\nusing runtime_view = basic_runtime_view<entity>;\n\n/**\n * @brief Alias declaration for the most common use case.\n * @tparam Types Types of components iterated by the group.\n */\ntemplate<typename... Types>\nusing group = basic_group<entity, Types...>;\n\n\n}\n\n\n#endif\n\n// #include \"group.hpp\"\n#ifndef ENTT_ENTITY_GROUP_HPP\n#define ENTT_ENTITY_GROUP_HPP\n\n\n#include <tuple>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/type_traits.hpp\"\n\n// #include \"sparse_set.hpp\"\n#ifndef ENTT_ENTITY_SPARSE_SET_HPP\n#define ENTT_ENTITY_SPARSE_SET_HPP\n\n\n#include <iterator>\n#include <utility>\n#include <vector>\n#include <memory>\n#include <cstddef>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/algorithm.hpp\"\n\n// #include \"entity.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Basic sparse set implementation.\n *\n * Sparse set or packed array or whatever is the name users give it.<br/>\n * Two arrays: an _external_ one and an _internal_ one; a _sparse_ one and a\n * _packed_ one; one used for direct access through contiguous memory, the other\n * one used to get the data through an extra level of indirection.<br/>\n * This is largely used by the registry to offer users the fastest access ever\n * to the components. Views and groups in general are almost entirely designed\n * around sparse sets.\n *\n * This type of data structure is widely documented in the literature and on the\n * web. This is nothing more than a customized implementation suitable for the\n * purpose of the framework.\n *\n * @note\n * There are no guarantees that entities are returned in the insertion order\n * when iterate a sparse set. Do not make assumption on the order in any case.\n *\n * @note\n * Internal data structures arrange elements to maximize performance. Because of\n * that, there are no guarantees that elements have the expected order when\n * iterate directly the internal packed array (see `data` and `size` member\n * functions for that). Use `begin` and `end` instead.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass sparse_set {\n    static_assert(ENTT_PAGE_SIZE && ((ENTT_PAGE_SIZE & (ENTT_PAGE_SIZE - 1)) == 0));\n    static constexpr auto entt_per_page = ENTT_PAGE_SIZE / sizeof(Entity);\n\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n    using page_type = std::unique_ptr<Entity[]>;\n\n    class sparse_set_iterator final {\n        friend class sparse_set<Entity>;\n\n        using packed_type = std::vector<Entity>;\n        using index_type = typename traits_type::difference_type;\n\n        sparse_set_iterator(const packed_type &ref, const index_type idx) ENTT_NOEXCEPT\n            : packed{&ref}, index{idx}\n        {}\n\n    public:\n        using difference_type = index_type;\n        using value_type = Entity;\n        using pointer = const value_type *;\n        using reference = const value_type &;\n        using iterator_category = std::random_access_iterator_tag;\n\n        sparse_set_iterator() ENTT_NOEXCEPT = default;\n\n        sparse_set_iterator & operator++() ENTT_NOEXCEPT {\n            return --index, *this;\n        }\n\n        sparse_set_iterator operator++(int) ENTT_NOEXCEPT {\n            iterator orig = *this;\n            return operator++(), orig;\n        }\n\n        sparse_set_iterator & operator--() ENTT_NOEXCEPT {\n            return ++index, *this;\n        }\n\n        sparse_set_iterator operator--(int) ENTT_NOEXCEPT {\n            sparse_set_iterator orig = *this;\n            return operator--(), orig;\n        }\n\n        sparse_set_iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {\n            index -= value;\n            return *this;\n        }\n\n        sparse_set_iterator operator+(const difference_type value) const ENTT_NOEXCEPT {\n            sparse_set_iterator copy = *this;\n            return (copy += value);\n        }\n\n        sparse_set_iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {\n            return (*this += -value);\n        }\n\n        sparse_set_iterator operator-(const difference_type value) const ENTT_NOEXCEPT {\n            return (*this + -value);\n        }\n\n        difference_type operator-(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return other.index - index;\n        }\n\n        reference operator[](const difference_type value) const {\n            const auto pos = size_type(index-value-1);\n            return (*packed)[pos];\n        }\n\n        bool operator==(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return other.index == index;\n        }\n\n        bool operator!=(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this == other);\n        }\n\n        bool operator<(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return index > other.index;\n        }\n\n        bool operator>(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return index < other.index;\n        }\n\n        bool operator<=(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this > other);\n        }\n\n        bool operator>=(const sparse_set_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this < other);\n        }\n\n        pointer operator->() const {\n            const auto pos = size_type(index-1);\n            return &(*packed)[pos];\n        }\n\n        reference operator*() const {\n            return *operator->();\n        }\n\n    private:\n        const packed_type *packed;\n        index_type index;\n    };\n\n    auto page(const Entity entt) const ENTT_NOEXCEPT {\n        return std::size_t{(to_integral(entt) & traits_type::entity_mask) / entt_per_page};\n    }\n\n    auto offset(const Entity entt) const ENTT_NOEXCEPT {\n        return std::size_t{to_integral(entt) & (entt_per_page - 1)};\n    }\n\n    page_type & assure(const std::size_t pos) {\n        if(!(pos < sparse.size())) {\n            sparse.resize(pos+1);\n        }\n\n        if(!sparse[pos]) {\n            sparse[pos] = std::make_unique<entity_type[]>(entt_per_page);\n            // null is safe in all cases for our purposes\n            for(auto *first = sparse[pos].get(), *last = first + entt_per_page; first != last; ++first) {\n                *first = null;\n            }\n        }\n\n        return sparse[pos];\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Random access iterator type. */\n    using iterator = sparse_set_iterator;\n\n    /*! @brief Default constructor. */\n    sparse_set() = default;\n\n    /*! @brief Default move constructor. */\n    sparse_set(sparse_set &&) = default;\n\n    /*! @brief Default destructor. */\n    virtual ~sparse_set() = default;\n\n    /*! @brief Default move assignment operator. @return This sparse set. */\n    sparse_set & operator=(sparse_set &&) = default;\n\n    /**\n     * @brief Increases the capacity of a sparse set.\n     *\n     * If the new capacity is greater than the current capacity, new storage is\n     * allocated, otherwise the method does nothing.\n     *\n     * @param cap Desired capacity.\n     */\n    void reserve(const size_type cap) {\n        packed.reserve(cap);\n    }\n\n    /**\n     * @brief Returns the number of elements that a sparse set has currently\n     * allocated space for.\n     * @return Capacity of the sparse set.\n     */\n    size_type capacity() const ENTT_NOEXCEPT {\n        return packed.capacity();\n    }\n\n    /*! @brief Requests the removal of unused capacity. */\n    void shrink_to_fit() {\n        // conservative approach\n        if(packed.empty()) {\n            sparse.clear();\n        }\n\n        sparse.shrink_to_fit();\n        packed.shrink_to_fit();\n    }\n\n    /**\n     * @brief Returns the extent of a sparse set.\n     *\n     * The extent of a sparse set is also the size of the internal sparse array.\n     * There is no guarantee that the internal packed array has the same size.\n     * Usually the size of the internal sparse array is equal or greater than\n     * the one of the internal packed array.\n     *\n     * @return Extent of the sparse set.\n     */\n    size_type extent() const ENTT_NOEXCEPT {\n        return sparse.size() * entt_per_page;\n    }\n\n    /**\n     * @brief Returns the number of elements in a sparse set.\n     *\n     * The number of elements is also the size of the internal packed array.\n     * There is no guarantee that the internal sparse array has the same size.\n     * Usually the size of the internal sparse array is equal or greater than\n     * the one of the internal packed array.\n     *\n     * @return Number of elements.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return packed.size();\n    }\n\n    /**\n     * @brief Checks whether a sparse set is empty.\n     * @return True if the sparse set is empty, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return packed.empty();\n    }\n\n    /**\n     * @brief Direct access to the internal packed array.\n     *\n     * The returned pointer is such that range `[data(), data() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order, even though `respect` has been\n     * previously invoked. Internal data structures arrange elements to maximize\n     * performance. Accessing them directly gives a performance boost but less\n     * guarantees. Use `begin` and `end` if you want to iterate the sparse set\n     * in the expected order.\n     *\n     * @return A pointer to the internal packed array.\n     */\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return packed.data();\n    }\n\n    /**\n     * @brief Returns an iterator to the beginning.\n     *\n     * The returned iterator points to the first entity of the internal packed\n     * array. If the sparse set is empty, the returned iterator will be equal to\n     * `end()`.\n     *\n     * @note\n     * Random access iterators stay true to the order imposed by a call to\n     * `respect`.\n     *\n     * @return An iterator to the first entity of the internal packed array.\n     */\n    iterator begin() const ENTT_NOEXCEPT {\n        const typename traits_type::difference_type pos = packed.size();\n        return iterator{packed, pos};\n    }\n\n    /**\n     * @brief Returns an iterator to the end.\n     *\n     * The returned iterator points to the element following the last entity in\n     * the internal packed array. Attempting to dereference the returned\n     * iterator results in undefined behavior.\n     *\n     * @note\n     * Random access iterators stay true to the order imposed by a call to\n     * `respect`.\n     *\n     * @return An iterator to the element following the last entity of the\n     * internal packed array.\n     */\n    iterator end() const ENTT_NOEXCEPT {\n        return iterator{packed, {}};\n    }\n\n    /**\n     * @brief Finds an entity.\n     * @param entt A valid entity identifier.\n     * @return An iterator to the given entity if it's found, past the end\n     * iterator otherwise.\n     */\n    iterator find(const entity_type entt) const {\n        return contains(entt) ? --(end() - index(entt)) : end();\n    }\n\n    /**\n     * @brief Checks if a sparse set contains an entity.\n     * @param entt A valid entity identifier.\n     * @return True if the sparse set contains the entity, false otherwise.\n     */\n    bool contains(const entity_type entt) const {\n        const auto curr = page(entt);\n        // testing against null permits to avoid accessing the packed array\n        return (curr < sparse.size() && sparse[curr] && sparse[curr][offset(entt)] != null);\n    }\n\n    /*! @copydoc contains */\n    [[deprecated(\"use ::contains instead\")]]\n    bool has(const entity_type entt) const {\n        return contains(entt);\n    }\n\n    /**\n     * @brief Returns the position of an entity in a sparse set.\n     *\n     * @warning\n     * Attempting to get the position of an entity that doesn't belong to the\n     * sparse set results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * sparse set doesn't contain the given entity.\n     *\n     * @param entt A valid entity identifier.\n     * @return The position of the entity in the sparse set.\n     */\n    size_type index(const entity_type entt) const {\n        ENTT_ASSERT(contains(entt));\n        return size_type(sparse[page(entt)][offset(entt)]);\n    }\n\n    /**\n     * @brief Assigns an entity to a sparse set.\n     *\n     * @warning\n     * Attempting to assign an entity that already belongs to the sparse set\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * sparse set already contains the given entity.\n     *\n     * @param entt A valid entity identifier.\n     */\n    void emplace(const entity_type entt) {\n        ENTT_ASSERT(!contains(entt));\n        assure(page(entt))[offset(entt)] = entity_type(packed.size());\n        packed.push_back(entt);\n    }\n\n    /*! @copydoc emplace */\n    [[deprecated(\"use ::emplace instead\")]]\n    void construct(const entity_type entt) {\n        emplace(entt);\n    }\n\n    /**\n     * @brief Assigns one or more entities to a sparse set.\n     *\n     * @warning\n     * Attempting to assign an entity that already belongs to the sparse set\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * sparse set already contains the given entity.\n     *\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     */\n    template<typename It>\n    void insert(It first, It last) {\n        auto next = packed.size();\n        packed.insert(packed.end(), first, last);\n\n        while(first != last) {\n            const auto entt = *(first++);\n            ENTT_ASSERT(!contains(entt));\n            assure(page(entt))[offset(entt)] = entity_type(next++);\n        }\n    }\n\n    /*! @copydoc insert */\n    template<typename It>\n    [[deprecated(\"use ::insert instead\")]]\n    void construct(It first, It last) {\n        insert(std::move(first), std::move(last));\n    }\n\n    /**\n     * @brief Removes an entity from a sparse set.\n     *\n     * @warning\n     * Attempting to remove an entity that doesn't belong to the sparse set\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * sparse set doesn't contain the given entity.\n     *\n     * @param entt A valid entity identifier.\n     */\n    void erase(const entity_type entt) {\n        ENTT_ASSERT(contains(entt));\n        const auto curr = page(entt);\n        const auto pos = offset(entt);\n        packed[size_type(sparse[curr][pos])] = entity_type(packed.back());\n        sparse[page(packed.back())][offset(packed.back())] = sparse[curr][pos];\n        sparse[curr][pos] = null;\n        packed.pop_back();\n    }\n\n    /*! @copydoc erase */\n    [[deprecated(\"use ::erase instead\")]]\n    void destroy(const entity_type entt) {\n        erase(entt);\n    }\n\n    /**\n     * @brief Swaps two entities in the internal packed array.\n     *\n     * For what it's worth, this function affects both the internal sparse array\n     * and the internal packed array. Users should not care of that anyway.\n     *\n     * @warning\n     * Attempting to swap entities that don't belong to the sparse set results\n     * in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * sparse set doesn't contain the given entities.\n     *\n     * @param lhs A valid entity identifier.\n     * @param rhs A valid entity identifier.\n     */\n    virtual void swap(const entity_type lhs, const entity_type rhs) {\n        auto &from = sparse[page(lhs)][offset(lhs)];\n        auto &to = sparse[page(rhs)][offset(rhs)];\n        std::swap(packed[size_type(from)], packed[size_type(to)]);\n        std::swap(from, to);\n    }\n\n    /**\n     * @brief Sort elements according to the given comparison function.\n     *\n     * Sort the elements so that iterating the range with a couple of iterators\n     * returns them in the expected order. See `begin` and `end` for more\n     * details.\n     *\n     * The comparison function object must return `true` if the first element\n     * is _less_ than the second one, `false` otherwise. The signature of the\n     * comparison function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * bool(const Entity, const Entity);\n     * @endcode\n     *\n     * Moreover, the comparison function object shall induce a\n     * _strict weak ordering_ on the values.\n     *\n     * The sort function oject must offer a member function template\n     * `operator()` that accepts three arguments:\n     *\n     * * An iterator to the first element of the range to sort.\n     * * An iterator past the last element of the range to sort.\n     * * A comparison function to use to compare the elements.\n     *\n     * @note\n     * Attempting to iterate elements using a raw pointer returned by a call to\n     * `data` gives no guarantees on the order, even though `sort` has been\n     * invoked.\n     *\n     * @tparam Compare Type of comparison function object.\n     * @tparam Sort Type of sort function object.\n     * @tparam Args Types of arguments to forward to the sort function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param compare A valid comparison function object.\n     * @param algo A valid sort function object.\n     * @param args Arguments to forward to the sort function object, if any.\n     */\n    template<typename Compare, typename Sort = std_sort, typename... Args>\n    void sort(iterator first, iterator last, Compare compare, Sort algo = Sort{}, Args &&... args) {\n        ENTT_ASSERT(!(last < first));\n        ENTT_ASSERT(!(last > end()));\n\n        const auto length = std::distance(first, last);\n        const auto skip = std::distance(last, end());\n        const auto to = packed.rend() - skip;\n        const auto from = to - length;\n\n        algo(from, to, std::move(compare), std::forward<Args>(args)...);\n\n        for(size_type pos = skip, end = skip+length; pos < end; ++pos) {\n            sparse[page(packed[pos])][offset(packed[pos])] = entity_type(pos);\n        }\n    }\n\n    /**\n     * @brief Sort elements according to the given comparison function.\n     *\n     * @sa sort\n     *\n     * This function is a slightly slower version of `sort` that invokes the\n     * caller to indicate which entities are swapped.<br/>\n     * It's recommended when the caller wants to sort its own data structures to\n     * align them with the order induced in the sparse set.\n     *\n     * The signature of the callback should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * bool(const Entity, const Entity);\n     * @endcode\n     *\n     * @tparam Apply Type of function object to invoke to notify the caller.\n     * @tparam Compare Type of comparison function object.\n     * @tparam Sort Type of sort function object.\n     * @tparam Args Types of arguments to forward to the sort function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param apply A valid function object to use as a callback.\n     * @param compare A valid comparison function object.\n     * @param algo A valid sort function object.\n     * @param args Arguments to forward to the sort function object, if any.\n     */\n    template<typename Apply, typename Compare, typename Sort = std_sort, typename... Args>\n    void arrange(iterator first, iterator last, Apply apply, Compare compare, Sort algo = Sort{}, Args &&... args) {\n        ENTT_ASSERT(!(last < first));\n        ENTT_ASSERT(!(last > end()));\n\n        const auto length = std::distance(first, last);\n        const auto skip = std::distance(last, end());\n        const auto to = packed.rend() - skip;\n        const auto from = to - length;\n\n        algo(from, to, std::move(compare), std::forward<Args>(args)...);\n\n        for(size_type pos = skip, end = skip+length; pos < end; ++pos) {\n            auto curr = pos;\n            auto next = index(packed[curr]);\n\n            while(curr != next) {\n                apply(packed[curr], packed[next]);\n                sparse[page(packed[curr])][offset(packed[curr])] = entity_type(curr);\n\n                curr = next;\n                next = index(packed[curr]);\n            }\n        }\n    }\n\n    /**\n     * @brief Sort entities according to their order in another sparse set.\n     *\n     * Entities that are part of both the sparse sets are ordered internally\n     * according to the order they have in `other`. All the other entities goes\n     * to the end of the list and there are no guarantees on their order.<br/>\n     * In other terms, this function can be used to impose the same order on two\n     * sets by using one of them as a master and the other one as a slave.\n     *\n     * Iterating the sparse set with a couple of iterators returns elements in\n     * the expected order after a call to `respect`. See `begin` and `end` for\n     * more details.\n     *\n     * @note\n     * Attempting to iterate elements using a raw pointer returned by a call to\n     * `data` gives no guarantees on the order, even though `respect` has been\n     * invoked.\n     *\n     * @param other The sparse sets that imposes the order of the entities.\n     */\n    void respect(const sparse_set &other) {\n        const auto to = other.end();\n        auto from = other.begin();\n\n        size_type pos = packed.size() - 1;\n\n        while(pos && from != to) {\n            if(contains(*from)) {\n                if(*from != packed[pos]) {\n                    swap(packed[pos], *from);\n                }\n\n                --pos;\n            }\n\n            ++from;\n        }\n    }\n\n    /**\n     * @brief Clears a sparse set.\n     */\n    void clear() ENTT_NOEXCEPT {\n        sparse.clear();\n        packed.clear();\n    }\n\nprivate:\n    std::vector<page_type> sparse;\n    std::vector<entity_type> packed;\n};\n\n\n}\n\n\n#endif\n\n// #include \"storage.hpp\"\n#ifndef ENTT_ENTITY_STORAGE_HPP\n#define ENTT_ENTITY_STORAGE_HPP\n\n\n#include <algorithm>\n#include <iterator>\n#include <utility>\n#include <vector>\n#include <cstddef>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/algorithm.hpp\"\n\n// #include \"sparse_set.hpp\"\n\n// #include \"entity.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Basic storage implementation.\n *\n * This class is a refinement of a sparse set that associates an object to an\n * entity. The main purpose of this class is to extend sparse sets to store\n * components in a registry. It guarantees fast access both to the elements and\n * to the entities.\n *\n * @note\n * Entities and objects have the same order. It's guaranteed both in case of raw\n * access (either to entities or objects) and when using random or input access\n * iterators.\n *\n * @note\n * Internal data structures arrange elements to maximize performance. Because of\n * that, there are no guarantees that elements have the expected order when\n * iterate directly the internal packed array (see `raw` and `size` member\n * functions for that). Use `begin` and `end` instead.\n *\n * @warning\n * Empty types aren't explicitly instantiated. Therefore, many of the functions\n * normally available for non-empty types will not be available for empty ones.\n *\n * @sa sparse_set<Entity>\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n * @tparam Type Type of objects assigned to the entities.\n */\ntemplate<typename Entity, typename Type, typename = std::void_t<>>\nclass storage: public sparse_set<Entity> {\n    static_assert(std::is_move_constructible_v<Type>);\n    static_assert(std::is_move_assignable_v<Type>);\n\n    using underlying_type = sparse_set<Entity>;\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n\n    template<bool Const>\n    class storage_iterator final {\n        friend class storage<Entity, Type>;\n\n        using instance_type = std::conditional_t<Const, const std::vector<Type>, std::vector<Type>>;\n        using index_type = typename traits_type::difference_type;\n\n        storage_iterator(instance_type &ref, const index_type idx) ENTT_NOEXCEPT\n            : instances{&ref}, index{idx}\n        {}\n\n    public:\n        using difference_type = index_type;\n        using value_type = Type;\n        using pointer = std::conditional_t<Const, const value_type *, value_type *>;\n        using reference = std::conditional_t<Const, const value_type &, value_type &>;\n        using iterator_category = std::random_access_iterator_tag;\n\n        storage_iterator() ENTT_NOEXCEPT = default;\n\n        storage_iterator & operator++() ENTT_NOEXCEPT {\n            return --index, *this;\n        }\n\n        storage_iterator operator++(int) ENTT_NOEXCEPT {\n            storage_iterator orig = *this;\n            return operator++(), orig;\n        }\n\n        storage_iterator & operator--() ENTT_NOEXCEPT {\n            return ++index, *this;\n        }\n\n        storage_iterator operator--(int) ENTT_NOEXCEPT {\n            storage_iterator orig = *this;\n            return operator--(), orig;\n        }\n\n        storage_iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {\n            index -= value;\n            return *this;\n        }\n\n        storage_iterator operator+(const difference_type value) const ENTT_NOEXCEPT {\n            storage_iterator copy = *this;\n            return (copy += value);\n        }\n\n        storage_iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {\n            return (*this += -value);\n        }\n\n        storage_iterator operator-(const difference_type value) const ENTT_NOEXCEPT {\n            return (*this + -value);\n        }\n\n        difference_type operator-(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return other.index - index;\n        }\n\n        reference operator[](const difference_type value) const ENTT_NOEXCEPT {\n            const auto pos = size_type(index-value-1);\n            return (*instances)[pos];\n        }\n\n        bool operator==(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return other.index == index;\n        }\n\n        bool operator!=(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this == other);\n        }\n\n        bool operator<(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return index > other.index;\n        }\n\n        bool operator>(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return index < other.index;\n        }\n\n        bool operator<=(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this > other);\n        }\n\n        bool operator>=(const storage_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this < other);\n        }\n\n        pointer operator->() const ENTT_NOEXCEPT {\n            const auto pos = size_type(index-1);\n            return &(*instances)[pos];\n        }\n\n        reference operator*() const ENTT_NOEXCEPT {\n            return *operator->();\n        }\n\n    private:\n        instance_type *instances;\n        index_type index;\n    };\n\npublic:\n    /*! @brief Type of the objects associated with the entities. */\n    using object_type = Type;\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Random access iterator type. */\n    using iterator = storage_iterator<false>;\n    /*! @brief Constant random access iterator type. */\n    using const_iterator = storage_iterator<true>;\n\n    /**\n     * @brief Increases the capacity of a storage.\n     *\n     * If the new capacity is greater than the current capacity, new storage is\n     * allocated, otherwise the method does nothing.\n     *\n     * @param cap Desired capacity.\n     */\n    void reserve(const size_type cap) {\n        underlying_type::reserve(cap);\n        instances.reserve(cap);\n    }\n\n    /*! @brief Requests the removal of unused capacity. */\n    void shrink_to_fit() {\n        underlying_type::shrink_to_fit();\n        instances.shrink_to_fit();\n    }\n\n    /**\n     * @brief Direct access to the array of objects.\n     *\n     * The returned pointer is such that range `[raw(), raw() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order, even though either `sort` or\n     * `respect` has been previously invoked. Internal data structures arrange\n     * elements to maximize performance. Accessing them directly gives a\n     * performance boost but less guarantees. Use `begin` and `end` if you want\n     * to iterate the storage in the expected order.\n     *\n     * @return A pointer to the array of objects.\n     */\n    const object_type * raw() const ENTT_NOEXCEPT {\n        return instances.data();\n    }\n\n    /*! @copydoc raw */\n    object_type * raw() ENTT_NOEXCEPT {\n        return const_cast<object_type *>(std::as_const(*this).raw());\n    }\n\n    /**\n     * @brief Returns an iterator to the beginning.\n     *\n     * The returned iterator points to the first instance of the given type. If\n     * the storage is empty, the returned iterator will be equal to `end()`.\n     *\n     * @note\n     * Random access iterators stay true to the order imposed by a call to\n     * either `sort` or `respect`.\n     *\n     * @return An iterator to the first instance of the given type.\n     */\n    const_iterator cbegin() const ENTT_NOEXCEPT {\n        const typename traits_type::difference_type pos = underlying_type::size();\n        return const_iterator{instances, pos};\n    }\n\n    /*! @copydoc cbegin */\n    const_iterator begin() const ENTT_NOEXCEPT {\n        return cbegin();\n    }\n\n    /*! @copydoc begin */\n    iterator begin() ENTT_NOEXCEPT {\n        const typename traits_type::difference_type pos = underlying_type::size();\n        return iterator{instances, pos};\n    }\n\n    /**\n     * @brief Returns an iterator to the end.\n     *\n     * The returned iterator points to the element following the last instance\n     * of the given type. Attempting to dereference the returned iterator\n     * results in undefined behavior.\n     *\n     * @note\n     * Random access iterators stay true to the order imposed by a call to\n     * either `sort` or `respect`.\n     *\n     * @return An iterator to the element following the last instance of the\n     * given type.\n     */\n    const_iterator cend() const ENTT_NOEXCEPT {\n        return const_iterator{instances, {}};\n    }\n\n    /*! @copydoc cend */\n    const_iterator end() const ENTT_NOEXCEPT {\n        return cend();\n    }\n\n    /*! @copydoc end */\n    iterator end() ENTT_NOEXCEPT {\n        return iterator{instances, {}};\n    }\n\n    /**\n     * @brief Returns the object associated with an entity.\n     *\n     * @warning\n     * Attempting to use an entity that doesn't belong to the storage results in\n     * undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * storage doesn't contain the given entity.\n     *\n     * @param entt A valid entity identifier.\n     * @return The object associated with the entity.\n     */\n    const object_type & get(const entity_type entt) const {\n        return instances[underlying_type::index(entt)];\n    }\n\n    /*! @copydoc get */\n    object_type & get(const entity_type entt) {\n        return const_cast<object_type &>(std::as_const(*this).get(entt));\n    }\n\n    /**\n     * @brief Returns a pointer to the object associated with an entity, if any.\n     * @param entt A valid entity identifier.\n     * @return The object associated with the entity, if any.\n     */\n    const object_type * try_get(const entity_type entt) const {\n        return underlying_type::contains(entt) ? (instances.data() + underlying_type::index(entt)) : nullptr;\n    }\n\n    /*! @copydoc try_get */\n    object_type * try_get(const entity_type entt) {\n        return const_cast<object_type *>(std::as_const(*this).try_get(entt));\n    }\n\n    /**\n     * @brief Assigns an entity to a storage and constructs its object.\n     *\n     * This version accept both types that can be constructed in place directly\n     * and types like aggregates that do not work well with a placement new as\n     * performed usually under the hood during an _emplace back_.\n     *\n     * @warning\n     * Attempting to use an entity that already belongs to the storage results\n     * in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * storage already contains the given entity.\n     *\n     * @tparam Args Types of arguments to use to construct the object.\n     * @param entt A valid entity identifier.\n     * @param args Parameters to use to construct an object for the entity.\n     */\n    template<typename... Args>\n    void emplace(const entity_type entt, Args &&... args) {\n        if constexpr(std::is_aggregate_v<object_type>) {\n            instances.push_back(Type{std::forward<Args>(args)...});\n        } else {\n            instances.emplace_back(std::forward<Args>(args)...);\n        }\n\n        // entity goes after component in case constructor throws\n        underlying_type::emplace(entt);\n    }\n\n    /*! @copydoc emplace */\n    template<typename... Args>\n    [[deprecated(\"use ::emplace instead\")]]\n    void construct(const entity_type entt, Args &&... args) {\n        emplace(entt, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Assigns one or more entities to a storage and constructs their\n     * objects from a given instance.\n     *\n     * @warning\n     * Attempting to assign an entity that already belongs to the storage\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * storage already contains the given entity.\n     *\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     * @param value An instance of the object to construct.\n     */\n    template<typename It>\n    void insert(It first, It last, const object_type &value = {}) {\n        instances.insert(instances.end(), std::distance(first, last), value);\n        // entities go after components in case constructors throw\n        underlying_type::insert(first, last);\n    }\n\n    /*! @copydoc insert */\n    template<typename It>\n    [[deprecated(\"use ::insert instead\")]]\n    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>\n    construct(It first, It last, const object_type &value = {}) {\n        insert(std::move(first), std::move(last), value);\n    }\n\n    /**\n     * @brief Assigns one or more entities to a storage and constructs their\n     * objects from a given range.\n     *\n     * @sa construct\n     *\n     * @tparam EIt Type of input iterator.\n     * @tparam CIt Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     * @param from An iterator to the first element of the range of objects.\n     * @param to An iterator past the last element of the range of objects.\n     */\n    template<typename EIt, typename CIt>\n    void insert(EIt first, EIt last, CIt from, CIt to) {\n        instances.insert(instances.end(), from, to);\n        // entities go after components in case constructors throw\n        underlying_type::insert(first, last);\n    }\n\n    /*! @copydoc insert */\n    template<typename EIt, typename CIt>\n    [[deprecated(\"use ::insert instead\")]]\n    std::enable_if_t<std::is_same_v<typename std::iterator_traits<EIt>::value_type, entity_type>, void>\n    construct(EIt first, EIt last, CIt value) {\n        insert(std::move(first), std::move(last), std::move(value));\n    }\n\n    /**\n     * @brief Removes an entity from a storage and destroys its object.\n     *\n     * @warning\n     * Attempting to use an entity that doesn't belong to the storage results in\n     * undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * storage doesn't contain the given entity.\n     *\n     * @param entt A valid entity identifier.\n     */\n    void erase(const entity_type entt) {\n        auto other = std::move(instances.back());\n        instances[underlying_type::index(entt)] = std::move(other);\n        instances.pop_back();\n        underlying_type::erase(entt);\n    }\n\n    /*! @copydoc erase */\n    [[deprecated(\"use ::erase instead\")]]\n    void destroy(const entity_type entt) {\n        erase(entt);\n    }\n\n    /**\n     * @brief Swaps entities and objects in the internal packed arrays.\n     *\n     * @warning\n     * Attempting to swap entities that don't belong to the sparse set results\n     * in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * sparse set doesn't contain the given entities.\n     *\n     * @param lhs A valid entity identifier.\n     * @param rhs A valid entity identifier.\n     */\n    void swap(const entity_type lhs, const entity_type rhs) override {\n        std::swap(instances[underlying_type::index(lhs)], instances[underlying_type::index(rhs)]);\n        underlying_type::swap(lhs, rhs);\n    }\n\n    /**\n     * @brief Sort elements according to the given comparison function.\n     *\n     * Sort the elements so that iterating the range with a couple of iterators\n     * returns them in the expected order. See `begin` and `end` for more\n     * details.\n     *\n     * The comparison function object must return `true` if the first element\n     * is _less_ than the second one, `false` otherwise. The signature of the\n     * comparison function should be equivalent to one of the following:\n     *\n     * @code{.cpp}\n     * bool(const Entity, const Entity);\n     * bool(const Type &, const Type &);\n     * @endcode\n     *\n     * Moreover, the comparison function object shall induce a\n     * _strict weak ordering_ on the values.\n     *\n     * The sort function oject must offer a member function template\n     * `operator()` that accepts three arguments:\n     *\n     * * An iterator to the first element of the range to sort.\n     * * An iterator past the last element of the range to sort.\n     * * A comparison function to use to compare the elements.\n     *\n     * @note\n     * Attempting to iterate elements using a raw pointer returned by a call to\n     * either `data` or `raw` gives no guarantees on the order, even though\n     * `sort` has been invoked.\n     *\n     * @warning\n     * Empty types are never instantiated. Therefore, only comparison function\n     * objects that require to return entities rather than components are\n     * accepted.\n     *\n     * @tparam Compare Type of comparison function object.\n     * @tparam Sort Type of sort function object.\n     * @tparam Args Types of arguments to forward to the sort function object.\n     * @param first An iterator to the first element of the range to sort.\n     * @param last An iterator past the last element of the range to sort.\n     * @param compare A valid comparison function object.\n     * @param algo A valid sort function object.\n     * @param args Arguments to forward to the sort function object, if any.\n     */\n    template<typename Compare, typename Sort = std_sort, typename... Args>\n    void sort(iterator first, iterator last, Compare compare, Sort algo = Sort{}, Args &&... args) {\n        ENTT_ASSERT(!(last < first));\n        ENTT_ASSERT(!(last > end()));\n\n        const auto from = underlying_type::begin() + std::distance(begin(), first);\n        const auto to = from + std::distance(first, last);\n\n        const auto apply = [this](const auto lhs, const auto rhs) {\n            std::swap(instances[underlying_type::index(lhs)], instances[underlying_type::index(rhs)]);\n        };\n\n        if constexpr(std::is_invocable_v<Compare, const object_type &, const object_type &>) {\n            underlying_type::arrange(from, to, std::move(apply), [this, compare = std::move(compare)](const auto lhs, const auto rhs) {\n                return compare(std::as_const(instances[underlying_type::index(lhs)]), std::as_const(instances[underlying_type::index(rhs)]));\n            }, std::move(algo), std::forward<Args>(args)...);\n        } else {\n            underlying_type::arrange(from, to, std::move(apply), std::move(compare), std::move(algo), std::forward<Args>(args)...);\n        }\n    }\n\n    /*! @brief Clears a storage. */\n    void clear() {\n        underlying_type::clear();\n        instances.clear();\n    }\n\nprivate:\n    std::vector<object_type> instances;\n};\n\n\n/*! @copydoc storage */\ntemplate<typename Entity, typename Type>\nclass storage<Entity, Type, std::enable_if_t<ENTT_IS_EMPTY(Type)>>: public sparse_set<Entity> {\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n    using underlying_type = sparse_set<Entity>;\n\npublic:\n    /*! @brief Type of the objects associated with the entities. */\n    using object_type = Type;\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n\n    /**\n     * @brief Assigns an entity to a storage and constructs its object.\n     *\n     * @warning\n     * Attempting to use an entity that already belongs to the storage results\n     * in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * storage already contains the given entity.\n     *\n     * @tparam Args Types of arguments to use to construct the object.\n     * @param entt A valid entity identifier.\n     * @param args Parameters to use to construct an object for the entity.\n     */\n    template<typename... Args>\n    void emplace(const entity_type entt, Args &&... args) {\n        [[maybe_unused]] object_type instance{std::forward<Args>(args)...};\n        underlying_type::emplace(entt);\n    }\n\n    /*! @copydoc emplace */\n    template<typename... Args>\n    [[deprecated(\"use ::emplace instead\")]]\n    void construct(const entity_type entt, Args &&... args) {\n        emplace(entt, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Assigns one or more entities to a storage.\n     *\n     * @warning\n     * Attempting to assign an entity that already belongs to the storage\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * storage already contains the given entity.\n     *\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     */\n    template<typename It>\n    void insert(It first, It last, const object_type & = {}) {\n        underlying_type::insert(first, last);\n    }\n\n    /**\n     * @copydoc insert\n     * @param value An instance of the object to construct.\n     */\n    template<typename It>\n    [[deprecated(\"use ::insert instead\")]]\n    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>\n    construct(It first, It last, const object_type &value = {}) {\n        insert(std::move(first), std::move(last), value);\n    }\n};\n\n\n}\n\n\n#endif\n\n// #include \"utility.hpp\"\n#ifndef ENTT_ENTITY_UTILITY_HPP\n#define ENTT_ENTITY_UTILITY_HPP\n\n\n// #include \"../core/type_traits.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Alias for exclusion lists.\n * @tparam Type List of types.\n */\ntemplate<typename... Type>\nstruct exclude_t: type_list<Type...> {};\n\n\n/**\n * @brief Variable template for exclusion lists.\n * @tparam Type List of types.\n */\ntemplate<typename... Type>\ninline constexpr exclude_t<Type...> exclude{};\n\n\n/**\n * @brief Alias for lists of observed components.\n * @tparam Type List of types.\n */\ntemplate<typename... Type>\nstruct get_t: type_list<Type...>{};\n\n\n/**\n * @brief Variable template for lists of observed components.\n * @tparam Type List of types.\n */\ntemplate<typename... Type>\ninline constexpr get_t<Type...> get{};\n\n\n}\n\n\n#endif\n\n// #include \"entity.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Group.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error, but for a few reasonable cases.\n */\ntemplate<typename...>\nclass basic_group;\n\n\n/**\n * @brief Non-owning group.\n *\n * A non-owning group returns all entities and only the entities that have at\n * least the given components. Moreover, it's guaranteed that the entity list\n * is tightly packed in memory for fast iterations.\n *\n * @b Important\n *\n * Iterators aren't invalidated if:\n *\n * * New instances of the given components are created and assigned to entities.\n * * The entity currently pointed is modified (as an example, if one of the\n *   given components is removed from the entity to which the iterator points).\n * * The entity currently pointed is destroyed.\n *\n * In all other cases, modifying the pools iterated by the group in any way\n * invalidates all the iterators and using them results in undefined behavior.\n *\n * @note\n * Groups share references to the underlying data structures of the registry\n * that generated them. Therefore any change to the entities and to the\n * components made by means of the registry are immediately reflected by all the\n * groups.<br/>\n * Moreover, sorting a non-owning group affects all the instances of the same\n * group (it means that users don't have to call `sort` on each instance to sort\n * all of them because they _share_ entities and components).\n *\n * @warning\n * Lifetime of a group must not overcome that of the registry that generated it.\n * In any other case, attempting to use a group results in undefined behavior.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n * @tparam Exclude Types of components used to filter the group.\n * @tparam Get Type of components observed by the group.\n */\ntemplate<typename Entity, typename... Exclude, typename... Get>\nclass basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>> {\n    /*! @brief A registry is allowed to create groups. */\n    friend class basic_registry<Entity>;\n\n    template<typename Component>\n    using pool_type = std::conditional_t<std::is_const_v<Component>, const storage<Entity, std::remove_const_t<Component>>, storage<Entity, Component>>;\n\n    // we could use pool_type<Type> &..., but vs complains about it and refuses to compile for unknown reasons (most likely a bug)\n    basic_group(sparse_set<Entity> &ref, storage<Entity, std::remove_const_t<Get>> &... gpool) ENTT_NOEXCEPT\n        : handler{&ref},\n          pools{&gpool...}\n    {}\n\n    template<typename Func, typename... Weak>\n    void traverse(Func func, type_list<Weak...>) const {\n        for(const auto entt: *handler) {\n            if constexpr(std::is_invocable_v<Func, decltype(get<Weak>({}))...>) {\n                func(std::get<pool_type<Weak> *>(pools)->get(entt)...);\n            } else {\n                func(entt, std::get<pool_type<Weak> *>(pools)->get(entt)...);\n            }\n        }\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Input iterator type. */\n    using iterator = typename sparse_set<Entity>::iterator;\n\n    /**\n     * @brief Returns the number of existing components of the given type.\n     * @tparam Component Type of component of which to return the size.\n     * @return Number of existing components of the given type.\n     */\n    template<typename Component>\n    size_type size() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Component> *>(pools)->size();\n    }\n\n    /**\n     * @brief Returns the number of entities that have the given components.\n     * @return Number of entities that have the given components.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return handler->size();\n    }\n\n    /**\n     * @brief Returns the number of elements that a group has currently\n     * allocated space for.\n     * @return Capacity of the group.\n     */\n    size_type capacity() const ENTT_NOEXCEPT {\n        return handler->capacity();\n    }\n\n    /*! @brief Requests the removal of unused capacity. */\n    void shrink_to_fit() {\n        handler->shrink_to_fit();\n    }\n\n    /**\n     * @brief Checks whether a group or some pools are empty.\n     * @tparam Component Types of components in which one is interested.\n     * @return True if the group or the pools are empty, false otherwise.\n     */\n    template<typename... Component>\n    bool empty() const ENTT_NOEXCEPT {\n        if constexpr(sizeof...(Component) == 0) {\n            return handler->empty();\n        } else {\n            return (std::get<pool_type<Component> *>(pools)->empty() && ...);\n        }\n    }\n\n    /**\n     * @brief Direct access to the list of components of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[raw<Component>(), raw<Component>() + size<Component>()]` is always a\n     * valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the components. Use `begin` and\n     * `end` if you want to iterate the group in the expected order.\n     *\n     * @tparam Component Type of component in which one is interested.\n     * @return A pointer to the array of components.\n     */\n    template<typename Component>\n    Component * raw() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Component> *>(pools)->raw();\n    }\n\n    /**\n     * @brief Direct access to the list of entities of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[data<Component>(), data<Component>() + size<Component>()]` is always a\n     * valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the group in the expected order.\n     *\n     * @tparam Component Type of component in which one is interested.\n     * @return A pointer to the array of entities.\n     */\n    template<typename Component>\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Component> *>(pools)->data();\n    }\n\n    /**\n     * @brief Direct access to the list of entities.\n     *\n     * The returned pointer is such that range `[data(), data() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the group in the expected order.\n     *\n     * @return A pointer to the array of entities.\n     */\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return handler->data();\n    }\n\n    /**\n     * @brief Returns an iterator to the first entity that has the given\n     * components.\n     *\n     * The returned iterator points to the first entity that has the given\n     * components. If the group is empty, the returned iterator will be equal to\n     * `end()`.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the first entity that has the given components.\n     */\n    iterator begin() const ENTT_NOEXCEPT {\n        return handler->begin();\n    }\n\n    /**\n     * @brief Returns an iterator that is past the last entity that has the\n     * given components.\n     *\n     * The returned iterator points to the entity following the last entity that\n     * has the given components. Attempting to dereference the returned iterator\n     * results in undefined behavior.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the entity following the last entity that has the\n     * given components.\n     */\n    iterator end() const ENTT_NOEXCEPT {\n        return handler->end();\n    }\n\n    /**\n     * @brief Returns the first entity that has the given components, if any.\n     * @return The first entity that has the given components if one exists, the\n     * null entity otherwise.\n     */\n    entity_type front() const {\n        const auto it = begin();\n        return it != end() ? *it : null;\n    }\n\n    /**\n     * @brief Returns the last entity that has the given components, if any.\n     * @return The last entity that has the given components if one exists, the\n     * null entity otherwise.\n     */\n    entity_type back() const {\n        const auto it = std::make_reverse_iterator(end());\n        return it != std::make_reverse_iterator(begin()) ? *it : null;\n    }\n\n    /**\n     * @brief Finds an entity.\n     * @param entt A valid entity identifier.\n     * @return An iterator to the given entity if it's found, past the end\n     * iterator otherwise.\n     */\n    iterator find(const entity_type entt) const {\n        const auto it = handler->find(entt);\n        return it != end() && *it == entt ? it : end();\n    }\n\n    /**\n     * @brief Returns the identifier that occupies the given position.\n     * @param pos Position of the element to return.\n     * @return The identifier that occupies the given position.\n     */\n    entity_type operator[](const size_type pos) const {\n        return begin()[pos];\n    }\n\n    /**\n     * @brief Checks if a group contains an entity.\n     * @param entt A valid entity identifier.\n     * @return True if the group contains the given entity, false otherwise.\n     */\n    bool contains(const entity_type entt) const {\n        return handler->contains(entt);\n    }\n\n    /**\n     * @brief Returns the components assigned to the given entity.\n     *\n     * Prefer this function instead of `registry::get` during iterations. It has\n     * far better performance than its counterpart.\n     *\n     * @warning\n     * Attempting to use an invalid component type results in a compilation\n     * error. Attempting to use an entity that doesn't belong to the group\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * group doesn't contain the given entity.\n     *\n     * @tparam Component Types of components to get.\n     * @param entt A valid entity identifier.\n     * @return The components assigned to the entity.\n     */\n    template<typename... Component>\n    decltype(auto) get([[maybe_unused]] const entity_type entt) const {\n        ENTT_ASSERT(contains(entt));\n\n        if constexpr(sizeof...(Component) == 1) {\n            return (std::get<pool_type<Component> *>(pools)->get(entt), ...);\n        } else {\n            return std::tuple<decltype(get<Component>({}))...>{get<Component>(entt)...};\n        }\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a set of references to non-empty components. The\n     * _constness_ of the components is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Type &...);\n     * void(Type &...);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        using get_type_list = type_list_cat_t<std::conditional_t<ENTT_IS_EMPTY(Get), type_list<>, type_list<Get>>...>;\n        traverse(std::move(func), get_type_list{});\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a set of references to non-empty components. The\n     * _constness_ of the components is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Type &...);\n     * void(Type &...);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    [[deprecated(\"use ::each instead\")]]\n    void less(Func func) const {\n        each(std::move(func));\n    }\n\n    /**\n     * @brief Sort a group according to the given comparison function.\n     *\n     * Sort the group so that iterating it with a couple of iterators returns\n     * entities and components in the expected order. See `begin` and `end` for\n     * more details.\n     *\n     * The comparison function object must return `true` if the first element\n     * is _less_ than the second one, `false` otherwise. The signature of the\n     * comparison function should be equivalent to one of the following:\n     *\n     * @code{.cpp}\n     * bool(std::tuple<Component &...>, std::tuple<Component &...>);\n     * bool(const Component &..., const Component &...);\n     * bool(const Entity, const Entity);\n     * @endcode\n     *\n     * Where `Component` are such that they are iterated by the group.<br/>\n     * Moreover, the comparison function object shall induce a\n     * _strict weak ordering_ on the values.\n     *\n     * The sort function oject must offer a member function template\n     * `operator()` that accepts three arguments:\n     *\n     * * An iterator to the first element of the range to sort.\n     * * An iterator past the last element of the range to sort.\n     * * A comparison function to use to compare the elements.\n     *\n     * @note\n     * Attempting to iterate elements using a raw pointer returned by a call to\n     * either `data` or `raw` gives no guarantees on the order, even though\n     * `sort` has been invoked.\n     *\n     * @tparam Component Optional types of components to compare.\n     * @tparam Compare Type of comparison function object.\n     * @tparam Sort Type of sort function object.\n     * @tparam Args Types of arguments to forward to the sort function object.\n     * @param compare A valid comparison function object.\n     * @param algo A valid sort function object.\n     * @param args Arguments to forward to the sort function object, if any.\n     */\n    template<typename... Component, typename Compare, typename Sort = std_sort, typename... Args>\n    void sort(Compare compare, Sort algo = Sort{}, Args &&... args) {\n        if constexpr(sizeof...(Component) == 0) {\n            static_assert(std::is_invocable_v<Compare, const entity_type, const entity_type>);\n            handler->sort(handler->begin(), handler->end(), std::move(compare), std::move(algo), std::forward<Args>(args)...);\n        }  else if constexpr(sizeof...(Component) == 1) {\n            handler->sort(handler->begin(), handler->end(), [this, compare = std::move(compare)](const entity_type lhs, const entity_type rhs) {\n                return compare((std::get<pool_type<Component> *>(pools)->get(lhs), ...), (std::get<pool_type<Component> *>(pools)->get(rhs), ...));\n            }, std::move(algo), std::forward<Args>(args)...);\n        } else {\n            handler->sort(handler->begin(), handler->end(), [this, compare = std::move(compare)](const entity_type lhs, const entity_type rhs) {\n                return compare(std::tuple<decltype(get<Component>({}))...>{std::get<pool_type<Component> *>(pools)->get(lhs)...}, std::tuple<decltype(get<Component>({}))...>{std::get<pool_type<Component> *>(pools)->get(rhs)...});\n            }, std::move(algo), std::forward<Args>(args)...);\n        }\n    }\n\n    /**\n     * @brief Sort the shared pool of entities according to the given component.\n     *\n     * Non-owning groups of the same type share with the registry a pool of\n     * entities with its own order that doesn't depend on the order of any pool\n     * of components. Users can order the underlying data structure so that it\n     * respects the order of the pool of the given component.\n     *\n     * @note\n     * The shared pool of entities and thus its order is affected by the changes\n     * to each and every pool that it tracks. Therefore changes to those pools\n     * can quickly ruin the order imposed to the pool of entities shared between\n     * the non-owning groups.\n     *\n     * @tparam Component Type of component to use to impose the order.\n     */\n    template<typename Component>\n    void sort() const {\n        handler->respect(*std::get<pool_type<Component> *>(pools));\n    }\n\nprivate:\n    sparse_set<entity_type> *handler;\n    const std::tuple<pool_type<Get> *...> pools;\n};\n\n\n/**\n * @brief Owning group.\n *\n * Owning groups return all entities and only the entities that have at least\n * the given components. Moreover:\n *\n * * It's guaranteed that the entity list is tightly packed in memory for fast\n *   iterations.\n * * It's guaranteed that the lists of owned components are tightly packed in\n *   memory for even faster iterations and to allow direct access.\n * * They stay true to the order of the owned components and all instances have\n *   the same order in memory.\n *\n * The more types of components are owned by a group, the faster it is to\n * iterate them.\n *\n * @b Important\n *\n * Iterators aren't invalidated if:\n *\n * * New instances of the given components are created and assigned to entities.\n * * The entity currently pointed is modified (as an example, if one of the\n *   given components is removed from the entity to which the iterator points).\n * * The entity currently pointed is destroyed.\n *\n * In all other cases, modifying the pools iterated by the group in any way\n * invalidates all the iterators and using them results in undefined behavior.\n *\n * @note\n * Groups share references to the underlying data structures of the registry\n * that generated them. Therefore any change to the entities and to the\n * components made by means of the registry are immediately reflected by all the\n * groups.\n * Moreover, sorting an owning group affects all the instance of the same group\n * (it means that users don't have to call `sort` on each instance to sort all\n * of them because they share the underlying data structure).\n *\n * @warning\n * Lifetime of a group must not overcome that of the registry that generated it.\n * In any other case, attempting to use a group results in undefined behavior.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n * @tparam Exclude Types of components used to filter the group.\n * @tparam Get Types of components observed by the group.\n * @tparam Owned Types of components owned by the group.\n */\ntemplate<typename Entity, typename... Exclude, typename... Get, typename... Owned>\nclass basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> {\n    /*! @brief A registry is allowed to create groups. */\n    friend class basic_registry<Entity>;\n\n    template<typename Component>\n    using pool_type = std::conditional_t<std::is_const_v<Component>, const storage<Entity, std::remove_const_t<Component>>, storage<Entity, Component>>;\n\n    template<typename Component>\n    using component_iterator = decltype(std::declval<pool_type<Component>>().begin());\n\n    // we could use pool_type<Type> &..., but vs complains about it and refuses to compile for unknown reasons (most likely a bug)\n    basic_group(const std::size_t &ref, const std::size_t &extent, storage<Entity, std::remove_const_t<Owned>> &... opool, storage<Entity, std::remove_const_t<Get>> &... gpool) ENTT_NOEXCEPT\n        : pools{&opool..., &gpool...},\n          length{&extent},\n          super{&ref}\n    {}\n\n    template<typename Func, typename... Strong, typename... Weak>\n    void traverse(Func func, type_list<Strong...>, type_list<Weak...>) const {\n        [[maybe_unused]] auto it = std::make_tuple((std::get<pool_type<Strong> *>(pools)->end() - *length)...);\n        [[maybe_unused]] auto data = std::get<0>(pools)->sparse_set<entity_type>::end() - *length;\n\n        for(auto next = *length; next; --next) {\n            if constexpr(std::is_invocable_v<Func, decltype(get<Strong>({}))..., decltype(get<Weak>({}))...>) {\n                if constexpr(sizeof...(Weak) == 0) {\n                    func(*(std::get<component_iterator<Strong>>(it)++)...);\n                } else {\n                    const auto entt = *(data++);\n                    func(*(std::get<component_iterator<Strong>>(it)++)..., std::get<pool_type<Weak> *>(pools)->get(entt)...);\n                }\n            } else {\n                const auto entt = *(data++);\n                func(entt, *(std::get<component_iterator<Strong>>(it)++)..., std::get<pool_type<Weak> *>(pools)->get(entt)...);\n            }\n        }\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Input iterator type. */\n    using iterator = typename sparse_set<Entity>::iterator;\n\n    /**\n     * @brief Returns the number of existing components of the given type.\n     * @tparam Component Type of component of which to return the size.\n     * @return Number of existing components of the given type.\n     */\n    template<typename Component>\n    size_type size() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Component> *>(pools)->size();\n    }\n\n    /**\n     * @brief Returns the number of entities that have the given components.\n     * @return Number of entities that have the given components.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return *length;\n    }\n\n    /**\n     * @brief Checks whether a group or some pools are empty.\n     * @tparam Component Types of components in which one is interested.\n     * @return True if the group or the pools are empty, false otherwise.\n     */\n    template<typename... Component>\n    bool empty() const ENTT_NOEXCEPT {\n        if constexpr(sizeof...(Component) == 0) {\n            return !*length;\n        } else {\n            return (std::get<pool_type<Component> *>(pools)->empty() && ...);\n        }\n    }\n\n    /**\n     * @brief Direct access to the list of components of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[raw<Component>(), raw<Component>() + size<Component>()]` is always a\n     * valid range, even if the container is empty.<br/>\n     * Moreover, in case the group owns the given component, the range\n     * `[raw<Component>(), raw<Component>() + size()]` is such that it contains\n     * the instances that are part of the group itself.\n     *\n     * @note\n     * There are no guarantees on the order of the components. Use `begin` and\n     * `end` if you want to iterate the group in the expected order.\n     *\n     * @tparam Component Type of component in which one is interested.\n     * @return A pointer to the array of components.\n     */\n    template<typename Component>\n    Component * raw() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Component> *>(pools)->raw();\n    }\n\n    /**\n     * @brief Direct access to the list of entities of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[data<Component>(), data<Component>() + size<Component>()]` is always a\n     * valid range, even if the container is empty.<br/>\n     * Moreover, in case the group owns the given component, the range\n     * `[data<Component>(), data<Component>() + size()]` is such that it\n     * contains the entities that are part of the group itself.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the group in the expected order.\n     *\n     * @tparam Component Type of component in which one is interested.\n     * @return A pointer to the array of entities.\n     */\n    template<typename Component>\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Component> *>(pools)->data();\n    }\n\n    /**\n     * @brief Direct access to the list of entities.\n     *\n     * The returned pointer is such that range `[data(), data() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the group in the expected order.\n     *\n     * @return A pointer to the array of entities.\n     */\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return std::get<0>(pools)->data();\n    }\n\n    /**\n     * @brief Returns an iterator to the first entity that has the given\n     * components.\n     *\n     * The returned iterator points to the first entity that has the given\n     * components. If the group is empty, the returned iterator will be equal to\n     * `end()`.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the first entity that has the given components.\n     */\n    iterator begin() const ENTT_NOEXCEPT {\n        return std::get<0>(pools)->sparse_set<entity_type>::end() - *length;\n    }\n\n    /**\n     * @brief Returns an iterator that is past the last entity that has the\n     * given components.\n     *\n     * The returned iterator points to the entity following the last entity that\n     * has the given components. Attempting to dereference the returned iterator\n     * results in undefined behavior.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the entity following the last entity that has the\n     * given components.\n     */\n    iterator end() const ENTT_NOEXCEPT {\n        return std::get<0>(pools)->sparse_set<entity_type>::end();\n    }\n\n    /**\n     * @brief Returns the first entity that has the given components, if any.\n     * @return The first entity that has the given components if one exists, the\n     * null entity otherwise.\n     */\n    entity_type front() const {\n        const auto it = begin();\n        return it != end() ? *it : null;\n    }\n\n    /**\n     * @brief Returns the last entity that has the given components, if any.\n     * @return The last entity that has the given components if one exists, the\n     * null entity otherwise.\n     */\n    entity_type back() const {\n        const auto it = std::make_reverse_iterator(end());\n        return it != std::make_reverse_iterator(begin()) ? *it : null;\n    }\n\n    /**\n     * @brief Finds an entity.\n     * @param entt A valid entity identifier.\n     * @return An iterator to the given entity if it's found, past the end\n     * iterator otherwise.\n     */\n    iterator find(const entity_type entt) const {\n        const auto it = std::get<0>(pools)->find(entt);\n        return it != end() && it >= begin() && *it == entt ? it : end();\n    }\n\n    /**\n     * @brief Returns the identifier that occupies the given position.\n     * @param pos Position of the element to return.\n     * @return The identifier that occupies the given position.\n     */\n    entity_type operator[](const size_type pos) const {\n        return begin()[pos];\n    }\n\n    /**\n     * @brief Checks if a group contains an entity.\n     * @param entt A valid entity identifier.\n     * @return True if the group contains the given entity, false otherwise.\n     */\n    bool contains(const entity_type entt) const {\n        return std::get<0>(pools)->contains(entt) && (std::get<0>(pools)->index(entt) < (*length));\n    }\n\n    /**\n     * @brief Returns the components assigned to the given entity.\n     *\n     * Prefer this function instead of `registry::get` during iterations. It has\n     * far better performance than its counterpart.\n     *\n     * @warning\n     * Attempting to use an invalid component type results in a compilation\n     * error. Attempting to use an entity that doesn't belong to the group\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * group doesn't contain the given entity.\n     *\n     * @tparam Component Types of components to get.\n     * @param entt A valid entity identifier.\n     * @return The components assigned to the entity.\n     */\n    template<typename... Component>\n    decltype(auto) get([[maybe_unused]] const entity_type entt) const {\n        ENTT_ASSERT(contains(entt));\n\n        if constexpr(sizeof...(Component) == 1) {\n            return (std::get<pool_type<Component> *>(pools)->get(entt), ...);\n        } else {\n            return std::tuple<decltype(get<Component>({}))...>{get<Component>(entt)...};\n        }\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a set of references to non-empty components. The\n     * _constness_ of the components is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Type &...);\n     * void(Type &...);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        using owned_type_list = type_list_cat_t<std::conditional_t<ENTT_IS_EMPTY(Owned), type_list<>, type_list<Owned>>...>;\n        using get_type_list = type_list_cat_t<std::conditional_t<ENTT_IS_EMPTY(Get), type_list<>, type_list<Get>>...>;\n        traverse(std::move(func), owned_type_list{}, get_type_list{});\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a set of references to non-empty components. The\n     * _constness_ of the components is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Type &...);\n     * void(Type &...);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    [[deprecated(\"use ::each instead\")]]\n    void less(Func func) const {\n        each(std::move(func));\n    }\n\n    /**\n     * @brief Checks whether the group can be sorted.\n     * @return True if the group can be sorted, false otherwise.\n     */\n    bool sortable() const ENTT_NOEXCEPT {\n        constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude);\n        return *super == size;\n    }\n\n    /**\n     * @brief Sort a group according to the given comparison function.\n     *\n     * Sort the group so that iterating it with a couple of iterators returns\n     * entities and components in the expected order. See `begin` and `end` for\n     * more details.\n     *\n     * The comparison function object must return `true` if the first element\n     * is _less_ than the second one, `false` otherwise. The signature of the\n     * comparison function should be equivalent to one of the following:\n     *\n     * @code{.cpp}\n     * bool(std::tuple<Component &...>, std::tuple<Component &...>);\n     * bool(const Component &, const Component &);\n     * bool(const Entity, const Entity);\n     * @endcode\n     *\n     * Where `Component` are either owned types or not but still such that they\n     * are iterated by the group.<br/>\n     * Moreover, the comparison function object shall induce a\n     * _strict weak ordering_ on the values.\n     *\n     * The sort function oject must offer a member function template\n     * `operator()` that accepts three arguments:\n     *\n     * * An iterator to the first element of the range to sort.\n     * * An iterator past the last element of the range to sort.\n     * * A comparison function to use to compare the elements.\n     *\n     * @note\n     * Attempting to iterate elements using a raw pointer returned by a call to\n     * either `data` or `raw` gives no guarantees on the order, even though\n     * `sort` has been invoked.\n     *\n     * @tparam Component Optional types of components to compare.\n     * @tparam Compare Type of comparison function object.\n     * @tparam Sort Type of sort function object.\n     * @tparam Args Types of arguments to forward to the sort function object.\n     * @param compare A valid comparison function object.\n     * @param algo A valid sort function object.\n     * @param args Arguments to forward to the sort function object, if any.\n     */\n    template<typename... Component, typename Compare, typename Sort = std_sort, typename... Args>\n    void sort(Compare compare, Sort algo = Sort{}, Args &&... args) {\n        ENTT_ASSERT(sortable());\n        auto *cpool = std::get<0>(pools);\n\n        if constexpr(sizeof...(Component) == 0) {\n            static_assert(std::is_invocable_v<Compare, const entity_type, const entity_type>);\n            cpool->sort(cpool->end()-*length, cpool->end(), std::move(compare), std::move(algo), std::forward<Args>(args)...);\n        } else if constexpr(sizeof...(Component) == 1) {\n            cpool->sort(cpool->end()-*length, cpool->end(), [this, compare = std::move(compare)](const entity_type lhs, const entity_type rhs) {\n                return compare((std::get<pool_type<Component> *>(pools)->get(lhs), ...), (std::get<pool_type<Component> *>(pools)->get(rhs), ...));\n            }, std::move(algo), std::forward<Args>(args)...);\n        } else {\n            cpool->sort(cpool->end()-*length, cpool->end(), [this, compare = std::move(compare)](const entity_type lhs, const entity_type rhs) {\n                return compare(std::tuple<decltype(get<Component>({}))...>{std::get<pool_type<Component> *>(pools)->get(lhs)...}, std::tuple<decltype(get<Component>({}))...>{std::get<pool_type<Component> *>(pools)->get(rhs)...});\n            }, std::move(algo), std::forward<Args>(args)...);\n        }\n\n        [this](auto *head, auto *... other) {\n            for(auto next = *length; next; --next) {\n                const auto pos = next - 1;\n                [[maybe_unused]] const auto entt = head->data()[pos];\n                (other->swap(other->data()[pos], entt), ...);\n            }\n        }(std::get<pool_type<Owned> *>(pools)...);\n    }\n\nprivate:\n    const std::tuple<pool_type<Owned> *..., pool_type<Get> *...> pools;\n    const size_type *length;\n    const size_type *super;\n};\n\n\n}\n\n\n#endif\n\n// #include \"runtime_view.hpp\"\n#ifndef ENTT_ENTITY_RUNTIME_VIEW_HPP\n#define ENTT_ENTITY_RUNTIME_VIEW_HPP\n\n\n#include <iterator>\n#include <vector>\n#include <utility>\n#include <algorithm>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"sparse_set.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Runtime view.\n *\n * Runtime views iterate over those entities that have at least all the given\n * components in their bags. During initialization, a runtime view looks at the\n * number of entities available for each component and picks up a reference to\n * the smallest set of candidate entities in order to get a performance boost\n * when iterate.<br/>\n * Order of elements during iterations are highly dependent on the order of the\n * underlying data structures. See sparse_set and its specializations for more\n * details.\n *\n * @b Important\n *\n * Iterators aren't invalidated if:\n *\n * * New instances of the given components are created and assigned to entities.\n * * The entity currently pointed is modified (as an example, if one of the\n *   given components is removed from the entity to which the iterator points).\n * * The entity currently pointed is destroyed.\n *\n * In all the other cases, modifying the pools of the given components in any\n * way invalidates all the iterators and using them results in undefined\n * behavior.\n *\n * @note\n * Views share references to the underlying data structures of the registry that\n * generated them. Therefore any change to the entities and to the components\n * made by means of the registry are immediately reflected by the views, unless\n * a pool was missing when the view was built (in this case, the view won't\n * have a valid reference and won't be updated accordingly).\n *\n * @warning\n * Lifetime of a view must not overcome that of the registry that generated it.\n * In any other case, attempting to use a view results in undefined behavior.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass basic_runtime_view {\n    /*! @brief A registry is allowed to create views. */\n    friend class basic_registry<Entity>;\n\n    using underlying_iterator = typename sparse_set<Entity>::iterator;\n\n    class view_iterator final {\n        friend class basic_runtime_view<Entity>;\n\n        using direct_type = std::vector<const sparse_set<Entity> *>;\n\n        view_iterator(const direct_type &all, underlying_iterator curr) ENTT_NOEXCEPT\n            : pools{&all},\n              it{curr}\n        {\n            if(it != (*pools)[0]->end() && !valid()) {\n                ++(*this);\n            }\n        }\n\n        bool valid() const {\n            return std::all_of(pools->begin()++, pools->end(), [entt = *it](const auto *curr) {\n                return curr->contains(entt);\n            });\n        }\n\n    public:\n        using difference_type = typename underlying_iterator::difference_type;\n        using value_type = typename underlying_iterator::value_type;\n        using pointer = typename underlying_iterator::pointer;\n        using reference = typename underlying_iterator::reference;\n        using iterator_category = std::bidirectional_iterator_tag;\n\n        view_iterator() ENTT_NOEXCEPT = default;\n\n        view_iterator & operator++() {\n            while(++it != (*pools)[0]->end() && !valid());\n            return *this;\n        }\n\n        view_iterator operator++(int) {\n            view_iterator orig = *this;\n            return operator++(), orig;\n        }\n\n        view_iterator & operator--() ENTT_NOEXCEPT {\n            while(--it != (*pools)[0]->begin() && !valid());\n            return *this;\n        }\n\n        view_iterator operator--(int) ENTT_NOEXCEPT {\n            view_iterator orig = *this;\n            return operator--(), orig;\n        }\n\n        bool operator==(const view_iterator &other) const ENTT_NOEXCEPT {\n            return other.it == it;\n        }\n\n        bool operator!=(const view_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this == other);\n        }\n\n        pointer operator->() const {\n            return it.operator->();\n        }\n\n        reference operator*() const {\n            return *operator->();\n        }\n\n    private:\n        const direct_type *pools;\n        underlying_iterator it;\n    };\n\n    basic_runtime_view(std::vector<const sparse_set<Entity> *> others) ENTT_NOEXCEPT\n        : pools{std::move(others)}\n    {\n        const auto it = std::min_element(pools.begin(), pools.end(), [](const auto *lhs, const auto *rhs) {\n            return (!lhs && rhs) || (lhs && rhs && lhs->size() < rhs->size());\n        });\n\n        // brings the best candidate (if any) on front of the vector\n        std::rotate(pools.begin(), it, pools.end());\n    }\n\n    bool valid() const {\n        return !pools.empty() && pools.front();\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Input iterator type. */\n    using iterator = view_iterator;\n\n    /**\n     * @brief Estimates the number of entities that have the given components.\n     * @return Estimated number of entities that have the given components.\n     */\n    size_type size() const {\n        return valid() ? pools.front()->size() : size_type{};\n    }\n\n    /**\n     * @brief Checks if the view is definitely empty.\n     * @return True if the view is definitely empty, false otherwise.\n     */\n    bool empty() const {\n        return !valid() || pools.front()->empty();\n    }\n\n    /**\n     * @brief Returns an iterator to the first entity that has the given\n     * components.\n     *\n     * The returned iterator points to the first entity that has the given\n     * components. If the view is empty, the returned iterator will be equal to\n     * `end()`.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the first entity that has the given components.\n     */\n    iterator begin() const {\n        iterator it{};\n\n        if(valid()) {\n            it = { pools, pools[0]->begin() };\n        }\n\n        return it;\n    }\n\n    /**\n     * @brief Returns an iterator that is past the last entity that has the\n     * given components.\n     *\n     * The returned iterator points to the entity following the last entity that\n     * has the given components. Attempting to dereference the returned iterator\n     * results in undefined behavior.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the entity following the last entity that has the\n     * given components.\n     */\n    iterator end() const {\n        iterator it{};\n\n        if(valid()) {\n            it = { pools, pools[0]->end() };\n        }\n\n        return it;\n    }\n\n    /**\n     * @brief Checks if a view contains an entity.\n     * @param entt A valid entity identifier.\n     * @return True if the view contains the given entity, false otherwise.\n     */\n    bool contains(const entity_type entt) const {\n        return valid() && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *view) {\n            return view->find(entt) != view->end();\n        });\n    }\n\n    /**\n     * @brief Iterates entities and applies the given function object to them.\n     *\n     * The function object is invoked for each entity. It is provided only with\n     * the entity itself. To get the components, users can use the registry with\n     * which the view was built.<br/>\n     * The signature of the function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(const entity_type);\n     * @endcode\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        for(const auto entity: *this) {\n            func(entity);\n        }\n    }\n\nprivate:\n    std::vector<const sparse_set<Entity> *> pools;\n};\n\n\n}\n\n\n#endif\n\n// #include \"snapshot.hpp\"\n#ifndef ENTT_ENTITY_SNAPSHOT_HPP\n#define ENTT_ENTITY_SNAPSHOT_HPP\n\n\n#include <array>\n#include <vector>\n#include <cstddef>\n#include <utility>\n#include <iterator>\n#include <type_traits>\n#include <unordered_map>\n// #include \"../config/config.h\"\n\n// #include \"entity.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Utility class to create snapshots from a registry.\n *\n * A _snapshot_ can be either a dump of the entire registry or a narrower\n * selection of components of interest.<br/>\n * This type can be used in both cases if provided with a correctly configured\n * output archive.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass basic_snapshot {\n    /*! @brief A registry is allowed to create snapshots. */\n    friend class basic_registry<Entity>;\n\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n\n    template<typename Component, typename Archive, typename It>\n    void get(Archive &archive, std::size_t sz, It first, It last) const {\n        archive(typename traits_type::entity_type(sz));\n\n        while(first != last) {\n            const auto entt = *(first++);\n\n            if(reg->template has<Component>(entt)) {\n                if constexpr(std::is_empty_v<Component>) {\n                    archive(entt);\n                } else {\n                    archive(entt, reg->template get<Component>(entt));\n                }\n            }\n        }\n    }\n\n    template<typename... Component, typename Archive, typename It, std::size_t... Indexes>\n    void component(Archive &archive, It first, It last, std::index_sequence<Indexes...>) const {\n        std::array<std::size_t, sizeof...(Indexes)> size{};\n        auto begin = first;\n\n        while(begin != last) {\n            const auto entt = *(begin++);\n            ((reg->template has<Component>(entt) ? ++size[Indexes] : size[Indexes]), ...);\n        }\n\n        (get<Component>(archive, size[Indexes], first, last), ...);\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n\n    /**\n     * @brief Constructs an instance that is bound to a given registry.\n     * @param source A valid reference to a registry.\n     */\n    basic_snapshot(const basic_registry<entity_type> &source) ENTT_NOEXCEPT\n        : reg{&source}\n    {}\n\n    /*! @brief Default move constructor. */\n    basic_snapshot(basic_snapshot &&) = default;\n\n    /*! @brief Default move assignment operator. @return This snapshot. */\n    basic_snapshot & operator=(basic_snapshot &&) = default;\n\n    /**\n     * @brief Puts aside all the entities from the underlying registry.\n     *\n     * Entities are serialized along with their versions. Destroyed entities are\n     * taken in consideration as well by this function.\n     *\n     * @tparam Archive Type of output archive.\n     * @param archive A valid reference to an output archive.\n     * @return An object of this type to continue creating the snapshot.\n     */\n    template<typename Archive>\n    const basic_snapshot & entities(Archive &archive) const {\n        const auto sz = reg->size();\n        auto first = reg->data();\n        const auto last = first + sz;\n\n        archive(typename traits_type::entity_type(sz));\n\n        while(first != last) {\n            archive(*(first++));\n        }\n\n        return *this;\n    }\n\n    /**\n     * @brief Deprecated function. Currently, it does nothing.\n     * @tparam Archive Type of output archive.\n     * @return An object of this type to continue creating the snapshot.\n     */\n    template<typename Archive>\n    [[deprecated(\"use ::entities instead, it exports now also destroyed entities\")]]\n    const basic_snapshot & destroyed(Archive &) const { return *this; }\n\n    /**\n     * @brief Puts aside the given components.\n     *\n     * Each instance is serialized together with the entity to which it belongs.\n     * Entities are serialized along with their versions.\n     *\n     * @tparam Component Types of components to serialize.\n     * @tparam Archive Type of output archive.\n     * @param archive A valid reference to an output archive.\n     * @return An object of this type to continue creating the snapshot.\n     */\n    template<typename... Component, typename Archive>\n    const basic_snapshot & component(Archive &archive) const {\n        (component<Component>(archive, reg->template data<Component>(), reg->template data<Component>() + reg->template size<Component>()), ...);\n        return *this;\n    }\n\n    /**\n     * @brief Puts aside the given components for the entities in a range.\n     *\n     * Each instance is serialized together with the entity to which it belongs.\n     * Entities are serialized along with their versions.\n     *\n     * @tparam Component Types of components to serialize.\n     * @tparam Archive Type of output archive.\n     * @tparam It Type of input iterator.\n     * @param archive A valid reference to an output archive.\n     * @param first An iterator to the first element of the range to serialize.\n     * @param last An iterator past the last element of the range to serialize.\n     * @return An object of this type to continue creating the snapshot.\n     */\n    template<typename... Component, typename Archive, typename It>\n    const basic_snapshot & component(Archive &archive, It first, It last) const {\n        component<Component...>(archive, first, last, std::index_sequence_for<Component...>{});\n        return *this;\n    }\n\nprivate:\n    const basic_registry<entity_type> *reg;\n};\n\n\n/**\n * @brief Utility class to restore a snapshot as a whole.\n *\n * A snapshot loader requires that the destination registry be empty and loads\n * all the data at once while keeping intact the identifiers that the entities\n * originally had.<br/>\n * An example of use is the implementation of a save/restore utility.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass basic_snapshot_loader {\n    /*! @brief A registry is allowed to create snapshot loaders. */\n    friend class basic_registry<Entity>;\n\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n\n    template<typename Type, typename Archive, typename... Args>\n    void assign(Archive &archive, Args... args) const {\n        typename traits_type::entity_type length{};\n        archive(length);\n\n        while(length--) {\n            entity_type entt{};\n\n            if constexpr(std::is_empty_v<Type>) {\n                archive(entt);\n                const auto entity = reg->valid(entt) ? entt : reg->create(entt);\n                ENTT_ASSERT(entity == entt);\n                reg->template emplace<Type>(args..., entt);\n            } else {\n                Type instance{};\n                archive(entt, instance);\n                const auto entity = reg->valid(entt) ? entt : reg->create(entt);\n                ENTT_ASSERT(entity == entt);\n                reg->template emplace<Type>(args..., entt, std::as_const(instance));\n            }\n        }\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n\n    /**\n     * @brief Constructs an instance that is bound to a given registry.\n     * @param source A valid reference to a registry.\n     */\n    basic_snapshot_loader(basic_registry<entity_type> &source) ENTT_NOEXCEPT\n        : reg{&source}\n    {\n        // restoring a snapshot as a whole requires a clean registry\n        ENTT_ASSERT(reg->empty());\n    }\n\n    /*! @brief Default move constructor. */\n    basic_snapshot_loader(basic_snapshot_loader &&) = default;\n\n    /*! @brief Default move assignment operator. @return This loader. */\n    basic_snapshot_loader & operator=(basic_snapshot_loader &&) = default;\n\n    /**\n     * @brief Restores entities that were in use during serialization.\n     *\n     * This function restores the entities that were in use during serialization\n     * and gives them the versions they originally had.\n     *\n     * @tparam Archive Type of input archive.\n     * @param archive A valid reference to an input archive.\n     * @return A valid loader to continue restoring data.\n     */\n    template<typename Archive>\n    const basic_snapshot_loader & entities(Archive &archive) const {\n        typename traits_type::entity_type length{};\n\n        archive(length);\n        std::vector<entity_type> all(length);\n\n        for(decltype(length) pos{}; pos < length; ++pos) {\n            archive(all[pos]);\n        }\n\n        reg->assign(all.cbegin(), all.cend());\n\n        return *this;\n    }\n\n    /**\n     * @brief Deprecated function. Currently, it does nothing.\n     * @tparam Archive Type of input archive.\n     * @return A valid loader to continue restoring data.\n     */\n    template<typename Archive>\n    [[deprecated(\"use ::entities instead, it imports now also destroyed entities\")]]\n    const basic_snapshot_loader & destroyed(Archive &) const { return *this; }\n\n    /**\n     * @brief Restores components and assigns them to the right entities.\n     *\n     * The template parameter list must be exactly the same used during\n     * serialization. In the event that the entity to which the component is\n     * assigned doesn't exist yet, the loader will take care to create it with\n     * the version it originally had.\n     *\n     * @tparam Component Types of components to restore.\n     * @tparam Archive Type of input archive.\n     * @param archive A valid reference to an input archive.\n     * @return A valid loader to continue restoring data.\n     */\n    template<typename... Component, typename Archive>\n    const basic_snapshot_loader & component(Archive &archive) const {\n        (assign<Component>(archive), ...);\n        return *this;\n    }\n\n    /**\n     * @brief Destroys those entities that have no components.\n     *\n     * In case all the entities were serialized but only part of the components\n     * was saved, it could happen that some of the entities have no components\n     * once restored.<br/>\n     * This functions helps to identify and destroy those entities.\n     *\n     * @return A valid loader to continue restoring data.\n     */\n    const basic_snapshot_loader & orphans() const {\n        reg->orphans([this](const auto entt) {\n            reg->destroy(entt);\n        });\n\n        return *this;\n    }\n\nprivate:\n    basic_registry<entity_type> *reg;\n};\n\n\n/**\n * @brief Utility class for _continuous loading_.\n *\n * A _continuous loader_ is designed to load data from a source registry to a\n * (possibly) non-empty destination. The loader can accommodate in a registry\n * more than one snapshot in a sort of _continuous loading_ that updates the\n * destination one step at a time.<br/>\n * Identifiers that entities originally had are not transferred to the target.\n * Instead, the loader maps remote identifiers to local ones while restoring a\n * snapshot.<br/>\n * An example of use is the implementation of a client-server applications with\n * the requirement of transferring somehow parts of the representation side to\n * side.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass basic_continuous_loader {\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n\n    void destroy(Entity entt) {\n        const auto it = remloc.find(entt);\n\n        if(it == remloc.cend()) {\n            const auto local = reg->create();\n            remloc.emplace(entt, std::make_pair(local, true));\n            reg->destroy(local);\n        }\n    }\n\n    void restore(Entity entt) {\n        const auto it = remloc.find(entt);\n\n        if(it == remloc.cend()) {\n            const auto local = reg->create();\n            remloc.emplace(entt, std::make_pair(local, true));\n        } else {\n            remloc[entt].first = reg->valid(remloc[entt].first) ? remloc[entt].first : reg->create();\n            // set the dirty flag\n            remloc[entt].second = true;\n        }\n    }\n\n    template<typename Container>\n    auto update(int, Container &container)\n    -> decltype(typename Container::mapped_type{}, void()) {\n        // map like container\n        Container other;\n\n        for(auto &&pair: container) {\n            using first_type = std::remove_const_t<typename std::decay_t<decltype(pair)>::first_type>;\n            using second_type = typename std::decay_t<decltype(pair)>::second_type;\n\n            if constexpr(std::is_same_v<first_type, entity_type> && std::is_same_v<second_type, entity_type>) {\n                other.emplace(map(pair.first), map(pair.second));\n            } else if constexpr(std::is_same_v<first_type, entity_type>) {\n                other.emplace(map(pair.first), std::move(pair.second));\n            } else {\n                static_assert(std::is_same_v<second_type, entity_type>);\n                other.emplace(std::move(pair.first), map(pair.second));\n            }\n        }\n\n        std::swap(container, other);\n    }\n\n    template<typename Container>\n    auto update(char, Container &container)\n    -> decltype(typename Container::value_type{}, void()) {\n        // vector like container\n        static_assert(std::is_same_v<typename Container::value_type, entity_type>);\n\n        for(auto &&entt: container) {\n            entt = map(entt);\n        }\n    }\n\n    template<typename Other, typename Type, typename Member>\n    void update([[maybe_unused]] Other &instance, [[maybe_unused]] Member Type:: *member) {\n        if constexpr(!std::is_same_v<Other, Type>) {\n            return;\n        } else if constexpr(std::is_same_v<Member, entity_type>) {\n            instance.*member = map(instance.*member);\n        } else {\n            // maybe a container? let's try...\n            update(0, instance.*member);\n        }\n    }\n\n    template<typename Component>\n    void remove_if_exists() {\n        for(auto &&ref: remloc) {\n            const auto local = ref.second.first;\n\n            if(reg->valid(local)) {\n                reg->template remove_if_exists<Component>(local);\n            }\n        }\n    }\n\n    template<typename Other, typename Archive, typename... Type, typename... Member>\n    void assign(Archive &archive, [[maybe_unused]] Member Type:: *... member) {\n        typename traits_type::entity_type length{};\n        archive(length);\n\n        while(length--) {\n            entity_type entt{};\n\n            if constexpr(std::is_empty_v<Other>) {\n                archive(entt);\n                restore(entt);\n                reg->template emplace_or_replace<Other>(map(entt));\n            } else {\n                Other instance{};\n                archive(entt, instance);\n                (update(instance, member), ...);\n                restore(entt);\n                reg->template emplace_or_replace<Other>(map(entt), std::as_const(instance));\n            }\n        }\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n\n    /**\n     * @brief Constructs an instance that is bound to a given registry.\n     * @param source A valid reference to a registry.\n     */\n    basic_continuous_loader(basic_registry<entity_type> &source) ENTT_NOEXCEPT\n        : reg{&source}\n    {}\n\n    /*! @brief Default move constructor. */\n    basic_continuous_loader(basic_continuous_loader &&) = default;\n\n    /*! @brief Default move assignment operator. @return This loader. */\n    basic_continuous_loader & operator=(basic_continuous_loader &&) = default;\n\n    /**\n     * @brief Restores entities that were in use during serialization.\n     *\n     * This function restores the entities that were in use during serialization\n     * and creates local counterparts for them if required.\n     *\n     * @tparam Archive Type of input archive.\n     * @param archive A valid reference to an input archive.\n     * @return A non-const reference to this loader.\n     */\n    template<typename Archive>\n    basic_continuous_loader & entities(Archive &archive) {\n        typename traits_type::entity_type length{};\n        entity_type entt{};\n\n        archive(length);\n\n        for(decltype(length) pos{}; pos < length; ++pos) {\n            archive(entt);\n\n            if(const auto entity = (to_integral(entt) & traits_type::entity_mask); entity == pos) {\n                restore(entt);\n            } else {\n                destroy(entt);\n            }\n        }\n\n        return *this;\n    }\n\n    /**\n     * @brief Deprecated function. Currently, it does nothing.\n     * @tparam Archive Type of input archive.\n     * @return A non-const reference to this loader.\n     */\n    template<typename Archive>\n    [[deprecated(\"use ::entities instead, it imports now also destroyed entities\")]]\n    basic_continuous_loader & destroyed(Archive &) { return *this; }\n\n    /**\n     * @brief Restores components and assigns them to the right entities.\n     *\n     * The template parameter list must be exactly the same used during\n     * serialization. In the event that the entity to which the component is\n     * assigned doesn't exist yet, the loader will take care to create a local\n     * counterpart for it.<br/>\n     * Members can be either data members of type entity_type or containers of\n     * entities. In both cases, the loader will visit them and update the\n     * entities by replacing each one with its local counterpart.\n     *\n     * @tparam Component Type of component to restore.\n     * @tparam Archive Type of input archive.\n     * @tparam Type Types of components to update with local counterparts.\n     * @tparam Member Types of members to update with their local counterparts.\n     * @param archive A valid reference to an input archive.\n     * @param member Members to update with their local counterparts.\n     * @return A non-const reference to this loader.\n     */\n    template<typename... Component, typename Archive, typename... Type, typename... Member>\n    basic_continuous_loader & component(Archive &archive, Member Type:: *... member) {\n        (remove_if_exists<Component>(), ...);\n        (assign<Component>(archive, member...), ...);\n        return *this;\n    }\n\n    /**\n     * @brief Helps to purge entities that no longer have a conterpart.\n     *\n     * Users should invoke this member function after restoring each snapshot,\n     * unless they know exactly what they are doing.\n     *\n     * @return A non-const reference to this loader.\n     */\n    basic_continuous_loader & shrink() {\n        auto it = remloc.begin();\n\n        while(it != remloc.cend()) {\n            const auto local = it->second.first;\n            bool &dirty = it->second.second;\n\n            if(dirty) {\n                dirty = false;\n                ++it;\n            } else {\n                if(reg->valid(local)) {\n                    reg->destroy(local);\n                }\n\n                it = remloc.erase(it);\n            }\n        }\n\n        return *this;\n    }\n\n    /**\n     * @brief Destroys those entities that have no components.\n     *\n     * In case all the entities were serialized but only part of the components\n     * was saved, it could happen that some of the entities have no components\n     * once restored.<br/>\n     * This functions helps to identify and destroy those entities.\n     *\n     * @return A non-const reference to this loader.\n     */\n    basic_continuous_loader & orphans() {\n        reg->orphans([this](const auto entt) {\n            reg->destroy(entt);\n        });\n\n        return *this;\n    }\n\n    /**\n     * @brief Tests if a loader knows about a given entity.\n     * @param entt An entity identifier.\n     * @return True if `entity` is managed by the loader, false otherwise.\n     */\n    bool contains(entity_type entt) const ENTT_NOEXCEPT {\n        return (remloc.find(entt) != remloc.cend());\n    }\n\n    /*! @copydoc contains */\n    [[deprecated(\"use ::contains instead\")]]\n    bool has(entity_type entt) const ENTT_NOEXCEPT {\n        return contains(entt);\n    }\n\n    /**\n     * @brief Returns the identifier to which an entity refers.\n     * @param entt An entity identifier.\n     * @return The local identifier if any, the null entity otherwise.\n     */\n    entity_type map(entity_type entt) const ENTT_NOEXCEPT {\n        const auto it = remloc.find(entt);\n        entity_type other = null;\n\n        if(it != remloc.cend()) {\n            other = it->second.first;\n        }\n\n        return other;\n    }\n\nprivate:\n    std::unordered_map<entity_type, std::pair<entity_type, bool>> remloc;\n    basic_registry<entity_type> *reg;\n};\n\n\n}\n\n\n#endif\n\n// #include \"sparse_set.hpp\"\n\n// #include \"storage.hpp\"\n\n// #include \"utility.hpp\"\n\n// #include \"view.hpp\"\n#ifndef ENTT_ENTITY_VIEW_HPP\n#define ENTT_ENTITY_VIEW_HPP\n\n\n#include <iterator>\n#include <array>\n#include <tuple>\n#include <utility>\n#include <algorithm>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/type_traits.hpp\"\n\n// #include \"sparse_set.hpp\"\n\n// #include \"storage.hpp\"\n\n// #include \"utility.hpp\"\n\n// #include \"entity.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief View.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error, but for a few reasonable cases.\n */\ntemplate<typename...>\nclass basic_view;\n\n\n/**\n * @brief Multi component view.\n *\n * Multi component views iterate over those entities that have at least all the\n * given components in their bags. During initialization, a multi component view\n * looks at the number of entities available for each component and uses the\n * smallest set in order to get a performance boost when iterate.\n *\n * @b Important\n *\n * Iterators aren't invalidated if:\n *\n * * New instances of the given components are created and assigned to entities.\n * * The entity currently pointed is modified (as an example, if one of the\n *   given components is removed from the entity to which the iterator points).\n * * The entity currently pointed is destroyed.\n *\n * In all other cases, modifying the pools iterated by the view in any way\n * invalidates all the iterators and using them results in undefined behavior.\n *\n * @note\n * Views share references to the underlying data structures of the registry that\n * generated them. Therefore any change to the entities and to the components\n * made by means of the registry are immediately reflected by views.\n *\n * @warning\n * Lifetime of a view must not overcome that of the registry that generated it.\n * In any other case, attempting to use a view results in undefined behavior.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n * @tparam Exclude Types of components used to filter the view.\n * @tparam Component Types of components iterated by the view.\n */\ntemplate<typename Entity, typename... Exclude, typename... Component>\nclass basic_view<Entity, exclude_t<Exclude...>, Component...> {\n    /*! @brief A registry is allowed to create views. */\n    friend class basic_registry<Entity>;\n\n    template<typename Comp>\n    using pool_type = std::conditional_t<std::is_const_v<Comp>, const storage<Entity, std::remove_const_t<Comp>>, storage<Entity, Comp>>;\n\n    template<typename Comp>\n    using component_iterator = decltype(std::declval<pool_type<Comp>>().begin());\n\n    using underlying_iterator = typename sparse_set<Entity>::iterator;\n    using unchecked_type = std::array<const sparse_set<Entity> *, (sizeof...(Component) - 1)>;\n    using filter_type = std::array<const sparse_set<Entity> *, sizeof...(Exclude)>;\n\n    class view_iterator final {\n        friend class basic_view<Entity, exclude_t<Exclude...>, Component...>;\n\n        view_iterator(const sparse_set<Entity> &candidate, unchecked_type other, filter_type ignore, underlying_iterator curr) ENTT_NOEXCEPT\n            : view{&candidate},\n              unchecked{other},\n              filter{ignore},\n              it{curr}\n        {\n            if(it != view->end() && !valid()) {\n                ++(*this);\n            }\n        }\n\n        bool valid() const {\n            return std::all_of(unchecked.cbegin(), unchecked.cend(), [entt = *it](const sparse_set<Entity> *curr) { return curr->contains(entt); })\n                    && std::none_of(filter.cbegin(), filter.cend(), [entt = *it](const sparse_set<Entity> *curr) { return curr->contains(entt); });\n        }\n\n    public:\n        using difference_type = typename underlying_iterator::difference_type;\n        using value_type = typename underlying_iterator::value_type;\n        using pointer = typename underlying_iterator::pointer;\n        using reference = typename underlying_iterator::reference;\n        using iterator_category = std::bidirectional_iterator_tag;\n\n        view_iterator() ENTT_NOEXCEPT = default;\n\n        view_iterator & operator++() {\n            while(++it != view->end() && !valid());\n            return *this;\n        }\n\n        view_iterator operator++(int) {\n            view_iterator orig = *this;\n            return operator++(), orig;\n        }\n\n        view_iterator & operator--() ENTT_NOEXCEPT {\n            while(--it != view->begin() && !valid());\n            return *this;\n        }\n\n        view_iterator operator--(int) ENTT_NOEXCEPT {\n            view_iterator orig = *this;\n            return operator--(), orig;\n        }\n\n        bool operator==(const view_iterator &other) const ENTT_NOEXCEPT {\n            return other.it == it;\n        }\n\n        bool operator!=(const view_iterator &other) const ENTT_NOEXCEPT {\n            return !(*this == other);\n        }\n\n        pointer operator->() const {\n            return it.operator->();\n        }\n\n        reference operator*() const {\n            return *operator->();\n        }\n\n    private:\n        const sparse_set<Entity> *view;\n        unchecked_type unchecked;\n        filter_type filter;\n        underlying_iterator it;\n    };\n\n    // we could use pool_type<Component> &..., but vs complains about it and refuses to compile for unknown reasons (likely a bug)\n    basic_view(storage<Entity, std::remove_const_t<Component>> &... component, storage<Entity, std::remove_const_t<Exclude>> &... epool) ENTT_NOEXCEPT\n        : pools{&component..., &epool...}\n    {}\n\n    const sparse_set<Entity> & candidate() const ENTT_NOEXCEPT {\n        return *std::min({ static_cast<const sparse_set<Entity> *>(std::get<pool_type<Component> *>(pools))... }, [](const auto *lhs, const auto *rhs) {\n            return lhs->size() < rhs->size();\n        });\n    }\n\n    unchecked_type unchecked(const sparse_set<Entity> &view) const {\n        std::size_t pos{};\n        unchecked_type other{};\n        ((std::get<pool_type<Component> *>(pools) == &view ? nullptr : (other[pos++] = std::get<pool_type<Component> *>(pools))), ...);\n        return other;\n    }\n\n    template<typename Comp, typename Other>\n    decltype(auto) get([[maybe_unused]] component_iterator<Comp> it, [[maybe_unused]] pool_type<Other> *cpool, [[maybe_unused]] const Entity entt) const {\n        if constexpr(std::is_same_v<Comp, Other>) {\n            return *it;\n        } else {\n            return cpool->get(entt);\n        }\n    }\n\n    template<typename Comp, typename Func, typename... Type>\n    void traverse(Func func, type_list<Type...>) const {\n        if constexpr(std::disjunction_v<std::is_same<Comp, Type>...>) {\n            auto it = std::get<pool_type<Comp> *>(pools)->begin();\n\n            for(const auto entt: static_cast<const sparse_set<entity_type> &>(*std::get<pool_type<Comp> *>(pools))) {\n                auto curr = it++;\n\n                if(((std::is_same_v<Comp, Component> || std::get<pool_type<Component> *>(pools)->contains(entt)) && ...) && (!std::get<pool_type<Exclude> *>(pools)->contains(entt) && ...)) {\n                    if constexpr(std::is_invocable_v<Func, decltype(get<Type>({}))...>) {\n                        func(get<Comp, Type>(curr, std::get<pool_type<Type> *>(pools), entt)...);\n                    } else {\n                        func(entt, get<Comp, Type>(curr, std::get<pool_type<Type> *>(pools), entt)...);\n                    }\n                }\n            }\n        } else {\n            for(const auto entt: static_cast<const sparse_set<entity_type> &>(*std::get<pool_type<Comp> *>(pools))) {\n                if(((std::is_same_v<Comp, Component> || std::get<pool_type<Component> *>(pools)->contains(entt)) && ...) && (!std::get<pool_type<Exclude> *>(pools)->contains(entt) && ...)) {\n                    if constexpr(std::is_invocable_v<Func, decltype(get<Type>({}))...>) {\n                        func(std::get<pool_type<Type> *>(pools)->get(entt)...);\n                    } else {\n                        func(entt, std::get<pool_type<Type> *>(pools)->get(entt)...);\n                    }\n                }\n            }\n        }\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Input iterator type. */\n    using iterator = view_iterator;\n\n    /**\n     * @brief Returns the number of existing components of the given type.\n     *\n     * This isn't the number of entities iterated by the view.\n     *\n     * @tparam Comp Type of component of which to return the size.\n     * @return Number of existing components of the given type.\n     */\n    template<typename Comp>\n    size_type size() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Comp> *>(pools)->size();\n    }\n\n    /**\n     * @brief Estimates the number of entities iterated by the view.\n     * @return Estimated number of entities iterated by the view.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return std::min({ std::get<pool_type<Component> *>(pools)->size()... });\n    }\n\n    /**\n     * @brief Checks whether a view or some pools are empty.\n     *\n     * The view is definitely empty if one of the pools it uses is empty. In all\n     * other cases, the view may be empty and not return entities even if this\n     * function returns false.\n     *\n     * @tparam Comp Types of components in which one is interested.\n     * @return True if the view or the pools are empty, false otherwise.\n     */\n    template<typename... Comp>\n    bool empty() const ENTT_NOEXCEPT {\n        if constexpr(sizeof...(Comp) == 0) {\n            return (std::get<pool_type<Component> *>(pools)->empty() || ...);\n        } else {\n            return (std::get<pool_type<Comp> *>(pools)->empty() && ...);\n        }\n    }\n\n    /**\n     * @brief Direct access to the list of components of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[raw<Comp>(), raw<Comp>() + size<Comp>()]` is always a valid range, even\n     * if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the components. Use `begin` and\n     * `end` if you want to iterate the view in the expected order.\n     *\n     * @tparam Comp Type of component in which one is interested.\n     * @return A pointer to the array of components.\n     */\n    template<typename Comp>\n    Comp * raw() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Comp> *>(pools)->raw();\n    }\n\n    /**\n     * @brief Direct access to the list of entities of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[data<Comp>(), data<Comp>() + size<Comp>()]` is always a valid range,\n     * even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the view in the expected order.\n     *\n     * @tparam Comp Type of component in which one is interested.\n     * @return A pointer to the array of entities.\n     */\n    template<typename Comp>\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return std::get<pool_type<Comp> *>(pools)->data();\n    }\n\n    /**\n     * @brief Returns an iterator to the first entity that has the given\n     * components.\n     *\n     * The returned iterator points to the first entity that has the given\n     * components. If the view is empty, the returned iterator will be equal to\n     * `end()`.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the first entity that has the given components.\n     */\n    iterator begin() const {\n        const auto &view = candidate();\n        const filter_type ignore{std::get<pool_type<Exclude> *>(pools)...};\n        return iterator{view, unchecked(view), ignore, view.begin()};\n    }\n\n    /**\n     * @brief Returns an iterator that is past the last entity that has the\n     * given components.\n     *\n     * The returned iterator points to the entity following the last entity that\n     * has the given components. Attempting to dereference the returned iterator\n     * results in undefined behavior.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the entity following the last entity that has the\n     * given components.\n     */\n    iterator end() const {\n        const auto &view = candidate();\n        const filter_type ignore{std::get<pool_type<Exclude> *>(pools)...};\n        return iterator{view, unchecked(view), ignore, view.end()};\n    }\n\n    /**\n     * @brief Returns the first entity that has the given components, if any.\n     * @return The first entity that has the given components if one exists, the\n     * null entity otherwise.\n     */\n    entity_type front() const {\n        const auto it = begin();\n        return it != end() ? *it : null;\n    }\n\n    /**\n     * @brief Returns the last entity that has the given components, if any.\n     * @return The last entity that has the given components if one exists, the\n     * null entity otherwise.\n     */\n    entity_type back() const {\n        const auto it = std::make_reverse_iterator(end());\n        return it != std::make_reverse_iterator(begin()) ? *it : null;\n    }\n\n    /**\n     * @brief Finds an entity.\n     * @param entt A valid entity identifier.\n     * @return An iterator to the given entity if it's found, past the end\n     * iterator otherwise.\n     */\n    iterator find(const entity_type entt) const {\n        const auto &view = candidate();\n        const filter_type ignore{std::get<pool_type<Exclude> *>(pools)...};\n        iterator it{view, unchecked(view), ignore, view.find(entt)};\n        return (it != end() && *it == entt) ? it : end();\n    }\n\n    /**\n     * @brief Checks if a view contains an entity.\n     * @param entt A valid entity identifier.\n     * @return True if the view contains the given entity, false otherwise.\n     */\n    bool contains(const entity_type entt) const {\n        return (std::get<pool_type<Component> *>(pools)->contains(entt) && ...)\n                && (!std::get<pool_type<Exclude> *>(pools)->contains(entt) && ...);\n    }\n\n    /**\n     * @brief Returns the components assigned to the given entity.\n     *\n     * Prefer this function instead of `registry::get` during iterations. It has\n     * far better performance than its counterpart.\n     *\n     * @warning\n     * Attempting to use an invalid component type results in a compilation\n     * error. Attempting to use an entity that doesn't belong to the view\n     * results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * view doesn't contain the given entity.\n     *\n     * @tparam Comp Types of components to get.\n     * @param entt A valid entity identifier.\n     * @return The components assigned to the entity.\n     */\n    template<typename... Comp>\n    decltype(auto) get([[maybe_unused]] const entity_type entt) const {\n        ENTT_ASSERT(contains(entt));\n\n        if constexpr(sizeof...(Comp) == 0) {\n            static_assert(sizeof...(Component) == 1);\n            return (std::get<pool_type<Component> *>(pools)->get(entt), ...);\n        } else if constexpr(sizeof...(Comp) == 1) {\n            return (std::get<pool_type<Comp> *>(pools)->get(entt), ...);\n        } else {\n            return std::tuple<decltype(get<Comp>({}))...>{get<Comp>(entt)...};\n        }\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a set of references to non-empty components. The\n     * _constness_ of the components is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Type &...);\n     * void(Type &...);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        const auto &view = candidate();\n        ((std::get<pool_type<Component> *>(pools) == &view ? each<Component>(std::move(func)) : void()), ...);\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The pool of the suggested component is used to lead the iterations. The\n     * returned entities will therefore respect the order of the pool associated\n     * with that type.<br/>\n     * It is no longer guaranteed that the performance is the best possible, but\n     * there will be greater control over the order of iteration.\n     *\n     * @sa each\n     *\n     * @tparam Comp Type of component to use to enforce the iteration order.\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Comp, typename Func>\n    void each(Func func) const {\n        using non_empty_type = type_list_cat_t<std::conditional_t<ENTT_IS_EMPTY(Component), type_list<>, type_list<Component>>...>;\n        traverse<Comp>(std::move(func), non_empty_type{});\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a set of references to non-empty components. The\n     * _constness_ of the components is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Type &...);\n     * void(Type &...);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    [[deprecated(\"use ::each instead\")]]\n    void less(Func func) const {\n        each(std::move(func));\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The pool of the suggested component is used to lead the iterations. The\n     * returned entities will therefore respect the order of the pool associated\n     * with that type.<br/>\n     * It is no longer guaranteed that the performance is the best possible, but\n     * there will be greater control over the order of iteration.\n     *\n     * @sa less\n     *\n     * @tparam Comp Type of component to use to enforce the iteration order.\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Comp, typename Func>\n    [[deprecated(\"use ::each instead\")]]\n    void less(Func func) const {\n        each<Comp>(std::move(func));\n    }\n\nprivate:\n    const std::tuple<pool_type<Component> *..., pool_type<Exclude> *...> pools;\n};\n\n\n/**\n * @brief Single component view specialization.\n *\n * Single component views are specialized in order to get a boost in terms of\n * performance. This kind of views can access the underlying data structure\n * directly and avoid superfluous checks.\n *\n * @b Important\n *\n * Iterators aren't invalidated if:\n *\n * * New instances of the given component are created and assigned to entities.\n * * The entity currently pointed is modified (as an example, the given\n *   component is removed from the entity to which the iterator points).\n * * The entity currently pointed is destroyed.\n *\n * In all other cases, modifying the pool iterated by the view in any way\n * invalidates all the iterators and using them results in undefined behavior.\n *\n * @note\n * Views share a reference to the underlying data structure of the registry that\n * generated them. Therefore any change to the entities and to the components\n * made by means of the registry are immediately reflected by views.\n *\n * @warning\n * Lifetime of a view must not overcome that of the registry that generated it.\n * In any other case, attempting to use a view results in undefined behavior.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n * @tparam Component Type of component iterated by the view.\n */\ntemplate<typename Entity, typename Component>\nclass basic_view<Entity, exclude_t<>, Component> {\n    /*! @brief A registry is allowed to create views. */\n    friend class basic_registry<Entity>;\n\n    using pool_type = std::conditional_t<std::is_const_v<Component>, const storage<Entity, std::remove_const_t<Component>>, storage<Entity, Component>>;\n\n    basic_view(pool_type &ref) ENTT_NOEXCEPT\n        : pool{&ref}\n    {}\n\npublic:\n    /*! @brief Type of component iterated by the view. */\n    using raw_type = Component;\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Input iterator type. */\n    using iterator = typename sparse_set<Entity>::iterator;\n\n    /**\n     * @brief Returns the number of entities that have the given component.\n     * @return Number of entities that have the given component.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return pool->size();\n    }\n\n    /**\n     * @brief Checks whether a view is empty.\n     * @return True if the view is empty, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return pool->empty();\n    }\n\n    /**\n     * @brief Direct access to the list of components.\n     *\n     * The returned pointer is such that range `[raw(), raw() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the components. Use `begin` and\n     * `end` if you want to iterate the view in the expected order.\n     *\n     * @return A pointer to the array of components.\n     */\n    raw_type * raw() const ENTT_NOEXCEPT {\n        return pool->raw();\n    }\n\n    /**\n     * @brief Direct access to the list of entities.\n     *\n     * The returned pointer is such that range `[data(), data() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the view in the expected order.\n     *\n     * @return A pointer to the array of entities.\n     */\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return pool->data();\n    }\n\n    /**\n     * @brief Returns an iterator to the first entity that has the given\n     * component.\n     *\n     * The returned iterator points to the first entity that has the given\n     * component. If the view is empty, the returned iterator will be equal to\n     * `end()`.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the first entity that has the given component.\n     */\n    iterator begin() const ENTT_NOEXCEPT {\n        return pool->sparse_set<Entity>::begin();\n    }\n\n    /**\n     * @brief Returns an iterator that is past the last entity that has the\n     * given component.\n     *\n     * The returned iterator points to the entity following the last entity that\n     * has the given component. Attempting to dereference the returned iterator\n     * results in undefined behavior.\n     *\n     * @note\n     * Input iterators stay true to the order imposed to the underlying data\n     * structures.\n     *\n     * @return An iterator to the entity following the last entity that has the\n     * given component.\n     */\n    iterator end() const ENTT_NOEXCEPT {\n        return pool->sparse_set<Entity>::end();\n    }\n\n    /**\n     * @brief Returns the first entity that has the given component, if any.\n     * @return The first entity that has the given component if one exists, the\n     * null entity otherwise.\n     */\n    entity_type front() const {\n        const auto it = begin();\n        return it != end() ? *it : null;\n    }\n\n    /**\n     * @brief Returns the last entity that has the given component, if any.\n     * @return The last entity that has the given component if one exists, the\n     * null entity otherwise.\n     */\n    entity_type back() const {\n        const auto it = std::make_reverse_iterator(end());\n        return it != std::make_reverse_iterator(begin()) ? *it : null;\n    }\n\n    /**\n     * @brief Finds an entity.\n     * @param entt A valid entity identifier.\n     * @return An iterator to the given entity if it's found, past the end\n     * iterator otherwise.\n     */\n    iterator find(const entity_type entt) const {\n        const auto it = pool->find(entt);\n        return it != end() && *it == entt ? it : end();\n    }\n\n    /**\n     * @brief Returns the identifier that occupies the given position.\n     * @param pos Position of the element to return.\n     * @return The identifier that occupies the given position.\n     */\n    entity_type operator[](const size_type pos) const {\n        return begin()[pos];\n    }\n\n    /**\n     * @brief Checks if a view contains an entity.\n     * @param entt A valid entity identifier.\n     * @return True if the view contains the given entity, false otherwise.\n     */\n    bool contains(const entity_type entt) const {\n        return pool->contains(entt);\n    }\n\n    /**\n     * @brief Returns the component assigned to the given entity.\n     *\n     * Prefer this function instead of `registry::get` during iterations. It has\n     * far better performance than its counterpart.\n     *\n     * @warning\n     * Attempting to use an entity that doesn't belong to the view results in\n     * undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * view doesn't contain the given entity.\n     *\n     * @param entt A valid entity identifier.\n     * @return The component assigned to the entity.\n     */\n    template<typename Comp = Component>\n    decltype(auto) get(const entity_type entt) const {\n        static_assert(std::is_same_v<Comp, Component>);\n        ENTT_ASSERT(contains(entt));\n        return pool->get(entt);\n    }\n\n    /**\n     * @brief Iterates entities and components and applies the given function\n     * object to them.\n     *\n     * The function object is invoked for each entity. It is provided with the\n     * entity itself and a reference to the component if it's a non-empty one.\n     * The _constness_ of the component is as requested.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const entity_type, Component &);\n     * void(Component &);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned during iterations.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        if constexpr(ENTT_IS_EMPTY(Component)) {\n            if constexpr(std::is_invocable_v<Func>) {\n                for(auto pos = pool->size(); pos; --pos) {\n                    func();\n                }\n            } else {\n                for(const auto entt: *this) {\n                    func(entt);\n                }\n            }\n        } else {\n            if constexpr(std::is_invocable_v<Func, decltype(get({}))>) {\n                for(auto &&component: *pool) {\n                    func(component);\n                }\n            } else {\n                auto raw = pool->begin();\n\n                for(const auto entt: *this) {\n                    func(entt, *(raw++));\n                }\n            }\n        }\n    }\n\n    /*! @copydoc each */\n    template<typename Func>\n    [[deprecated(\"use ::each instead\")]]\n    void less(Func func) const {\n        each(std::move(func));\n    }\n\nprivate:\n    pool_type *pool;\n};\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Fast and reliable entity-component system.\n *\n * The registry is the core class of the entity-component framework.<br/>\n * It stores entities and arranges pools of components on a per request basis.\n * By means of a registry, users can manage entities and components, then create\n * views or groups to iterate them.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass basic_registry {\n    using traits_type = entt_traits<std::underlying_type_t<Entity>>;\n\n    template<typename Component>\n    struct pool_handler final: storage<Entity, Component> {\n        static_assert(std::is_same_v<Component, std::decay_t<Component>>);\n        std::size_t super{};\n\n        auto on_construct() ENTT_NOEXCEPT {\n            return sink{construction};\n        }\n\n        auto on_update() ENTT_NOEXCEPT {\n            return sink{update};\n        }\n\n        auto on_destroy() ENTT_NOEXCEPT {\n            return sink{destruction};\n        }\n\n        template<typename... Args>\n        decltype(auto) emplace(basic_registry &owner, const Entity entt, Args &&... args) {\n            storage<entity_type, Component>::emplace(entt, std::forward<Args>(args)...);\n            construction.publish(owner, entt);\n\n            if constexpr(!ENTT_IS_EMPTY(Component)) {\n                return this->get(entt);\n            }\n        }\n\n        template<typename It, typename... Args>\n        void insert(basic_registry &owner, It first, It last, Args &&... args) {\n            storage<entity_type, Component>::insert(first, last, std::forward<Args>(args)...);\n\n            if(!construction.empty()) {\n                while(first != last) { construction.publish(owner, *(first++)); }\n            }\n        }\n\n        void remove(basic_registry &owner, const Entity entt) {\n            destruction.publish(owner, entt);\n            this->erase(entt);\n        }\n\n        template<typename It>\n        void remove(basic_registry &owner, It first, It last) {\n            if(std::distance(first, last) == std::distance(this->begin(), this->end())) {\n                if(!destruction.empty()) {\n                    while(first != last) { destruction.publish(owner, *(first++)); }\n                }\n\n                this->clear();\n            } else {\n                while(first != last) { this->remove(owner, *(first++)); }\n            }\n        }\n\n        template<typename... Func>\n        decltype(auto) patch(basic_registry &owner, const Entity entt, Func &&... func) {\n            (std::forward<Func>(func)(this->get(entt)), ...);\n            update.publish(owner, entt);\n\n            if constexpr(!ENTT_IS_EMPTY(Component)) {\n                return this->get(entt);\n            }\n        }\n\n        decltype(auto) replace(basic_registry &owner, const Entity entt, [[maybe_unused]] Component component) {\n            if constexpr(ENTT_IS_EMPTY(Component)) {\n                return patch(owner, entt);\n            } else {\n                return patch(owner, entt, [&component](auto &&curr) { curr = std::move(component); });\n            }\n        }\n\n    private:\n        sigh<void(basic_registry &, const Entity)> construction{};\n        sigh<void(basic_registry &, const Entity)> destruction{};\n        sigh<void(basic_registry &, const Entity)> update{};\n    };\n\n    struct pool_data {\n        id_type type_id{};\n        std::unique_ptr<sparse_set<Entity>> pool{};\n        void(* remove)(sparse_set<Entity> &, basic_registry &, const Entity){};\n    };\n\n    template<typename...>\n    struct group_handler;\n\n    template<typename... Exclude, typename... Get, typename... Owned>\n    struct group_handler<exclude_t<Exclude...>, get_t<Get...>, Owned...> {\n        static_assert(std::conjunction_v<std::is_same<Owned, std::decay_t<Owned>>..., std::is_same<Get, std::decay_t<Get>>..., std::is_same<Exclude, std::decay_t<Exclude>>...>);\n        std::conditional_t<sizeof...(Owned) == 0, sparse_set<Entity>, std::size_t> current{};\n\n        template<typename Component>\n        void maybe_valid_if(basic_registry &owner, const Entity entt) {\n            static_assert(std::disjunction_v<std::is_same<Owned, std::decay_t<Owned>>..., std::is_same<Get, std::decay_t<Get>>..., std::is_same<Exclude, std::decay_t<Exclude>>...>);\n            [[maybe_unused]] const auto cpools = std::forward_as_tuple(owner.assure<Owned>()...);\n\n            const auto is_valid = ((std::is_same_v<Component, Owned> || std::get<pool_handler<Owned> &>(cpools).contains(entt)) && ...)\n                    && ((std::is_same_v<Component, Get> || owner.assure<Get>().contains(entt)) && ...)\n                    && ((std::is_same_v<Component, Exclude> || !owner.assure<Exclude>().contains(entt)) && ...);\n\n            if constexpr(sizeof...(Owned) == 0) {\n                if(is_valid && !current.contains(entt)) {\n                    current.emplace(entt);\n                }\n            } else {\n                if(is_valid && !(std::get<0>(cpools).index(entt) < current)) {\n                    const auto pos = current++;\n                    (std::get<pool_handler<Owned> &>(cpools).swap(std::get<pool_handler<Owned> &>(cpools).data()[pos], entt), ...);\n                }\n            }\n        }\n\n        void discard_if([[maybe_unused]] basic_registry &owner, const Entity entt) {\n            if constexpr(sizeof...(Owned) == 0) {\n                if(current.contains(entt)) {\n                    current.erase(entt);\n                }\n            } else {\n                if(const auto cpools = std::forward_as_tuple(owner.assure<Owned>()...); std::get<0>(cpools).contains(entt) && (std::get<0>(cpools).index(entt) < current)) {\n                    const auto pos = --current;\n                    (std::get<pool_handler<Owned> &>(cpools).swap(std::get<pool_handler<Owned> &>(cpools).data()[pos], entt), ...);\n                }\n            }\n        }\n    };\n\n    struct group_data {\n        std::size_t size;\n        std::unique_ptr<void, void(*)(void *)> group;\n        bool (* owned)(const id_type) ENTT_NOEXCEPT;\n        bool (* get)(const id_type) ENTT_NOEXCEPT;\n        bool (* exclude)(const id_type) ENTT_NOEXCEPT;\n    };\n\n    struct variable_data {\n        id_type type_id;\n        std::unique_ptr<void, void(*)(void *)> value;\n    };\n\n    template<typename Component>\n    const pool_handler<Component> & assure() const {\n        static_assert(std::is_same_v<Component, std::decay_t<Component>>);\n\n        if constexpr(has_type_index_v<Component>) {\n            const auto index = type_index<Component>::value();\n\n            if(!(index < pools.size())) {\n                pools.resize(index+1);\n            }\n\n            if(auto &&pdata = pools[index]; !pdata.pool) {\n                pdata.type_id = type_info<Component>::id();\n                pdata.pool.reset(new pool_handler<Component>());\n                pdata.remove = [](sparse_set<entity_type> &cpool, basic_registry &owner, const entity_type entt) {\n                    static_cast<pool_handler<Component> &>(cpool).remove(owner, entt);\n                };\n            }\n\n            return static_cast<pool_handler<Component> &>(*pools[index].pool);\n        } else {\n            sparse_set<entity_type> *candidate{nullptr};\n\n            if(auto it = std::find_if(pools.begin(), pools.end(), [id = type_info<Component>::id()](const auto &pdata) { return id == pdata.type_id; }); it == pools.cend()) {\n                candidate = pools.emplace_back(pool_data{\n                    type_info<Component>::id(),\n                    std::unique_ptr<sparse_set<entity_type>>{new pool_handler<Component>()},\n                    [](sparse_set<entity_type> &cpool, basic_registry &owner, const entity_type entt) {\n                        static_cast<pool_handler<Component> &>(cpool).remove(owner, entt);\n                    }\n                }).pool.get();\n            } else {\n                candidate = it->pool.get();\n            }\n\n            return static_cast<pool_handler<Component> &>(*candidate);\n        }\n    }\n\n    template<typename Component>\n    pool_handler<Component> & assure() {\n        return const_cast<pool_handler<Component> &>(std::as_const(*this).template assure<Component>());\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Underlying version type. */\n    using version_type = typename traits_type::version_type;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n\n    /*! @brief Default constructor. */\n    basic_registry() = default;\n\n    /*! @brief Default move constructor. */\n    basic_registry(basic_registry &&) = default;\n\n    /*! @brief Default move assignment operator. @return This registry. */\n    basic_registry & operator=(basic_registry &&) = default;\n\n    /**\n     * @brief Prepares a pool for the given type if required.\n     * @tparam Component Type of component for which to prepare a pool.\n     */\n    template<typename Component>\n    void prepare() {\n        assure<Component>();\n    }\n\n    /**\n     * @brief Returns the number of existing components of the given type.\n     * @tparam Component Type of component of which to return the size.\n     * @return Number of existing components of the given type.\n     */\n    template<typename Component>\n    size_type size() const {\n        return assure<Component>().size();\n    }\n\n    /**\n     * @brief Returns the number of entities created so far.\n     * @return Number of entities created so far.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return entities.size();\n    }\n\n    /**\n     * @brief Returns the number of entities still in use.\n     * @return Number of entities still in use.\n     */\n    size_type alive() const {\n        auto sz = entities.size();\n        auto curr = destroyed;\n\n        for(; curr != null; --sz) {\n            curr = entities[to_integral(curr) & traits_type::entity_mask];\n        }\n\n        return sz;\n    }\n\n    /**\n     * @brief Increases the capacity of the registry or of the pools for the\n     * given components.\n     *\n     * If no components are specified, the capacity of the registry is\n     * increased, that is the number of entities it contains. Otherwise the\n     * capacity of the pools for the given components is increased.<br/>\n     * In both cases, if the new capacity is greater than the current capacity,\n     * new storage is allocated, otherwise the method does nothing.\n     *\n     * @tparam Component Types of components for which to reserve storage.\n     * @param cap Desired capacity.\n     */\n    template<typename... Component>\n    void reserve(const size_type cap) {\n        if constexpr(sizeof...(Component) == 0) {\n            entities.reserve(cap);\n        } else {\n            (assure<Component>().reserve(cap), ...);\n        }\n    }\n\n    /**\n     * @brief Returns the capacity of the pool for the given component.\n     * @tparam Component Type of component in which one is interested.\n     * @return Capacity of the pool of the given component.\n     */\n    template<typename Component>\n    size_type capacity() const {\n        return assure<Component>().capacity();\n    }\n\n    /**\n     * @brief Returns the number of entities that a registry has currently\n     * allocated space for.\n     * @return Capacity of the registry.\n     */\n    size_type capacity() const ENTT_NOEXCEPT {\n        return entities.capacity();\n    }\n\n    /**\n     * @brief Requests the removal of unused capacity for the given components.\n     * @tparam Component Types of components for which to reclaim unused\n     * capacity.\n     */\n    template<typename... Component>\n    void shrink_to_fit() {\n        (assure<Component>().shrink_to_fit(), ...);\n    }\n\n    /**\n     * @brief Checks whether the registry or the pools of the given components\n     * are empty.\n     *\n     * A registry is considered empty when it doesn't contain entities that are\n     * still in use.\n     *\n     * @tparam Component Types of components in which one is interested.\n     * @return True if the registry or the pools of the given components are\n     * empty, false otherwise.\n     */\n    template<typename... Component>\n    bool empty() const {\n        if constexpr(sizeof...(Component) == 0) {\n            return !alive();\n        } else {\n            return (assure<Component>().empty() && ...);\n        }\n    }\n\n    /**\n     * @brief Direct access to the list of components of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[raw<Component>(), raw<Component>() + size<Component>()]` is always a\n     * valid range, even if the container is empty.\n     *\n     * There are no guarantees on the order of the components. Use a view if you\n     * want to iterate entities and components in the expected order.\n     *\n     * @note\n     * Empty components aren't explicitly instantiated. Therefore, this function\n     * isn't available for them. A compilation error will occur if invoked.\n     *\n     * @tparam Component Type of component in which one is interested.\n     * @return A pointer to the array of components of the given type.\n     */\n    template<typename Component>\n    const Component * raw() const {\n        return assure<Component>().raw();\n    }\n\n    /*! @copydoc raw */\n    template<typename Component>\n    Component * raw() {\n        return const_cast<Component *>(std::as_const(*this).template raw<Component>());\n    }\n\n    /**\n     * @brief Direct access to the list of entities of a given pool.\n     *\n     * The returned pointer is such that range\n     * `[data<Component>(), data<Component>() + size<Component>()]` is always a\n     * valid range, even if the container is empty.\n     *\n     * There are no guarantees on the order of the entities. Use a view if you\n     * want to iterate entities and components in the expected order.\n     *\n     * @tparam Component Type of component in which one is interested.\n     * @return A pointer to the array of entities.\n     */\n    template<typename Component>\n    const entity_type * data() const {\n        return assure<Component>().data();\n    }\n\n    /**\n     * @brief Direct access to the list of entities of a registry.\n     *\n     * The returned pointer is such that range `[data(), data() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @warning\n     * This list contains both valid and destroyed entities and isn't suitable\n     * for direct use.\n     *\n     * @return A pointer to the array of entities.\n     */\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return entities.data();\n    }\n\n    /**\n     * @brief Checks if an entity identifier refers to a valid entity.\n     * @param entity An entity identifier, either valid or not.\n     * @return True if the identifier is valid, false otherwise.\n     */\n    bool valid(const entity_type entity) const {\n        const auto pos = size_type(to_integral(entity) & traits_type::entity_mask);\n        return (pos < entities.size() && entities[pos] == entity);\n    }\n\n    /**\n     * @brief Returns the entity identifier without the version.\n     * @param entity An entity identifier, either valid or not.\n     * @return The entity identifier without the version.\n     */\n    static entity_type entity(const entity_type entity) ENTT_NOEXCEPT {\n        return entity_type{to_integral(entity) & traits_type::entity_mask};\n    }\n\n    /**\n     * @brief Returns the version stored along with an entity identifier.\n     * @param entity An entity identifier, either valid or not.\n     * @return The version stored along with the given entity identifier.\n     */\n    static version_type version(const entity_type entity) ENTT_NOEXCEPT {\n        return version_type(to_integral(entity) >> traits_type::entity_shift);\n    }\n\n    /**\n     * @brief Returns the actual version for an entity identifier.\n     *\n     * @warning\n     * Attempting to use an entity that doesn't belong to the registry results\n     * in undefined behavior. An entity belongs to the registry even if it has\n     * been previously destroyed and/or recycled.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * registry doesn't own the given entity.\n     *\n     * @param entity A valid entity identifier.\n     * @return Actual version for the given entity identifier.\n     */\n    version_type current(const entity_type entity) const {\n        const auto pos = size_type(to_integral(entity) & traits_type::entity_mask);\n        ENTT_ASSERT(pos < entities.size());\n        return version_type(to_integral(entities[pos]) >> traits_type::entity_shift);\n    }\n\n    /**\n     * @brief Creates a new entity and returns it.\n     *\n     * There are two kinds of possible entity identifiers:\n     *\n     * * Newly created ones in case no entities have been previously destroyed.\n     * * Recycled ones with updated versions.\n     *\n     * @return A valid entity identifier.\n     */\n    entity_type create() {\n        entity_type entt;\n\n        if(destroyed == null) {\n            entt = entities.emplace_back(entity_type(entities.size()));\n            // traits_type::entity_mask is reserved to allow for null identifiers\n            ENTT_ASSERT(to_integral(entt) < traits_type::entity_mask);\n        } else {\n            const auto curr = to_integral(destroyed);\n            const auto version = to_integral(entities[curr]) & (traits_type::version_mask << traits_type::entity_shift);\n            destroyed = entity_type{to_integral(entities[curr]) & traits_type::entity_mask};\n            entt = entities[curr] = entity_type{curr | version};\n        }\n\n        return entt;\n    }\n\n    /**\n     * @brief Creates a new entity and returns it.\n     *\n     * @sa create\n     *\n     * If the requested entity isn't in use, the suggested identifier is created\n     * and returned. Otherwise, a new one will be generated for this purpose.\n     *\n     * @param hint A desired entity identifier.\n     * @return A valid entity identifier.\n     */\n    entity_type create(const entity_type hint) {\n        ENTT_ASSERT(hint != null);\n        entity_type entt;\n\n        if(const auto req = (to_integral(hint) & traits_type::entity_mask); !(req < entities.size())) {\n            entities.reserve(req + 1);\n\n            for(auto pos = entities.size(); pos < req; ++pos) {\n                entities.emplace_back(destroyed);\n                destroyed = entity_type(pos);\n            }\n\n            entt = entities.emplace_back(hint);\n        } else if(const auto curr = (to_integral(entities[req]) & traits_type::entity_mask); req == curr) {\n            entt = create();\n        } else {\n            auto *it = &destroyed;\n            for(; (to_integral(*it) & traits_type::entity_mask) != req; it = &entities[to_integral(*it) & traits_type::entity_mask]);\n            *it = entity_type{curr | (to_integral(*it) & (traits_type::version_mask << traits_type::entity_shift))};\n            entt = entities[req] = hint;\n        }\n\n        return entt;\n    }\n\n    /**\n     * @brief Assigns each element in a range an entity.\n     *\n     * @sa create\n     *\n     * @tparam It Type of forward iterator.\n     * @param first An iterator to the first element of the range to generate.\n     * @param last An iterator past the last element of the range to generate.\n     */\n    template<typename It>\n    void create(It first, It last) {\n        std::generate(first, last, [this]() { return create(); });\n    }\n\n    /**\n     * @brief Assigns entities to an empty registry.\n     *\n     * This function is intended for use in conjunction with `raw`.<br/>\n     * Don't try to inject ranges of randomly generated entities. There is no\n     * guarantee that a registry will continue to work properly in this case.\n     *\n     * @warning\n     * An assertion will abort the execution at runtime in debug mode if all\n     * pools aren't empty.\n     *\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     */\n    template<typename It>\n    void assign(It first, It last) {\n        ENTT_ASSERT(std::all_of(pools.cbegin(), pools.cend(), [](auto &&pdata) { return !pdata.pool || pdata.pool->empty(); }));\n        entities.assign(first, last);\n        destroyed = null;\n\n        for(std::size_t pos{}, end = entities.size(); pos < end; ++pos) {\n            if((to_integral(entities[pos]) & traits_type::entity_mask) != pos) {\n                const auto version = to_integral(entities[pos]) & (traits_type::version_mask << traits_type::entity_shift);\n                entities[pos] = entity_type{to_integral(destroyed) | version};\n                destroyed = entity_type(pos);\n            }\n        }\n    }\n\n    /**\n     * @brief Destroys an entity.\n     *\n     * When an entity is destroyed, its version is updated and the identifier\n     * can be recycled at any time.\n     *\n     * @sa remove_all\n     *\n     * @param entity A valid entity identifier.\n     */\n    void destroy(const entity_type entity) {\n        destroy(entity, (to_integral(entity) >> traits_type::entity_shift) + 1);\n    }\n\n    /**\n     * @brief Destroys an entity.\n     *\n     * If the entity isn't already destroyed, the suggested version is used\n     * instead of the implicitly generated one.\n     *\n     * @sa remove_all\n     *\n     * @param entity A valid entity identifier.\n     * @param version A desired version upon destruction.\n     */\n    void destroy(const entity_type entity, const version_type version) {\n        remove_all(entity);\n        // lengthens the implicit list of destroyed entities\n        const auto entt = to_integral(entity) & traits_type::entity_mask;\n        entities[entt] = entity_type{to_integral(destroyed) | (version << traits_type::entity_shift)};\n        destroyed = entity_type{entt};\n    }\n\n    /**\n     * @brief Destroys all the entities in a range.\n     *\n     * @sa destroy\n     *\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     */\n    template<typename It>\n    void destroy(It first, It last) {\n        while(first != last) { destroy(*(first++)); }\n    }\n\n    /**\n     * @brief Assigns the given component to an entity.\n     *\n     * A new instance of the given component is created and initialized with the\n     * arguments provided (the component must have a proper constructor or be of\n     * aggregate type). Then the component is assigned to the given entity.\n     *\n     * @warning\n     * Attempting to use an invalid entity or to assign a component to an entity\n     * that already owns it results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity or if the entity already owns an instance of the given\n     * component.\n     *\n     * @tparam Component Type of component to create.\n     * @tparam Args Types of arguments to use to construct the component.\n     * @param entity A valid entity identifier.\n     * @param args Parameters to use to initialize the component.\n     * @return A reference to the newly created component.\n     */\n    template<typename Component, typename... Args>\n    decltype(auto) emplace(const entity_type entity, Args &&... args) {\n        ENTT_ASSERT(valid(entity));\n        return assure<Component>().emplace(*this, entity, std::forward<Args>(args)...);\n    }\n\n    /*! @copydoc emplace */\n    template<typename Component, typename... Args>\n    [[deprecated(\"use ::emplace instead\")]]\n    decltype(auto) assign(const entity_type entity, Args &&... args) {\n        return emplace<Component>(entity, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Assigns each entity in a range the given component.\n     *\n     * @sa emplace\n     *\n     * @tparam Component Type of component to create.\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     * @param value An instance of the component to assign.\n     */\n    template<typename Component, typename It>\n    void insert(It first, It last, const Component &value = {}) {\n        ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }));\n        assure<Component>().insert(*this, first, last, value);\n    }\n\n    /*! @copydoc insert */\n    template<typename Component, typename It>\n    [[deprecated(\"use ::insert instead\")]]\n    std::enable_if_t<std::is_same_v<typename std::iterator_traits<It>::value_type, entity_type>, void>\n    assign(It first, It last, const Component &value = {}) {\n        return insert(std::move(first), std::move(last), value);\n    }\n\n    /**\n     * @brief Assigns each entity in a range the given components.\n     *\n     * @sa emplace\n     *\n     * @tparam Component Type of component to create.\n     * @tparam EIt Type of input iterator.\n     * @tparam CIt Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     * @param from An iterator to the first element of the range of components.\n     * @param to An iterator past the last element of the range of components.\n     */\n    template<typename Component, typename EIt, typename CIt>\n    void insert(EIt first, EIt last, CIt from, CIt to) {\n        static_assert(std::is_constructible_v<Component, typename std::iterator_traits<CIt>::value_type>);\n        ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }));\n        assure<Component>().insert(*this, first, last, from, to);\n    }\n\n    /*! @copydoc insert */\n    template<typename Component, typename EIt, typename CIt>\n    [[deprecated(\"use ::insert instead\")]]\n    std::enable_if_t<std::is_same_v<typename std::iterator_traits<EIt>::value_type, entity_type>, void>\n    assign(EIt first, EIt last, CIt value) {\n        return insert<Component>(std::move(first), std::move(last), value, value + std::distance(first, last));\n    }\n\n    /**\n     * @brief Assigns or replaces the given component for an entity.\n     *\n     * Equivalent to the following snippet (pseudocode):\n     *\n     * @code{.cpp}\n     * auto &component = registry.has<Component>(entity) ? registry.replace<Component>(entity, args...) : registry.emplace<Component>(entity, args...);\n     * @endcode\n     *\n     * Prefer this function anyway because it has slightly better performance.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @tparam Component Type of component to assign or replace.\n     * @tparam Args Types of arguments to use to construct the component.\n     * @param entity A valid entity identifier.\n     * @param args Parameters to use to initialize the component.\n     * @return A reference to the newly created component.\n     */\n    template<typename Component, typename... Args>\n    decltype(auto) emplace_or_replace(const entity_type entity, Args &&... args) {\n        ENTT_ASSERT(valid(entity));\n        auto &cpool = assure<Component>();\n\n        return cpool.contains(entity)\n                ? cpool.replace(*this, entity, Component{std::forward<Args>(args)...})\n                : cpool.emplace(*this, entity, std::forward<Args>(args)...);\n    }\n\n    /*! @copydoc emplace_or_replace */\n    template<typename Component, typename... Args>\n    [[deprecated(\"use ::emplace_or_replace instead\")]]\n    decltype(auto) assign_or_replace(const entity_type entity, Args &&... args) {\n        return emplace_or_replace<Component>(entity, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Patches the given component for an entity.\n     *\n     * The signature of the functions should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(Component &);\n     * @endcode\n     *\n     * @note\n     * Empty types aren't explicitly instantiated and therefore they are never\n     * returned. However, this function can be used to trigger an update signal\n     * for them.\n     *\n     * @warning\n     * Attempting to use an invalid entity or to patch a component of an entity\n     * that doesn't own it results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity or if the entity doesn't own an instance of the given\n     * component.\n     *\n     * @tparam Component Type of component to patch.\n     * @tparam Func Types of the function objects to invoke.\n     * @param entity A valid entity identifier.\n     * @param func Valid function objects.\n     * @return A reference to the patched component.\n     */\n    template<typename Component, typename... Func>\n    decltype(auto) patch(const entity_type entity, Func &&... func) {\n        ENTT_ASSERT(valid(entity));\n        return assure<Component>().patch(*this, entity, std::forward<Func>(func)...);\n    }\n\n    /*! @copydoc patch */\n    template<typename Component, typename... Func>\n    [[deprecated(\"use registry::patch instead\")]]\n    auto replace(const entity_type entity, Func &&... func)\n    -> decltype((func(std::declval<Component &>()), ...), assign<Component>(entity)) {\n        return patch<Component>(entity, std::forward<Func>(func)...);\n    }\n\n    /**\n     * @brief Replaces the given component for an entity.\n     *\n     * A new instance of the given component is created and initialized with the\n     * arguments provided (the component must have a proper constructor or be of\n     * aggregate type). Then the component is assigned to the given entity.\n     *\n     * @warning\n     * Attempting to use an invalid entity or to replace a component of an\n     * entity that doesn't own it results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity or if the entity doesn't own an instance of the given\n     * component.\n     *\n     * @tparam Component Type of component to replace.\n     * @tparam Args Types of arguments to use to construct the component.\n     * @param entity A valid entity identifier.\n     * @param args Parameters to use to initialize the component.\n     * @return A reference to the component being replaced.\n     */\n    template<typename Component, typename... Args>\n    auto replace(const entity_type entity, Args &&... args)\n    -> decltype(std::enable_if_t<sizeof...(Args) != 0>(), Component{std::forward<Args>(args)...}, assure<Component>().get(entity)) {\n        return assure<Component>().replace(*this, entity, Component{std::forward<Args>(args)...});\n    }\n\n    /**\n     * @brief Removes the given components from an entity.\n     *\n     * @warning\n     * Attempting to use an invalid entity or to remove a component from an\n     * entity that doesn't own it results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity or if the entity doesn't own an instance of the given\n     * component.\n     *\n     * @tparam Component Types of components to remove.\n     * @param entity A valid entity identifier.\n     */\n    template<typename... Component>\n    void remove(const entity_type entity) {\n        ENTT_ASSERT(valid(entity));\n        (assure<Component>().remove(*this, entity), ...);\n    }\n\n    /**\n     * @brief Removes the given components from all the entities in a range.\n     *\n     * @see remove\n     *\n     * @tparam Component Types of components to remove.\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of entities.\n     * @param last An iterator past the last element of the range of entities.\n     */\n    template<typename... Component, typename It>\n    void remove(It first, It last) {\n        ENTT_ASSERT(std::all_of(first, last, [this](const auto entity) { return valid(entity); }));\n        (assure<Component>().remove(*this, first, last), ...);\n    }\n\n    /**\n     * @brief Removes the given components from an entity.\n     *\n     * Equivalent to the following snippet (pseudocode):\n     *\n     * @code{.cpp}\n     * if(registry.has<Component>(entity)) { registry.remove<Component>(entity) }\n     * @endcode\n     *\n     * Prefer this function anyway because it has slightly better performance.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @tparam Component Types of components to remove.\n     * @param entity A valid entity identifier.\n     */\n    template<typename... Component>\n    void remove_if_exists(const entity_type entity) {\n        ENTT_ASSERT(valid(entity));\n\n        ([this, entity](auto &&cpool) {\n            if(cpool.contains(entity)) {\n                cpool.remove(*this, entity);\n            }\n        }(assure<Component>()), ...);\n    }\n\n    /**\n     * @brief Removes all the components from an entity and makes it orphaned.\n     *\n     * @warning\n     * In case there are listeners that observe the destruction of components\n     * and assign other components to the entity in their bodies, the result of\n     * invoking this function may not be as expected. In the worst case, it\n     * could lead to undefined behavior. An assertion will abort the execution\n     * at runtime in debug mode if a violation is detected.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @param entity A valid entity identifier.\n     */\n    void remove_all(const entity_type entity) {\n        ENTT_ASSERT(valid(entity));\n\n        for(auto pos = pools.size(); pos; --pos) {\n            if(auto &pdata = pools[pos-1]; pdata.pool && pdata.pool->contains(entity)) {\n                pdata.remove(*pdata.pool, *this, entity);\n            }\n        }\n    }\n\n    /**\n     * @brief Checks if an entity has all the given components.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @tparam Component Components for which to perform the check.\n     * @param entity A valid entity identifier.\n     * @return True if the entity has all the components, false otherwise.\n     */\n    template<typename... Component>\n    bool has(const entity_type entity) const {\n        ENTT_ASSERT(valid(entity));\n        return (assure<Component>().contains(entity) && ...);\n    }\n\n    /**\n     * @brief Checks if an entity has at least one of the given components.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @tparam Component Components for which to perform the check.\n     * @param entity A valid entity identifier.\n     * @return True if the entity has at least one of the given components,\n     * false otherwise.\n     */\n    template<typename... Component>\n    bool any(const entity_type entity) const {\n        ENTT_ASSERT(valid(entity));\n        return (assure<Component>().contains(entity) || ...);\n    }\n\n    /**\n     * @brief Returns references to the given components for an entity.\n     *\n     * @warning\n     * Attempting to use an invalid entity or to get a component from an entity\n     * that doesn't own it results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity or if the entity doesn't own an instance of the given\n     * component.\n     *\n     * @tparam Component Types of components to get.\n     * @param entity A valid entity identifier.\n     * @return References to the components owned by the entity.\n     */\n    template<typename... Component>\n    decltype(auto) get([[maybe_unused]] const entity_type entity) const {\n        ENTT_ASSERT(valid(entity));\n\n        if constexpr(sizeof...(Component) == 1) {\n            return (assure<Component>().get(entity), ...);\n        } else {\n            return std::forward_as_tuple(get<Component>(entity)...);\n        }\n    }\n\n    /*! @copydoc get */\n    template<typename... Component>\n    decltype(auto) get([[maybe_unused]] const entity_type entity) {\n        ENTT_ASSERT(valid(entity));\n\n        if constexpr(sizeof...(Component) == 1) {\n            return (assure<Component>().get(entity), ...);\n        } else {\n            return std::forward_as_tuple(get<Component>(entity)...);\n        }\n    }\n\n    /**\n     * @brief Returns a reference to the given component for an entity.\n     *\n     * In case the entity doesn't own the component, the parameters provided are\n     * used to construct it.<br/>\n     * Equivalent to the following snippet (pseudocode):\n     *\n     * @code{.cpp}\n     * auto &component = registry.has<Component>(entity) ? registry.get<Component>(entity) : registry.emplace<Component>(entity, args...);\n     * @endcode\n     *\n     * Prefer this function anyway because it has slightly better performance.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @tparam Component Type of component to get.\n     * @tparam Args Types of arguments to use to construct the component.\n     * @param entity A valid entity identifier.\n     * @param args Parameters to use to initialize the component.\n     * @return Reference to the component owned by the entity.\n     */\n    template<typename Component, typename... Args>\n    decltype(auto) get_or_emplace(const entity_type entity, Args &&... args) {\n        ENTT_ASSERT(valid(entity));\n        auto &cpool = assure<Component>();\n        return cpool.contains(entity) ? cpool.get(entity) : cpool.emplace(*this, entity, std::forward<Args>(args)...);\n    }\n\n    /*! @copydoc get_or_emplace */\n    template<typename Component, typename... Args>\n    [[deprecated(\"use ::get_or_emplace instead\")]]\n    decltype(auto) get_or_assign(const entity_type entity, Args &&... args) {\n        return get_or_emplace<Component>(entity, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Returns pointers to the given components for an entity.\n     *\n     * @warning\n     * Attempting to use an invalid entity results in undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid entity.\n     *\n     * @tparam Component Types of components to get.\n     * @param entity A valid entity identifier.\n     * @return Pointers to the components owned by the entity.\n     */\n    template<typename... Component>\n    auto try_get([[maybe_unused]] const entity_type entity) const {\n        ENTT_ASSERT(valid(entity));\n\n        if constexpr(sizeof...(Component) == 1) {\n            return (assure<Component>().try_get(entity), ...);\n        } else {\n            return std::make_tuple(try_get<Component>(entity)...);\n        }\n    }\n\n    /*! @copydoc try_get */\n    template<typename... Component>\n    auto try_get([[maybe_unused]] const entity_type entity) {\n        ENTT_ASSERT(valid(entity));\n\n        if constexpr(sizeof...(Component) == 1) {\n            return (assure<Component>().try_get(entity), ...);\n        } else {\n            return std::make_tuple(try_get<Component>(entity)...);\n        }\n    }\n\n    /**\n     * @brief Clears a whole registry or the pools for the given components.\n     * @tparam Component Types of components to remove from their entities.\n     */\n    template<typename... Component>\n    void clear() {\n        if constexpr(sizeof...(Component) == 0) {\n            // useless this-> used to suppress a warning with clang\n            each([this](const auto entity) { this->destroy(entity); });\n        } else {\n            ([this](auto &&cpool) {\n                cpool.remove(*this, cpool.sparse_set<entity_type>::begin(), cpool.sparse_set<entity_type>::end());\n            }(assure<Component>()), ...);\n        }\n    }\n\n    /**\n     * @brief Iterates all the entities that are still in use.\n     *\n     * The function object is invoked for each entity that is still in use.<br/>\n     * The signature of the function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(const Entity);\n     * @endcode\n     *\n     * This function is fairly slow and should not be used frequently. However,\n     * it's useful for iterating all the entities still in use, regardless of\n     * their components.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        static_assert(std::is_invocable_v<Func, entity_type>);\n\n        if(destroyed == null) {\n            for(auto pos = entities.size(); pos; --pos) {\n                func(entities[pos-1]);\n            }\n        } else {\n            for(auto pos = entities.size(); pos; --pos) {\n                if(const auto entt = entities[pos - 1]; (to_integral(entt) & traits_type::entity_mask) == (pos - 1)) {\n                    func(entt);\n                }\n            }\n        }\n    }\n\n    /**\n     * @brief Checks if an entity has components assigned.\n     * @param entity A valid entity identifier.\n     * @return True if the entity has no components assigned, false otherwise.\n     */\n    bool orphan(const entity_type entity) const {\n        ENTT_ASSERT(valid(entity));\n        return std::none_of(pools.cbegin(), pools.cend(), [entity](auto &&pdata) { return pdata.pool && pdata.pool->contains(entity); });\n    }\n\n    /**\n     * @brief Iterates orphans and applies them the given function object.\n     *\n     * The function object is invoked for each entity that is still in use and\n     * has no components assigned.<br/>\n     * The signature of the function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(const Entity);\n     * @endcode\n     *\n     * This function can be very slow and should not be used frequently.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void orphans(Func func) const {\n        static_assert(std::is_invocable_v<Func, entity_type>);\n\n        each([this, &func](const auto entity) {\n            if(orphan(entity)) {\n                func(entity);\n            }\n        });\n    }\n\n    /**\n     * @brief Returns a sink object for the given component.\n     *\n     * A sink is an opaque object used to connect listeners to components.<br/>\n     * The sink returned by this function can be used to receive notifications\n     * whenever a new instance of the given component is created and assigned to\n     * an entity.\n     *\n     * The function type for a listener is equivalent to:\n     *\n     * @code{.cpp}\n     * void(registry<Entity> &, Entity);\n     * @endcode\n     *\n     * Listeners are invoked **after** the component has been assigned to the\n     * entity.\n     *\n     * @sa sink\n     *\n     * @tparam Component Type of component of which to get the sink.\n     * @return A temporary sink object.\n     */\n    template<typename Component>\n    auto on_construct() {\n        return assure<Component>().on_construct();\n    }\n\n    /**\n     * @brief Returns a sink object for the given component.\n     *\n     * A sink is an opaque object used to connect listeners to components.<br/>\n     * The sink returned by this function can be used to receive notifications\n     * whenever an instance of the given component is explicitly updated.\n     *\n     * The function type for a listener is equivalent to:\n     *\n     * @code{.cpp}\n     * void(registry<Entity> &, Entity);\n     * @endcode\n     *\n     * Listeners are invoked **after** the component has been updated.\n     *\n     * @sa sink\n     *\n     * @tparam Component Type of component of which to get the sink.\n     * @return A temporary sink object.\n     */\n    template<typename Component>\n    auto on_update() {\n        return assure<Component>().on_update();\n    }\n\n    /*! @copydoc on_update */\n    template<typename Component>\n    [[deprecated(\"use registry::on_update instead\")]]\n    auto on_replace() {\n        return on_update<Component>();\n    }\n\n    /**\n     * @brief Returns a sink object for the given component.\n     *\n     * A sink is an opaque object used to connect listeners to components.<br/>\n     * The sink returned by this function can be used to receive notifications\n     * whenever an instance of the given component is removed from an entity and\n     * thus destroyed.\n     *\n     * The function type for a listener is equivalent to:\n     *\n     * @code{.cpp}\n     * void(registry<Entity> &, Entity);\n     * @endcode\n     *\n     * Listeners are invoked **before** the component has been removed from the\n     * entity.\n     *\n     * @sa sink\n     *\n     * @tparam Component Type of component of which to get the sink.\n     * @return A temporary sink object.\n     */\n    template<typename Component>\n    auto on_destroy() {\n        return assure<Component>().on_destroy();\n    }\n\n    /**\n     * @brief Sorts the pool of entities for the given component.\n     *\n     * The order of the elements in a pool is highly affected by assignments\n     * of components to entities and deletions. Components are arranged to\n     * maximize the performance during iterations and users should not make any\n     * assumption on the order.<br/>\n     * This function can be used to impose an order to the elements in the pool\n     * of the given component. The order is kept valid until a component of the\n     * given type is assigned or removed from an entity.\n     *\n     * The comparison function object must return `true` if the first element\n     * is _less_ than the second one, `false` otherwise. The signature of the\n     * comparison function should be equivalent to one of the following:\n     *\n     * @code{.cpp}\n     * bool(const Entity, const Entity);\n     * bool(const Component &, const Component &);\n     * @endcode\n     *\n     * Moreover, the comparison function object shall induce a\n     * _strict weak ordering_ on the values.\n     *\n     * The sort function oject must offer a member function template\n     * `operator()` that accepts three arguments:\n     *\n     * * An iterator to the first element of the range to sort.\n     * * An iterator past the last element of the range to sort.\n     * * A comparison function to use to compare the elements.\n     *\n     * The comparison funtion object received by the sort function object hasn't\n     * necessarily the type of the one passed along with the other parameters to\n     * this member function.\n     *\n     * @warning\n     * Pools of components owned by a group cannot be sorted.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case\n     * the pool is owned by a group.\n     *\n     * @tparam Component Type of components to sort.\n     * @tparam Compare Type of comparison function object.\n     * @tparam Sort Type of sort function object.\n     * @tparam Args Types of arguments to forward to the sort function object.\n     * @param compare A valid comparison function object.\n     * @param algo A valid sort function object.\n     * @param args Arguments to forward to the sort function object, if any.\n     */\n    template<typename Component, typename Compare, typename Sort = std_sort, typename... Args>\n    void sort(Compare compare, Sort algo = Sort{}, Args &&... args) {\n        auto &cpool = assure<Component>();\n        ENTT_ASSERT(!cpool.super);\n        cpool.sort(cpool.begin(), cpool.end(), std::move(compare), std::move(algo), std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Sorts two pools of components in the same way.\n     *\n     * The order of the elements in a pool is highly affected by assignments\n     * of components to entities and deletions. Components are arranged to\n     * maximize the performance during iterations and users should not make any\n     * assumption on the order.\n     *\n     * It happens that different pools of components must be sorted the same way\n     * because of runtime and/or performance constraints. This function can be\n     * used to order a pool of components according to the order between the\n     * entities in another pool of components.\n     *\n     * @b How @b it @b works\n     *\n     * Being `A` and `B` the two sets where `B` is the master (the one the order\n     * of which rules) and `A` is the slave (the one to sort), after a call to\n     * this function an iterator for `A` will return the entities according to\n     * the following rules:\n     *\n     * * All the entities in `A` that are also in `B` are returned first\n     *   according to the order they have in `B`.\n     * * All the entities in `A` that are not in `B` are returned in no\n     *   particular order after all the other entities.\n     *\n     * Any subsequent change to `B` won't affect the order in `A`.\n     *\n     * @warning\n     * Pools of components owned by a group cannot be sorted.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case\n     * the pool is owned by a group.\n     *\n     * @tparam To Type of components to sort.\n     * @tparam From Type of components to use to sort.\n     */\n    template<typename To, typename From>\n    void sort() {\n        auto &cpool = assure<To>();\n        ENTT_ASSERT(!cpool.super);\n        cpool.respect(assure<From>());\n    }\n\n    /**\n     * @brief Returns a view for the given components.\n     *\n     * This kind of objects are created on the fly and share with the registry\n     * its internal data structures.<br/>\n     * Feel free to discard a view after the use. Creating and destroying a view\n     * is an incredibly cheap operation because they do not require any type of\n     * initialization.<br/>\n     * As a rule of thumb, storing a view should never be an option.\n     *\n     * Views do their best to iterate the smallest set of candidate entities.\n     * In particular:\n     *\n     * * Single component views are incredibly fast and iterate a packed array\n     *   of entities, all of which has the given component.\n     * * Multi component views look at the number of entities available for each\n     *   component and pick up a reference to the smallest set of candidates to\n     *   test for the given components.\n     *\n     * Views in no way affect the functionalities of the registry nor those of\n     * the underlying pools.\n     *\n     * @note\n     * Multi component views are pretty fast. However their performance tend to\n     * degenerate when the number of components to iterate grows up and the most\n     * of the entities have all the given components.<br/>\n     * To get a performance boost, consider using a group instead.\n     *\n     * @tparam Component Type of components used to construct the view.\n     * @tparam Exclude Types of components used to filter the view.\n     * @return A newly created view.\n     */\n    template<typename... Component, typename... Exclude>\n    entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) {\n        static_assert(sizeof...(Component) > 0);\n        return { assure<std::decay_t<Component>>()..., assure<Exclude>()... };\n    }\n\n    /*! @copydoc view */\n    template<typename... Component, typename... Exclude>\n    entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) const {\n        static_assert(std::conjunction_v<std::is_const<Component>...>);\n        return const_cast<basic_registry *>(this)->view<Component...>(exclude<Exclude...>);\n    }\n\n    /**\n     * @brief Checks whether the given components belong to any group.\n     * @tparam Component Types of components in which one is interested.\n     * @return True if the pools of the given components are sortable, false\n     * otherwise.\n     */\n    template<typename... Component>\n    bool sortable() const {\n        return !(assure<Component>().super || ...);\n    }\n\n    /**\n     * @brief Returns a group for the given components.\n     *\n     * This kind of objects are created on the fly and share with the registry\n     * its internal data structures.<br/>\n     * Feel free to discard a group after the use. Creating and destroying a\n     * group is an incredibly cheap operation because they do not require any\n     * type of initialization, but for the first time they are requested.<br/>\n     * As a rule of thumb, storing a group should never be an option.\n     *\n     * Groups support exclusion lists and can own types of components. The more\n     * types are owned by a group, the faster it is to iterate entities and\n     * components.<br/>\n     * However, groups also affect some features of the registry such as the\n     * creation and destruction of components, which will consequently be\n     * slightly slower (nothing that can be noticed in most cases).\n     *\n     * @note\n     * Pools of components that are owned by a group cannot be sorted anymore.\n     * The group takes the ownership of the pools and arrange components so as\n     * to iterate them as fast as possible.\n     *\n     * @tparam Owned Types of components owned by the group.\n     * @tparam Get Types of components observed by the group.\n     * @tparam Exclude Types of components used to filter the group.\n     * @return A newly created group.\n     */\n    template<typename... Owned, typename... Get, typename... Exclude>\n    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> group(get_t<Get...>, exclude_t<Exclude...> = {}) {\n        static_assert(sizeof...(Owned) + sizeof...(Get) > 0);\n        static_assert(sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude) > 1);\n\n        using handler_type = group_handler<exclude_t<Exclude...>, get_t<std::decay_t<Get>...>, std::decay_t<Owned>...>;\n\n        const auto cpools = std::forward_as_tuple(assure<std::decay_t<Owned>>()..., assure<std::decay_t<Get>>()...);\n        constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude);\n        handler_type *handler = nullptr;\n\n        if(auto it = std::find_if(groups.cbegin(), groups.cend(), [size](const auto &gdata) {\n            return gdata.size == size\n                && (gdata.owned(type_info<std::decay_t<Owned>>::id()) && ...)\n                && (gdata.get(type_info<std::decay_t<Get>>::id()) && ...)\n                && (gdata.exclude(type_info<Exclude>::id()) && ...);\n        }); it != groups.cend())\n        {\n            handler = static_cast<handler_type *>(it->group.get());\n        }\n\n        if(!handler) {\n            group_data candidate = {\n                size,\n                { new handler_type{}, [](void *instance) { delete static_cast<handler_type *>(instance); } },\n                []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_info<std::decay_t<Owned>>::id()) || ...); },\n                []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_info<std::decay_t<Get>>::id()) || ...); },\n                []([[maybe_unused]] const id_type ctype) ENTT_NOEXCEPT { return ((ctype == type_info<Exclude>::id()) || ...); },\n            };\n\n            handler = static_cast<handler_type *>(candidate.group.get());\n\n            const void *maybe_valid_if = nullptr;\n            const void *discard_if = nullptr;\n\n            if constexpr(sizeof...(Owned) == 0) {\n                groups.push_back(std::move(candidate));\n            } else {\n                ENTT_ASSERT(std::all_of(groups.cbegin(), groups.cend(), [size](const auto &gdata) {\n                    const auto overlapping = (0u + ... + gdata.owned(type_info<std::decay_t<Owned>>::id()));\n                    const auto sz = overlapping + (0u + ... + gdata.get(type_info<std::decay_t<Get>>::id())) + (0u + ... + gdata.exclude(type_info<Exclude>::id()));\n                    return !overlapping || ((sz == size) || (sz == gdata.size));\n                }));\n\n                const auto next = std::find_if_not(groups.cbegin(), groups.cend(), [size](const auto &gdata) {\n                    return !(0u + ... + gdata.owned(type_info<std::decay_t<Owned>>::id())) || (size > (gdata.size));\n                });\n\n                const auto prev = std::find_if(std::make_reverse_iterator(next), groups.crend(), [](const auto &gdata) {\n                    return (0u + ... + gdata.owned(type_info<std::decay_t<Owned>>::id()));\n                });\n\n                maybe_valid_if = (next == groups.cend() ? maybe_valid_if : next->group.get());\n                discard_if = (prev == groups.crend() ? discard_if : prev->group.get());\n                groups.insert(next, std::move(candidate));\n            }\n\n            ((std::get<pool_handler<std::decay_t<Owned>> &>(cpools).super = std::max(std::get<pool_handler<std::decay_t<Owned>> &>(cpools).super, size)), ...);\n\n            (on_construct<std::decay_t<Owned>>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<std::decay_t<Owned>>>(*handler), ...);\n            (on_construct<std::decay_t<Get>>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<std::decay_t<Get>>>(*handler), ...);\n            (on_destroy<Exclude>().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Exclude>>(*handler), ...);\n\n            (on_destroy<std::decay_t<Owned>>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);\n            (on_destroy<std::decay_t<Get>>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);\n            (on_construct<Exclude>().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);\n\n            if constexpr(sizeof...(Owned) == 0) {\n                for(const auto entity: view<Owned..., Get...>(entt::exclude<Exclude...>)) {\n                    handler->current.emplace(entity);\n                }\n            } else {\n                // we cannot iterate backwards because we want to leave behind valid entities in case of owned types\n                for(auto *first = std::get<0>(cpools).data(), *last = first + std::get<0>(cpools).size(); first != last; ++first) {\n                    handler->template maybe_valid_if<std::tuple_element_t<0, std::tuple<std::decay_t<Owned>...>>>(*this, *first);\n                }\n            }\n        }\n\n        if constexpr(sizeof...(Owned) == 0) {\n            return { handler->current, std::get<pool_handler<std::decay_t<Get>> &>(cpools)... };\n        } else {\n            return { std::get<0>(cpools).super, handler->current, std::get<pool_handler<std::decay_t<Owned>> &>(cpools)... , std::get<pool_handler<std::decay_t<Get>> &>(cpools)... };\n        }\n    }\n\n    /**\n     * @brief Returns a group for the given components.\n     *\n     * @sa group\n     *\n     * @tparam Owned Types of components owned by the group.\n     * @tparam Get Types of components observed by the group.\n     * @tparam Exclude Types of components used to filter the group.\n     * @return A newly created group.\n     */\n    template<typename... Owned, typename... Get, typename... Exclude>\n    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> group(get_t<Get...>, exclude_t<Exclude...> = {}) const {\n        static_assert(std::conjunction_v<std::is_const<Owned>..., std::is_const<Get>...>);\n        return const_cast<basic_registry *>(this)->group<Owned...>(entt::get<Get...>, exclude<Exclude...>);\n    }\n\n    /**\n     * @brief Returns a group for the given components.\n     *\n     * @sa group\n     *\n     * @tparam Owned Types of components owned by the group.\n     * @tparam Exclude Types of components used to filter the group.\n     * @return A newly created group.\n     */\n    template<typename... Owned, typename... Exclude>\n    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> group(exclude_t<Exclude...> = {}) {\n        return group<Owned...>(entt::get<>, exclude<Exclude...>);\n    }\n\n    /**\n     * @brief Returns a group for the given components.\n     *\n     * @sa group\n     *\n     * @tparam Owned Types of components owned by the group.\n     * @tparam Exclude Types of components used to filter the group.\n     * @return A newly created group.\n     */\n    template<typename... Owned, typename... Exclude>\n    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> group(exclude_t<Exclude...> = {}) const {\n        static_assert(std::conjunction_v<std::is_const<Owned>...>);\n        return const_cast<basic_registry *>(this)->group<Owned...>(exclude<Exclude...>);\n    }\n\n    /**\n     * @brief Returns a runtime view for the given components.\n     *\n     * This kind of objects are created on the fly and share with the registry\n     * its internal data structures.<br/>\n     * Users should throw away the view after use. Fortunately, creating and\n     * destroying a runtime view is an incredibly cheap operation because they\n     * do not require any type of initialization.<br/>\n     * As a rule of thumb, storing a view should never be an option.\n     *\n     * Runtime views are to be used when users want to construct a view from\n     * some external inputs and don't know at compile-time what are the required\n     * components.<br/>\n     * This is particularly well suited to plugin systems and mods in general.\n     *\n     * @tparam It Type of input iterator.\n     * @param first An iterator to the first element of the range of components.\n     * @param last An iterator past the last element of the range of components.\n     * @return A newly created runtime view.\n     */\n    template<typename It>\n    entt::basic_runtime_view<Entity> runtime_view(It first, It last) const {\n        std::vector<const sparse_set<Entity> *> selected(std::distance(first, last));\n\n        std::transform(first, last, selected.begin(), [this](const auto ctype) {\n            const auto it = std::find_if(pools.cbegin(), pools.cend(), [ctype](auto &&pdata) { return pdata.pool && pdata.type_id == ctype; });\n            return it == pools.cend() ? nullptr : it->pool.get();\n        });\n\n        return { std::move(selected) };\n    }\n\n    /**\n     * @brief Returns a temporary object to use to create snapshots.\n     *\n     * A snapshot is either a full or a partial dump of a registry.<br/>\n     * It can be used to save and restore its internal state or to keep two or\n     * more instances of this class in sync, as an example in a client-server\n     * architecture.\n     *\n     * @return A temporary object to use to take snasphosts.\n     */\n    [[deprecated(\"basic_snapshot has now a constructor that accepts a reference to a registry\")]]\n    entt::basic_snapshot<Entity> snapshot() const {\n        return { *this };\n    }\n\n    /**\n     * @brief Returns a temporary object to use to load snapshots.\n     *\n     * A snapshot is either a full or a partial dump of a registry.<br/>\n     * It can be used to save and restore its internal state or to keep two or\n     * more instances of this class in sync, as an example in a client-server\n     * architecture.\n     *\n     * @note\n     * The loader returned by this function requires that the registry be empty.\n     * In case it isn't, all the data will be automatically deleted before to\n     * return.\n     *\n     * @return A temporary object to use to load snasphosts.\n     */\n    [[deprecated(\"basic_snapshot_loader has now a constructor that accepts a reference to a registry\")]]\n    basic_snapshot_loader<Entity> loader() {\n        return { *this };\n    }\n\n    /**\n     * @brief Visits an entity and returns the types for its components.\n     *\n     * The signature of the function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(const id_type);\n     * @endcode\n     *\n     * Returned identifiers are those of the components owned by the entity.\n     *\n     * @sa type_info\n     *\n     * @warning\n     * It's not specified whether a component attached to or removed from the\n     * given entity during the visit is returned or not to the caller.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param entity A valid entity identifier.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void visit(entity_type entity, Func func) const {\n        for(auto pos = pools.size(); pos; --pos) {\n            if(const auto &pdata = pools[pos-1]; pdata.pool && pdata.pool->contains(entity)) {\n                func(pdata.type_id);\n            }\n        }\n    }\n\n    /**\n     * @brief Visits a registry and returns the types for its components.\n     *\n     * The signature of the function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(const id_type);\n     * @endcode\n     *\n     * Returned identifiers are those of the components managed by the registry.\n     *\n     * @sa type_info\n     *\n     * @warning\n     * It's not specified whether a component for which a pool is created during\n     * the visit is returned or not to the caller.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void visit(Func func) const {\n        for(auto pos = pools.size(); pos; --pos) {\n            if(const auto &pdata = pools[pos-1]; pdata.pool) {\n                func(pdata.type_id);\n            }\n        }\n    }\n\n    /**\n     * @brief Binds an object to the context of the registry.\n     *\n     * If the value already exists it is overwritten, otherwise a new instance\n     * of the given type is created and initialized with the arguments provided.\n     *\n     * @tparam Type Type of object to set.\n     * @tparam Args Types of arguments to use to construct the object.\n     * @param args Parameters to use to initialize the value.\n     * @return A reference to the newly created object.\n     */\n    template<typename Type, typename... Args>\n    Type & set(Args &&... args) {\n        unset<Type>();\n        vars.push_back(variable_data{type_info<Type>::id(), { new Type{std::forward<Args>(args)...}, [](void *instance) { delete static_cast<Type *>(instance); } }});\n        return *static_cast<Type *>(vars.back().value.get());\n    }\n\n    /**\n     * @brief Unsets a context variable if it exists.\n     * @tparam Type Type of object to set.\n     */\n    template<typename Type>\n    void unset() {\n        vars.erase(std::remove_if(vars.begin(), vars.end(), [](auto &&var) {\n            return var.type_id == type_info<Type>::id();\n        }), vars.end());\n    }\n\n    /**\n     * @brief Binds an object to the context of the registry.\n     *\n     * In case the context doesn't contain the given object, the parameters\n     * provided are used to construct it.\n     *\n     * @tparam Type Type of object to set.\n     * @tparam Args Types of arguments to use to construct the object.\n     * @param args Parameters to use to initialize the object.\n     * @return A reference to the object in the context of the registry.\n     */\n    template<typename Type, typename... Args>\n    Type & ctx_or_set(Args &&... args) {\n        auto *value = try_ctx<Type>();\n        return value ? *value : set<Type>(std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Returns a pointer to an object in the context of the registry.\n     * @tparam Type Type of object to get.\n     * @return A pointer to the object if it exists in the context of the\n     * registry, a null pointer otherwise.\n     */\n    template<typename Type>\n    const Type * try_ctx() const {\n        auto it = std::find_if(vars.cbegin(), vars.cend(), [](auto &&var) { return var.type_id == type_info<Type>::id(); });\n        return it == vars.cend() ? nullptr : static_cast<const Type *>(it->value.get());\n    }\n\n    /*! @copydoc try_ctx */\n    template<typename Type>\n    Type * try_ctx() {\n        return const_cast<Type *>(std::as_const(*this).template try_ctx<Type>());\n    }\n\n    /**\n     * @brief Returns a reference to an object in the context of the registry.\n     *\n     * @warning\n     * Attempting to get a context variable that doesn't exist results in\n     * undefined behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case of\n     * invalid requests.\n     *\n     * @tparam Type Type of object to get.\n     * @return A valid reference to the object in the context of the registry.\n     */\n    template<typename Type>\n    const Type & ctx() const {\n        const auto *instance = try_ctx<Type>();\n        ENTT_ASSERT(instance);\n        return *instance;\n    }\n\n    /*! @copydoc ctx */\n    template<typename Type>\n    Type & ctx() {\n        return const_cast<Type &>(std::as_const(*this).template ctx<Type>());\n    }\n\n    /**\n     * @brief Visits a registry and returns the types for its context variables.\n     *\n     * The signature of the function should be equivalent to the following:\n     *\n     * @code{.cpp}\n     * void(const id_type);\n     * @endcode\n     *\n     * Returned identifiers are those of the context variables currently set.\n     *\n     * @sa type_info\n     *\n     * @warning\n     * It's not specified whether a context variable created during the visit is\n     * returned or not to the caller.\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void ctx(Func func) const {\n        for(auto pos = vars.size(); pos; --pos) {\n            func(vars[pos-1].type_id);\n        }\n    }\n\nprivate:\n    std::vector<group_data> groups{};\n    mutable std::vector<pool_data> pools{};\n    std::vector<entity_type> entities{};\n    std::vector<variable_data> vars{};\n    entity_type destroyed{null};\n};\n\n\n}\n\n\n#endif\n\n// #include \"entity.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Dedicated to those who aren't confident with the\n * entity-component-system architecture.\n *\n * Tiny wrapper around a registry, for all those users that aren't confident\n * with entity-component-system architecture and prefer to iterate objects\n * directly.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nstruct basic_actor {\n    /*! @brief Type of registry used internally. */\n    using registry_type = basic_registry<Entity>;\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n\n    basic_actor() ENTT_NOEXCEPT\n        : entt{entt::null}, reg{nullptr}\n    {}\n\n    /**\n     * @brief Move constructor.\n     *\n     * After actor move construction, instances that have been moved from are\n     * placed in a valid but unspecified state. It's highly discouraged to\n     * continue using them.\n     *\n     * @param other The instance to move from.\n     */\n    basic_actor(basic_actor &&other) ENTT_NOEXCEPT\n        : entt{other.entt}, reg{other.reg}\n    {\n        other.entt = null;\n    }\n\n    /**\n     * @brief Constructs an actor from a given registry.\n     * @param ref An instance of the registry class.\n     */\n    explicit basic_actor(registry_type &ref)\n        : entt{ref.create()}, reg{&ref}\n    {}\n\n    /**\n     * @brief Constructs an actor from a given entity.\n     * @param entity A valid entity identifier.\n     * @param ref An instance of the registry class.\n     */\n    explicit basic_actor(entity_type entity, registry_type &ref) ENTT_NOEXCEPT\n        : entt{entity}, reg{&ref}\n    {\n        ENTT_ASSERT(ref.valid(entity));\n    }\n\n    /*! @brief Default destructor. */\n    virtual ~basic_actor() {\n        if(*this) {\n            reg->destroy(entt);\n        }\n    }\n\n    /**\n     * @brief Move assignment operator.\n     *\n     * After actor move assignment, instances that have been moved from are\n     * placed in a valid but unspecified state. It's highly discouraged to\n     * continue using them.\n     *\n     * @param other The instance to move from.\n     * @return This actor.\n     */\n    basic_actor & operator=(basic_actor &&other) ENTT_NOEXCEPT {\n        if(this != &other) {\n            auto tmp{std::move(other)};\n            std::swap(reg, tmp.reg);\n            std::swap(entt, tmp.entt);\n        }\n\n        return *this;\n    }\n\n    /**\n     * @brief Assigns the given component to an actor.\n     *\n     * A new instance of the given component is created and initialized with the\n     * arguments provided (the component must have a proper constructor or be of\n     * aggregate type). Then the component is assigned to the actor.<br/>\n     * In case the actor already has a component of the given type, it's\n     * replaced with the new one.\n     *\n     * @tparam Component Type of the component to create.\n     * @tparam Args Types of arguments to use to construct the component.\n     * @param args Parameters to use to initialize the component.\n     * @return A reference to the newly created component.\n     */\n    template<typename Component, typename... Args>\n    decltype(auto) assign(Args &&... args) {\n        return reg->template emplace_or_replace<Component>(entt, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Removes the given component from an actor.\n     * @tparam Component Type of the component to remove.\n     */\n    template<typename Component>\n    void remove() {\n        reg->template remove<Component>(entt);\n    }\n\n    /**\n     * @brief Checks if an actor has the given components.\n     * @tparam Component Components for which to perform the check.\n     * @return True if the actor has all the components, false otherwise.\n     */\n    template<typename... Component>\n    bool has() const {\n        return reg->template has<Component...>(entt);\n    }\n\n    /**\n     * @brief Returns references to the given components for an actor.\n     * @tparam Component Types of components to get.\n     * @return References to the components owned by the actor.\n     */\n    template<typename... Component>\n    decltype(auto) get() const {\n        return std::as_const(*reg).template get<Component...>(entt);\n    }\n\n    /*! @copydoc get */\n    template<typename... Component>\n    decltype(auto) get() {\n        return reg->template get<Component...>(entt);\n    }\n\n    /**\n     * @brief Returns pointers to the given components for an actor.\n     * @tparam Component Types of components to get.\n     * @return Pointers to the components owned by the actor.\n     */\n    template<typename... Component>\n    auto try_get() const {\n        return std::as_const(*reg).template try_get<Component...>(entt);\n    }\n\n    /*! @copydoc try_get */\n    template<typename... Component>\n    auto try_get() {\n        return reg->template try_get<Component...>(entt);\n    }\n\n    /**\n     * @brief Returns a reference to the underlying registry.\n     * @return A reference to the underlying registry.\n     */\n    const registry_type & backend() const ENTT_NOEXCEPT {\n        return *reg;\n    }\n\n    /*! @copydoc backend */\n    registry_type & backend() ENTT_NOEXCEPT {\n        return const_cast<registry_type &>(std::as_const(*this).backend());\n    }\n\n    /**\n     * @brief Returns the entity associated with an actor.\n     * @return The entity associated with the actor.\n     */\n    entity_type entity() const ENTT_NOEXCEPT {\n        return entt;\n    }\n\n    /**\n     * @brief Checks if an actor refers to a valid entity or not.\n     * @return True if the actor refers to a valid entity, false otherwise.\n     */\n    explicit operator bool() const {\n        return reg && reg->valid(entt);\n    }\n\nprivate:\n    entity_type entt;\n    registry_type *reg;\n};\n\n\n}\n\n\n#endif\n\n// #include \"entity/entity.hpp\"\n\n// #include \"entity/group.hpp\"\n\n// #include \"entity/helper.hpp\"\n#ifndef ENTT_ENTITY_HELPER_HPP\n#define ENTT_ENTITY_HELPER_HPP\n\n\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/type_traits.hpp\"\n\n// #include \"../signal/delegate.hpp\"\n\n// #include \"registry.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Converts a registry to a view.\n * @tparam Const Constness of the accepted registry.\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<bool Const, typename Entity>\nstruct as_view {\n    /*! @brief Type of registry to convert. */\n    using registry_type = std::conditional_t<Const, const entt::basic_registry<Entity>, entt::basic_registry<Entity>>;\n\n    /**\n     * @brief Constructs a converter for a given registry.\n     * @param source A valid reference to a registry.\n     */\n    as_view(registry_type &source) ENTT_NOEXCEPT: reg{source} {}\n\n    /**\n     * @brief Conversion function from a registry to a view.\n     * @tparam Exclude Types of components used to filter the view.\n     * @tparam Component Type of components used to construct the view.\n     * @return A newly created view.\n     */\n    template<typename Exclude, typename... Component>\n    operator entt::basic_view<Entity, Exclude, Component...>() const {\n        return reg.template view<Component...>(Exclude{});\n    }\n\nprivate:\n    registry_type &reg;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the constness of a registry directly from the instance\n * provided to the constructor.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nas_view(basic_registry<Entity> &) ENTT_NOEXCEPT -> as_view<false, Entity>;\n\n\n/*! @copydoc as_view */\ntemplate<typename Entity>\nas_view(const basic_registry<Entity> &) ENTT_NOEXCEPT -> as_view<true, Entity>;\n\n\n/**\n * @brief Converts a registry to a group.\n * @tparam Const Constness of the accepted registry.\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<bool Const, typename Entity>\nstruct as_group {\n    /*! @brief Type of registry to convert. */\n    using registry_type = std::conditional_t<Const, const entt::basic_registry<Entity>, entt::basic_registry<Entity>>;\n\n    /**\n     * @brief Constructs a converter for a given registry.\n     * @param source A valid reference to a registry.\n     */\n    as_group(registry_type &source) ENTT_NOEXCEPT: reg{source} {}\n\n    /**\n     * @brief Conversion function from a registry to a group.\n     * @tparam Exclude Types of components used to filter the group.\n     * @tparam Get Types of components observed by the group.\n     * @tparam Owned Types of components owned by the group.\n     * @return A newly created group.\n     */\n    template<typename Exclude, typename Get, typename... Owned>\n    operator entt::basic_group<Entity, Exclude, Get, Owned...>() const {\n        return reg.template group<Owned...>(Get{}, Exclude{});\n    }\n\nprivate:\n    registry_type &reg;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the constness of a registry directly from the instance\n * provided to the constructor.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nas_group(basic_registry<Entity> &) ENTT_NOEXCEPT -> as_group<false, Entity>;\n\n\n/*! @copydoc as_group */\ntemplate<typename Entity>\nas_group(const basic_registry<Entity> &) ENTT_NOEXCEPT -> as_group<true, Entity>;\n\n\n\n/**\n * @brief Helper to create a listener that directly invokes a member function.\n * @tparam Member Member function to invoke on a component of the given type.\n * @tparam Entity A valid entity type (see entt_traits for more details).\n * @param reg A registry that contains the given entity and its components.\n * @param entt Entity from which to get the component.\n */\ntemplate<auto Member, typename Entity = entity>\nvoid invoke(basic_registry<Entity> &reg, const Entity entt) {\n    static_assert(std::is_member_function_pointer_v<decltype(Member)>);\n    delegate<void(basic_registry<Entity> &, const Entity)> func;\n    func.template connect<Member>(reg.template get<member_class_t<decltype(Member)>>(entt));\n    func(reg, entt);\n}\n\n\n}\n\n\n#endif\n\n// #include \"entity/observer.hpp\"\n#ifndef ENTT_ENTITY_OBSERVER_HPP\n#define ENTT_ENTITY_OBSERVER_HPP\n\n\n#include <limits>\n#include <cstddef>\n#include <cstdint>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"../core/type_traits.hpp\"\n\n// #include \"registry.hpp\"\n\n// #include \"storage.hpp\"\n\n// #include \"utility.hpp\"\n\n// #include \"entity.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/*! @brief Grouping matcher. */\ntemplate<typename...>\nstruct matcher {};\n\n\n/**\n * @brief Collector.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error, but for a few reasonable cases.\n */\ntemplate<typename...>\nstruct basic_collector;\n\n\n/**\n * @brief Collector.\n *\n * A collector contains a set of rules (literally, matchers) to use to track\n * entities.<br/>\n * Its main purpose is to generate a descriptor that allows an observer to know\n * how to connect to a registry.\n */\ntemplate<>\nstruct basic_collector<> {\n    /**\n     * @brief Adds a grouping matcher to the collector.\n     * @tparam AllOf Types of components tracked by the matcher.\n     * @tparam NoneOf Types of components used to filter out entities.\n     * @return The updated collector.\n     */\n    template<typename... AllOf, typename... NoneOf>\n    static constexpr auto group(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {\n        return basic_collector<matcher<type_list<>, type_list<>, type_list<NoneOf...>, AllOf...>>{};\n    }\n\n    /**\n     * @brief Adds an observing matcher to the collector.\n     * @tparam AnyOf Type of component for which changes should be detected.\n     * @return The updated collector.\n     */\n    template<typename AnyOf>\n    static constexpr auto update() ENTT_NOEXCEPT {\n        return basic_collector<matcher<type_list<>, type_list<>, AnyOf>>{};\n    }\n\n    /*! @copydoc update */\n    template<typename AnyOf>\n    [[deprecated(\"use ::update instead\")]]\n    static constexpr auto replace() ENTT_NOEXCEPT {\n        return update<AnyOf>();\n    }\n};\n\n/**\n * @brief Collector.\n * @copydetails basic_collector<>\n * @tparam Reject Untracked types used to filter out entities.\n * @tparam Require Untracked types required by the matcher.\n * @tparam Rule Specific details of the current matcher.\n * @tparam Other Other matchers.\n */\ntemplate<typename... Reject, typename... Require, typename... Rule, typename... Other>\nstruct basic_collector<matcher<type_list<Reject...>, type_list<Require...>, Rule...>, Other...> {\n    /*! @brief Current matcher. */\n    using current_type = matcher<type_list<Reject...>, type_list<Require...>, Rule...>;\n\n    /**\n     * @brief Adds a grouping matcher to the collector.\n     * @tparam AllOf Types of components tracked by the matcher.\n     * @tparam NoneOf Types of components used to filter out entities.\n     * @return The updated collector.\n     */\n    template<typename... AllOf, typename... NoneOf>\n    static constexpr auto group(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {\n        return basic_collector<matcher<type_list<>, type_list<>, type_list<NoneOf...>, AllOf...>, current_type, Other...>{};\n    }\n\n    /**\n     * @brief Adds an observing matcher to the collector.\n     * @tparam AnyOf Type of component for which changes should be detected.\n     * @return The updated collector.\n     */\n    template<typename AnyOf>\n    static constexpr auto update() ENTT_NOEXCEPT {\n        return basic_collector<matcher<type_list<>, type_list<>, AnyOf>, current_type, Other...>{};\n    }\n\n    /*! @copydoc update */\n    template<typename AnyOf>\n    [[deprecated(\"use ::update instead\")]]\n    static constexpr auto replace() ENTT_NOEXCEPT {\n        return update<AnyOf>();\n    }\n\n\n    /**\n     * @brief Updates the filter of the last added matcher.\n     * @tparam AllOf Types of components required by the matcher.\n     * @tparam NoneOf Types of components used to filter out entities.\n     * @return The updated collector.\n     */\n    template<typename... AllOf, typename... NoneOf>\n    static constexpr auto where(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {\n        using extended_type = matcher<type_list<Reject..., NoneOf...>, type_list<Require..., AllOf...>, Rule...>;\n        return basic_collector<extended_type, Other...>{};\n    }\n};\n\n\n/*! @brief Variable template used to ease the definition of collectors. */\ninline constexpr basic_collector<> collector{};\n\n\n/**\n * @brief Observer.\n *\n * An observer returns all the entities and only the entities that fit the\n * requirements of at least one matcher. Moreover, it's guaranteed that the\n * entity list is tightly packed in memory for fast iterations.<br/>\n * In general, observers don't stay true to the order of any set of components.\n *\n * Observers work mainly with two types of matchers, provided through a\n * collector:\n *\n * * Observing matcher: an observer will return at least all the living entities\n *   for which one or more of the given components have been updated and not yet\n *   destroyed.\n * * Grouping matcher: an observer will return at least all the living entities\n *   that would have entered the given group if it existed and that would have\n *   not yet left it.\n *\n * If an entity respects the requirements of multiple matchers, it will be\n * returned once and only once by the observer in any case.\n *\n * Matchers support also filtering by means of a _where_ clause that accepts\n * both a list of types and an exclusion list.<br/>\n * Whenever a matcher finds that an entity matches its requirements, the\n * condition of the filter is verified before to register the entity itself.\n * Moreover, a registered entity isn't returned by the observer if the condition\n * set by the filter is broken in the meantime.\n *\n * @b Important\n *\n * Iterators aren't invalidated if:\n *\n * * New instances of the given components are created and assigned to entities.\n * * The entity currently pointed is modified (as an example, if one of the\n *   given components is removed from the entity to which the iterator points).\n * * The entity currently pointed is destroyed.\n *\n * In all the other cases, modifying the pools of the given components in any\n * way invalidates all the iterators and using them results in undefined\n * behavior.\n *\n * @warning\n * Lifetime of an observer doesn't necessarily have to overcome that of the\n * registry to which it is connected. However, the observer must be disconnected\n * from the registry before being destroyed to avoid crashes due to dangling\n * pointers.\n *\n * @tparam Entity A valid entity type (see entt_traits for more details).\n */\ntemplate<typename Entity>\nclass basic_observer {\n    using payload_type = std::uint32_t;\n\n    template<typename>\n    struct matcher_handler;\n\n    template<typename... Reject, typename... Require, typename AnyOf>\n    struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, AnyOf>> {\n        template<std::size_t Index>\n        static void maybe_valid_if(basic_observer &obs, const basic_registry<Entity> &reg, const Entity entt) {\n            if(reg.template has<Require...>(entt) && !reg.template any<Reject...>(entt)) {\n                if(auto *comp = obs.view.try_get(entt); !comp) {\n                    obs.view.emplace(entt);\n                }\n\n                obs.view.get(entt) |= (1 << Index);\n            }\n        }\n\n        template<std::size_t Index>\n        static void discard_if(basic_observer &obs, const basic_registry<Entity> &, const Entity entt) {\n            if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {\n                obs.view.erase(entt);\n            }\n        }\n\n        template<std::size_t Index>\n        static void connect(basic_observer &obs, basic_registry<Entity> &reg) {\n            (reg.template on_destroy<Require>().template connect<&discard_if<Index>>(obs), ...);\n            (reg.template on_construct<Reject>().template connect<&discard_if<Index>>(obs), ...);\n            reg.template on_update<AnyOf>().template connect<&maybe_valid_if<Index>>(obs);\n            reg.template on_destroy<AnyOf>().template connect<&discard_if<Index>>(obs);\n        }\n\n        static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {\n            (reg.template on_destroy<Require>().disconnect(obs), ...);\n            (reg.template on_construct<Reject>().disconnect(obs), ...);\n            reg.template on_update<AnyOf>().disconnect(obs);\n            reg.template on_destroy<AnyOf>().disconnect(obs);\n        }\n    };\n\n    template<typename... Reject, typename... Require, typename... NoneOf, typename... AllOf>\n    struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, type_list<NoneOf...>, AllOf...>> {\n        template<std::size_t Index>\n        static void maybe_valid_if(basic_observer &obs, const basic_registry<Entity> &reg, const Entity entt) {\n            if(reg.template has<AllOf..., Require...>(entt) && !reg.template any<NoneOf..., Reject...>(entt)) {\n                if(auto *comp = obs.view.try_get(entt); !comp) {\n                    obs.view.emplace(entt);\n                }\n\n                obs.view.get(entt) |= (1 << Index);\n            }\n        }\n\n        template<std::size_t Index>\n        static void discard_if(basic_observer &obs, const basic_registry<Entity> &, const Entity entt) {\n            if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {\n                obs.view.erase(entt);\n            }\n        }\n\n        template<std::size_t Index>\n        static void connect(basic_observer &obs, basic_registry<Entity> &reg) {\n            (reg.template on_destroy<Require>().template connect<&discard_if<Index>>(obs), ...);\n            (reg.template on_construct<Reject>().template connect<&discard_if<Index>>(obs), ...);\n            (reg.template on_construct<AllOf>().template connect<&maybe_valid_if<Index>>(obs), ...);\n            (reg.template on_destroy<NoneOf>().template connect<&maybe_valid_if<Index>>(obs), ...);\n            (reg.template on_destroy<AllOf>().template connect<&discard_if<Index>>(obs), ...);\n            (reg.template on_construct<NoneOf>().template connect<&discard_if<Index>>(obs), ...);\n        }\n\n        static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {\n            (reg.template on_destroy<Require>().disconnect(obs), ...);\n            (reg.template on_construct<Reject>().disconnect(obs), ...);\n            (reg.template on_construct<AllOf>().disconnect(obs), ...);\n            (reg.template on_destroy<NoneOf>().disconnect(obs), ...);\n            (reg.template on_destroy<AllOf>().disconnect(obs), ...);\n            (reg.template on_construct<NoneOf>().disconnect(obs), ...);\n        }\n    };\n\n    template<typename... Matcher>\n    static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {\n        (matcher_handler<Matcher>::disconnect(obs, reg), ...);\n    }\n\n    template<typename... Matcher, std::size_t... Index>\n    void connect(basic_registry<Entity> &reg, std::index_sequence<Index...>) {\n        static_assert(sizeof...(Matcher) < std::numeric_limits<payload_type>::digits);\n        (matcher_handler<Matcher>::template connect<Index>(*this, reg), ...);\n        release = &basic_observer::disconnect<Matcher...>;\n    }\n\npublic:\n    /*! @brief Underlying entity identifier. */\n    using entity_type = Entity;\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Input iterator type. */\n    using iterator = typename sparse_set<Entity>::iterator;\n\n    /*! @brief Default constructor. */\n    basic_observer()\n        : target{}, release{}, view{}\n    {}\n\n    /*! @brief Default copy constructor, deleted on purpose. */\n    basic_observer(const basic_observer &) = delete;\n    /*! @brief Default move constructor, deleted on purpose. */\n    basic_observer(basic_observer &&) = delete;\n\n    /**\n     * @brief Creates an observer and connects it to a given registry.\n     * @tparam Matcher Types of matchers to use to initialize the observer.\n     * @param reg A valid reference to a registry.\n     */\n    template<typename... Matcher>\n    basic_observer(basic_registry<entity_type> &reg, basic_collector<Matcher...>)\n        : target{&reg},\n          release{},\n          view{}\n    {\n        connect<Matcher...>(reg, std::index_sequence_for<Matcher...>{});\n    }\n\n    /*! @brief Default destructor. */\n    ~basic_observer() = default;\n\n    /**\n     * @brief Default copy assignment operator, deleted on purpose.\n     * @return This observer.\n     */\n    basic_observer & operator=(const basic_observer &) = delete;\n\n    /**\n     * @brief Default move assignment operator, deleted on purpose.\n     * @return This observer.\n     */\n    basic_observer & operator=(basic_observer &&) = delete;\n\n    /**\n     * @brief Connects an observer to a given registry.\n     * @tparam Matcher Types of matchers to use to initialize the observer.\n     * @param reg A valid reference to a registry.\n     */\n    template<typename... Matcher>\n    void connect(basic_registry<entity_type> &reg, basic_collector<Matcher...>) {\n        disconnect();\n        connect<Matcher...>(reg, std::index_sequence_for<Matcher...>{});\n        target = &reg;\n        view.clear();\n    }\n\n    /*! @brief Disconnects an observer from the registry it keeps track of. */\n    void disconnect() {\n        if(release) {\n            release(*this, *target);\n            release = nullptr;\n        }\n    }\n\n    /**\n     * @brief Returns the number of elements in an observer.\n     * @return Number of elements.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return view.size();\n    }\n\n    /**\n     * @brief Checks whether an observer is empty.\n     * @return True if the observer is empty, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return view.empty();\n    }\n\n    /**\n     * @brief Direct access to the list of entities of the observer.\n     *\n     * The returned pointer is such that range `[data(), data() + size()]` is\n     * always a valid range, even if the container is empty.\n     *\n     * @note\n     * There are no guarantees on the order of the entities. Use `begin` and\n     * `end` if you want to iterate the observer in the expected order.\n     *\n     * @return A pointer to the array of entities.\n     */\n    const entity_type * data() const ENTT_NOEXCEPT {\n        return view.data();\n    }\n\n    /**\n     * @brief Returns an iterator to the first entity of the observer.\n     *\n     * The returned iterator points to the first entity of the observer. If the\n     * container is empty, the returned iterator will be equal to `end()`.\n     *\n     * @return An iterator to the first entity of the observer.\n     */\n    iterator begin() const ENTT_NOEXCEPT {\n        return view.sparse_set<entity_type>::begin();\n    }\n\n    /**\n     * @brief Returns an iterator that is past the last entity of the observer.\n     *\n     * The returned iterator points to the entity following the last entity of\n     * the observer. Attempting to dereference the returned iterator results in\n     * undefined behavior.\n     *\n     * @return An iterator to the entity following the last entity of the\n     * observer.\n     */\n    iterator end() const ENTT_NOEXCEPT {\n        return view.sparse_set<entity_type>::end();\n    }\n\n    /*! @brief Clears the underlying container. */\n    void clear() ENTT_NOEXCEPT {\n        view.clear();\n    }\n\n    /**\n     * @brief Iterates entities and applies the given function object to them.\n     *\n     * The function object is invoked for each entity.<br/>\n     * The signature of the function must be equivalent to the following form:\n     *\n     * @code{.cpp}\n     * void(const entity_type);\n     * @endcode\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) const {\n        static_assert(std::is_invocable_v<Func, entity_type>);\n\n        for(const auto entity: *this) {\n            func(entity);\n        }\n    }\n\n    /**\n     * @brief Iterates entities and applies the given function object to them,\n     * then clears the observer.\n     *\n     * @sa each\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template<typename Func>\n    void each(Func func) {\n        std::as_const(*this).each(std::move(func));\n        clear();\n    }\n\nprivate:\n    basic_registry<entity_type> *target;\n    void(* release)(basic_observer &, basic_registry<entity_type> &);\n    storage<entity_type, payload_type> view;\n};\n\n\n}\n\n\n#endif\n\n// #include \"entity/registry.hpp\"\n\n// #include \"entity/runtime_view.hpp\"\n\n// #include \"entity/snapshot.hpp\"\n\n// #include \"entity/sparse_set.hpp\"\n\n// #include \"entity/storage.hpp\"\n\n// #include \"entity/utility.hpp\"\n\n// #include \"entity/view.hpp\"\n\n// #include \"locator/locator.hpp\"\n#ifndef ENTT_LOCATOR_LOCATOR_HPP\n#define ENTT_LOCATOR_LOCATOR_HPP\n\n\n#include <memory>\n#include <utility>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Service locator, nothing more.\n *\n * A service locator can be used to do what it promises: locate services.<br/>\n * Usually service locators are tightly bound to the services they expose and\n * thus it's hard to define a general purpose class to do that. This template\n * based implementation tries to fill the gap and to get rid of the burden of\n * defining a different specific locator for each application.\n *\n * @tparam Service Type of service managed by the locator.\n */\ntemplate<typename Service>\nstruct service_locator {\n    /*! @brief Type of service offered. */\n    using service_type = Service;\n\n    /*! @brief Default constructor, deleted on purpose. */\n    service_locator() = delete;\n    /*! @brief Default destructor, deleted on purpose. */\n    ~service_locator() = delete;\n\n    /**\n     * @brief Tests if a valid service implementation is set.\n     * @return True if the service is set, false otherwise.\n     */\n    static bool empty() ENTT_NOEXCEPT {\n        return !static_cast<bool>(service);\n    }\n\n    /**\n     * @brief Returns a weak pointer to a service implementation, if any.\n     *\n     * Clients of a service shouldn't retain references to it. The recommended\n     * way is to retrieve the service implementation currently set each and\n     * every time the need of using it arises. Otherwise users can incur in\n     * unexpected behaviors.\n     *\n     * @return A reference to the service implementation currently set, if any.\n     */\n    static std::weak_ptr<Service> get() ENTT_NOEXCEPT {\n        return service;\n    }\n\n    /**\n     * @brief Returns a weak reference to a service implementation, if any.\n     *\n     * Clients of a service shouldn't retain references to it. The recommended\n     * way is to retrieve the service implementation currently set each and\n     * every time the need of using it arises. Otherwise users can incur in\n     * unexpected behaviors.\n     *\n     * @warning\n     * In case no service implementation has been set, a call to this function\n     * results in undefined behavior.\n     *\n     * @return A reference to the service implementation currently set, if any.\n     */\n    static Service & ref() ENTT_NOEXCEPT {\n        return *service;\n    }\n\n    /**\n     * @brief Sets or replaces a service.\n     * @tparam Impl Type of the new service to use.\n     * @tparam Args Types of arguments to use to construct the service.\n     * @param args Parameters to use to construct the service.\n     */\n    template<typename Impl = Service, typename... Args>\n    static void set(Args &&... args) {\n        service = std::make_shared<Impl>(std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Sets or replaces a service.\n     * @param ptr Service to use to replace the current one.\n     */\n    static void set(std::shared_ptr<Service> ptr) {\n        ENTT_ASSERT(static_cast<bool>(ptr));\n        service = std::move(ptr);\n    }\n\n    /**\n     * @brief Resets a service.\n     *\n     * The service is no longer valid after a reset.\n     */\n    static void reset() {\n        service.reset();\n    }\n\nprivate:\n    inline static std::shared_ptr<Service> service = nullptr;\n};\n\n\n}\n\n\n#endif\n\n// #include \"meta/factory.hpp\"\n#ifndef ENTT_META_FACTORY_HPP\n#define ENTT_META_FACTORY_HPP\n\n\n#include <array>\n#include <cstddef>\n#include <functional>\n#include <tuple>\n#include <type_traits>\n#include <utility>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n// #include \"../core/fwd.hpp\"\n#ifndef ENTT_CORE_FWD_HPP\n#define ENTT_CORE_FWD_HPP\n\n\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/*! @brief Alias declaration for type identifiers. */\nusing id_type = ENTT_ID_TYPE;\n\n\n}\n\n\n#endif\n\n// #include \"../core/type_info.hpp\"\n#ifndef ENTT_CORE_TYPE_INFO_HPP\n#define ENTT_CORE_TYPE_INFO_HPP\n\n\n// #include \"../config/config.h\"\n\n// #include \"../core/attribute.h\"\n#ifndef ENTT_CORE_ATTRIBUTE_H\n#define ENTT_CORE_ATTRIBUTE_H\n\n\n#ifndef ENTT_EXPORT\n#   if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER\n#       define ENTT_EXPORT __declspec(dllexport)\n#       define ENTT_IMPORT __declspec(dllimport)\n#       define ENTT_HIDDEN\n#   elif defined __GNUC__ && __GNUC__ >= 4\n#       define ENTT_EXPORT __attribute__((visibility(\"default\")))\n#       define ENTT_IMPORT __attribute__((visibility(\"default\")))\n#       define ENTT_HIDDEN __attribute__((visibility(\"hidden\")))\n#   else /* Unsupported compiler */\n#       define ENTT_EXPORT\n#       define ENTT_IMPORT\n#       define ENTT_HIDDEN\n#   endif\n#endif\n\n\n#ifndef ENTT_API\n#   if defined ENTT_API_EXPORT\n#       define ENTT_API ENTT_EXPORT\n#   elif defined ENTT_API_IMPORT\n#       define ENTT_API ENTT_IMPORT\n#   else /* No API */\n#       define ENTT_API\n#   endif\n#endif\n\n\n#endif\n\n// #include \"hashed_string.hpp\"\n#ifndef ENTT_CORE_HASHED_STRING_HPP\n#define ENTT_CORE_HASHED_STRING_HPP\n\n\n#include <cstddef>\n#include <cstdint>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename>\nstruct fnv1a_traits;\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint32_t> {\n    using type = std::uint32_t;\n    static constexpr std::uint32_t offset = 2166136261;\n    static constexpr std::uint32_t prime = 16777619;\n};\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint64_t> {\n    using type = std::uint64_t;\n    static constexpr std::uint64_t offset = 14695981039346656037ull;\n    static constexpr std::uint64_t prime = 1099511628211ull;\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Zero overhead unique identifier.\n *\n * A hashed string is a compile-time tool that allows users to use\n * human-readable identifers in the codebase while using their numeric\n * counterparts at runtime.<br/>\n * Because of that, a hashed string can also be used in constant expressions if\n * required.\n *\n * @tparam Char Character type.\n */\ntemplate<typename Char>\nclass basic_hashed_string {\n    using traits_type = internal::fnv1a_traits<id_type>;\n\n    struct const_wrapper {\n        // non-explicit constructor on purpose\n        constexpr const_wrapper(const Char *curr) ENTT_NOEXCEPT: str{curr} {}\n        const Char *str;\n    };\n\n    // Fowler–Noll–Vo hash function v. 1a - the good\n    static constexpr id_type helper(const Char *curr) ENTT_NOEXCEPT {\n        auto value = traits_type::offset;\n\n        while(*curr != 0) {\n            value = (value ^ static_cast<traits_type::type>(*(curr++))) * traits_type::prime;\n        }\n\n        return value;\n    }\n\npublic:\n    /*! @brief Character type. */\n    using value_type = Char;\n    /*! @brief Unsigned integer type. */\n    using hash_type = id_type;\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * const auto value = basic_hashed_string<char>::to_value(\"my.png\");\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param str Human-readable identifer.\n     * @return The numeric representation of the string.\n     */\n    template<std::size_t N>\n    static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT {\n        return helper(str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT {\n        return helper(wrapper.str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string view.\n     * @param str Human-readable identifer.\n     * @param size Length of the string to hash.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const value_type *str, std::size_t size) ENTT_NOEXCEPT {\n        id_type partial{traits_type::offset};\n        while(size--) { partial = (partial^(str++)[0])*traits_type::prime; }\n        return partial;\n    }\n\n    /*! @brief Constructs an empty hashed string. */\n    constexpr basic_hashed_string() ENTT_NOEXCEPT\n        : str{nullptr}, hash{}\n    {}\n\n    /**\n     * @brief Constructs a hashed string from an array of const characters.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * basic_hashed_string<char> hs{\"my.png\"};\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param curr Human-readable identifer.\n     */\n    template<std::size_t N>\n    constexpr basic_hashed_string(const value_type (&curr)[N]) ENTT_NOEXCEPT\n        : str{curr}, hash{helper(curr)}\n    {}\n\n    /**\n     * @brief Explicit constructor on purpose to avoid constructing a hashed\n     * string directly from a `const value_type *`.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     */\n    explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT\n        : str{wrapper.str}, hash{helper(wrapper.str)}\n    {}\n\n    /**\n     * @brief Returns the human-readable representation of a hashed string.\n     * @return The string used to initialize the instance.\n     */\n    constexpr const value_type * data() const ENTT_NOEXCEPT {\n        return str;\n    }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr hash_type value() const ENTT_NOEXCEPT {\n        return hash;\n    }\n\n    /*! @copydoc data */\n    constexpr operator const value_type *() const ENTT_NOEXCEPT { return data(); }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr operator hash_type() const ENTT_NOEXCEPT { return value(); }\n\n    /**\n     * @brief Compares two hashed strings.\n     * @param other Hashed string with which to compare.\n     * @return True if the two hashed strings are identical, false otherwise.\n     */\n    constexpr bool operator==(const basic_hashed_string &other) const ENTT_NOEXCEPT {\n        return hash == other.hash;\n    }\n\nprivate:\n    const value_type *str;\n    hash_type hash;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the character type of the hashed string directly from a\n * human-readable identifer provided to the constructor.\n *\n * @tparam Char Character type.\n * @tparam N Number of characters of the identifier.\n * @param str Human-readable identifer.\n */\ntemplate<typename Char, std::size_t N>\nbasic_hashed_string(const Char (&str)[N]) ENTT_NOEXCEPT\n-> basic_hashed_string<Char>;\n\n\n/**\n * @brief Compares two hashed strings.\n * @tparam Char Character type.\n * @param lhs A valid hashed string.\n * @param rhs A valid hashed string.\n * @return True if the two hashed strings are identical, false otherwise.\n */\ntemplate<typename Char>\nconstexpr bool operator!=(const basic_hashed_string<Char> &lhs, const basic_hashed_string<Char> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_string = basic_hashed_string<char>;\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_wstring = basic_hashed_string<wchar_t>;\n\n\n}\n\n\n/**\n * @brief User defined literal for hashed strings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed string.\n */\nconstexpr entt::hashed_string operator\"\" ENTT_HS_SUFFIX(const char *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_string{str};\n}\n\n\n/**\n * @brief User defined literal for hashed wstrings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed wstring.\n */\nconstexpr entt::hashed_wstring operator\"\" ENTT_HWS_SUFFIX(const wchar_t *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_wstring{str};\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\nstruct ENTT_API type_index {\n    static id_type next() ENTT_NOEXCEPT {\n        static ENTT_MAYBE_ATOMIC(id_type) value{};\n        return value++;\n    }\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Type index.\n * @tparam Type Type for which to generate a sequential identifier.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_index {\n    /**\n     * @brief Returns the sequential identifier of a given type.\n     * @return The sequential identifier of a given type.\n     */\n    static id_type value() ENTT_NOEXCEPT {\n        static const id_type value = internal::type_index::next();\n        return value;\n    }\n};\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * indexable, false otherwise.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename, typename = void>\nstruct has_type_index: std::false_type {};\n\n\n/*! @brief has_type_index */\ntemplate<typename Type>\nstruct has_type_index<Type, std::void_t<decltype(type_index<Type>::value())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename Type>\ninline constexpr bool has_type_index_v = has_type_index<Type>::value;\n\n\n/**\n * @brief Type info.\n * @tparam Type Type for which to generate information.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_info {\n    /**\n     * @brief Returns the numeric representation of a given type.\n     * @return The numeric representation of the given type.\n     */\n#if defined ENTT_PRETTY_FUNCTION\n    static ENTT_PRETTY_FUNCTION_CONSTEXPR() id_type id() ENTT_NOEXCEPT {\n        ENTT_PRETTY_FUNCTION_CONSTEXPR(static const) auto value = entt::hashed_string::value(ENTT_PRETTY_FUNCTION);\n        return value;\n    }\n#else\n    static id_type id() ENTT_NOEXCEPT {\n        return type_index<Type>::value();\n    }\n#endif\n};\n\n\n}\n\n\n#endif\n\n// #include \"../core/type_traits.hpp\"\n#ifndef ENTT_CORE_TYPE_TRAITS_HPP\n#define ENTT_CORE_TYPE_TRAITS_HPP\n\n\n#include <cstddef>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"hashed_string.hpp\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Wraps a static constant.\n * @tparam Value A static constant.\n */\ntemplate<auto Value>\nusing integral_constant = std::integral_constant<decltype(Value), Value>;\n\n\n/**\n * @brief Alias template to ease the creation of named values.\n * @tparam Value A constant value at least convertible to `id_type`.\n */\ntemplate<id_type Value>\nusing tag = integral_constant<Value>;\n\n\n/**\n * @brief Utility class to disambiguate overloaded functions.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\nstruct choice_t\n        // Unfortunately, doxygen cannot parse such a construct.\n        /*! @cond TURN_OFF_DOXYGEN */\n        : choice_t<N-1>\n        /*! @endcond TURN_OFF_DOXYGEN */\n{};\n\n\n/*! @copybrief choice_t */\ntemplate<>\nstruct choice_t<0> {};\n\n\n/**\n * @brief Variable template for the choice trick.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\ninline constexpr choice_t<N> choice{};\n\n\n/*! @brief A class to use to push around lists of types, nothing more. */\ntemplate<typename...>\nstruct type_list {};\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_size;\n\n\n/**\n * @brief Compile-time number of elements in a type list.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_size<type_list<Type...>>\n        : std::integral_constant<std::size_t, sizeof...(Type)>\n{};\n\n\n/**\n * @brief Helper variable template.\n * @tparam List Type list.\n */\ntemplate<class List>\ninline constexpr auto type_list_size_v = type_list_size<List>::value;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename...>\nstruct type_list_cat;\n\n\n/*! @brief Concatenates multiple type lists. */\ntemplate<>\nstruct type_list_cat<> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the first type list.\n * @tparam Other Types provided by the second type list.\n * @tparam List Other type lists, if any.\n */\ntemplate<typename... Type, typename... Other, typename... List>\nstruct type_list_cat<type_list<Type...>, type_list<Other...>, List...> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = typename type_list_cat<type_list<Type..., Other...>, List...>::type;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_cat<type_list<Type...>> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<Type...>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam List Type lists to concatenate.\n */\ntemplate<typename... List>\nusing type_list_cat_t = typename type_list_cat<List...>::type;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_unique;\n\n\n/**\n * @brief Removes duplicates types from a type list.\n * @tparam Type One of the types provided by the given type list.\n * @tparam Other The other types provided by the given type list.\n */\ntemplate<typename Type, typename... Other>\nstruct type_list_unique<type_list<Type, Other...>> {\n    /*! @brief A type list without duplicate types. */\n    using type = std::conditional_t<\n        std::disjunction_v<std::is_same<Type, Other>...>,\n        typename type_list_unique<type_list<Other...>>::type,\n        type_list_cat_t<type_list<Type>, typename type_list_unique<type_list<Other...>>::type>\n    >;\n};\n\n\n/*! @brief Removes duplicates types from a type list. */\ntemplate<>\nstruct type_list_unique<type_list<>> {\n    /*! @brief A type list without duplicate types. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Type A type list.\n */\ntemplate<typename Type>\nusing type_list_unique_t = typename type_list_unique<Type>::type;\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * equality comparable, false otherwise.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<typename Type, typename = std::void_t<>>\nstruct is_equality_comparable: std::false_type {};\n\n\n/*! @copydoc is_equality_comparable */\ntemplate<typename Type>\nstruct is_equality_comparable<Type, std::void_t<decltype(std::declval<Type>() == std::declval<Type>())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<class Type>\ninline constexpr auto is_equality_comparable_v = is_equality_comparable<Type>::value;\n\n\n/**\n * @brief Extracts the class of a non-static member object or function.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nclass member_class {\n    static_assert(std::is_member_pointer_v<Member>);\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...));\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...) const);\n\n    template<typename Class, typename Type>\n    static Class * clazz(Type Class:: *);\n\npublic:\n    /*! @brief The class of the given non-static member object or function. */\n    using type = std::remove_pointer_t<decltype(clazz(std::declval<Member>()))>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nusing member_class_t = typename member_class<Member>::type;\n\n\n}\n\n\n/**\n * @brief Defines an enum class to use for opaque identifiers and a dedicate\n * `to_integer` function to convert the identifiers to their underlying type.\n * @param clazz The name to use for the enum class.\n * @param type The underlying type for the enum class.\n */\n#define ENTT_OPAQUE_TYPE(clazz, type)\\\n    enum class clazz: type {};\\\n    constexpr auto to_integral(const clazz id) ENTT_NOEXCEPT {\\\n        return static_cast<std::underlying_type_t<clazz>>(id);\\\n    }\\\n    static_assert(true)\n\n\n#endif\n\n// #include \"../core/utility.hpp\"\n#ifndef ENTT_CORE_UTILITY_HPP\n#define ENTT_CORE_UTILITY_HPP\n\n\n#include <utility>\n// #include \"../config/config.h\"\n\n\n\nnamespace entt {\n\n\n/*! @brief Identity function object (waiting for C++20). */\nstruct identity {\n    /**\n     * @brief Returns its argument unchanged.\n     * @tparam Type Type of the argument.\n     * @param value The actual argument.\n     * @return The submitted value as-is.\n     */\n    template<class Type>\n    constexpr Type && operator()(Type &&value) const ENTT_NOEXCEPT {\n        return std::forward<Type>(value);\n    }\n};\n\n\n/**\n * @brief Constant utility to disambiguate overloaded members of a class.\n * @tparam Type Type of the desired overload.\n * @tparam Class Type of class to which the member belongs.\n * @param member A valid pointer to a member.\n * @return Pointer to the member.\n */\ntemplate<typename Type, typename Class>\nconstexpr auto overload(Type Class:: *member) ENTT_NOEXCEPT { return member; }\n\n\n/**\n * @brief Constant utility to disambiguate overloaded functions.\n * @tparam Func Function type of the desired overload.\n * @param func A valid pointer to a function.\n * @return Pointer to the function.\n */\ntemplate<typename Func>\nconstexpr auto overload(Func *func) ENTT_NOEXCEPT { return func; }\n\n\n/**\n * @brief Helper type for visitors.\n * @tparam Func Types of function objects.\n */\ntemplate<class... Func>\nstruct overloaded: Func... {\n    using Func::operator()...;\n};\n\n\n/**\n * @brief Deduction guide.\n * @tparam Func Types of function objects.\n */\ntemplate<class... Func>\noverloaded(Func...) -> overloaded<Func...>;\n\n\n/**\n * @brief Basic implementation of a y-combinator.\n * @tparam Func Type of a potentially recursive function.\n */\ntemplate<class Func>\nstruct y_combinator {\n    /**\n     * @brief Constructs a y-combinator from a given function.\n     * @param recursive A potentially recursive function.\n     */\n    y_combinator(Func recursive):\n        func{std::move(recursive)}\n    {}\n\n    /**\n     * @brief Invokes a y-combinator and therefore its underlying function.\n     * @tparam Args Types of arguments to use to invoke the underlying function.\n     * @param args Parameters to use to invoke the underlying function.\n     * @return Return value of the underlying function, if any.\n     */\n    template <class... Args>\n    decltype(auto) operator()(Args &&... args) const {\n        return func(*this, std::forward<Args>(args)...);\n    }\n\n    /*! @copydoc operator()() */\n    template <class... Args>\n    decltype(auto) operator()(Args &&... args) {\n        return func(*this, std::forward<Args>(args)...);\n    }\n\nprivate:\n    Func func;\n};\n\n\n}\n\n\n#endif\n\n// #include \"meta.hpp\"\n#ifndef ENTT_META_META_HPP\n#define ENTT_META_META_HPP\n\n\n#include <cstddef>\n#include <functional>\n#include <type_traits>\n#include <utility>\n// #include \"../config/config.h\"\n\n// #include \"../core/fwd.hpp\"\n\n// #include \"../core/type_info.hpp\"\n\n// #include \"../core/type_traits.hpp\"\n\n\n\nnamespace entt {\n\n\nclass meta_any;\nclass meta_type;\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\nstruct meta_type_node;\n\n\nstruct meta_prop_node {\n    meta_prop_node * next;\n    meta_any(* const key)();\n    meta_any(* const value)();\n};\n\n\nstruct meta_base_node {\n    meta_type_node * const parent;\n    meta_base_node * next;\n    meta_type_node *(* const type)() ENTT_NOEXCEPT;\n    void *(* const cast)(void *) ENTT_NOEXCEPT;\n};\n\n\nstruct meta_conv_node {\n    meta_type_node * const parent;\n    meta_conv_node * next;\n    meta_type_node *(* const type)() ENTT_NOEXCEPT;\n    meta_any(* const conv)(const void *);\n};\n\n\nstruct meta_ctor_node {\n    using size_type = std::size_t;\n    meta_type_node * const parent;\n    meta_ctor_node * next;\n    meta_prop_node * prop;\n    const size_type size;\n    meta_type_node *(* const arg)(size_type) ENTT_NOEXCEPT;\n    meta_any(* const invoke)(meta_any * const);\n};\n\n\nstruct meta_dtor_node {\n    meta_type_node * const parent;\n    void(* const invoke)(void *);\n};\n\n\nstruct meta_data_node {\n    id_type id;\n    meta_type_node * const parent;\n    meta_data_node * next;\n    meta_prop_node * prop;\n    const bool is_const;\n    const bool is_static;\n    meta_type_node *(* const type)() ENTT_NOEXCEPT;\n    bool(* const set)(meta_any, meta_any, meta_any);\n    meta_any(* const get)(meta_any, meta_any);\n};\n\n\nstruct meta_func_node {\n    using size_type = std::size_t;\n    id_type id;\n    meta_type_node * const parent;\n    meta_func_node * next;\n    meta_prop_node * prop;\n    const size_type size;\n    const bool is_const;\n    const bool is_static;\n    meta_type_node *(* const ret)() ENTT_NOEXCEPT;\n    meta_type_node *(* const arg)(size_type) ENTT_NOEXCEPT;\n    meta_any(* const invoke)(meta_any, meta_any *);\n};\n\n\nstruct meta_type_node {\n    using size_type = std::size_t;\n    const id_type type_id;\n    id_type id;\n    meta_type_node * next;\n    meta_prop_node * prop;\n    const bool is_void;\n    const bool is_integral;\n    const bool is_floating_point;\n    const bool is_array;\n    const bool is_enum;\n    const bool is_union;\n    const bool is_class;\n    const bool is_pointer;\n    const bool is_function_pointer;\n    const bool is_member_object_pointer;\n    const bool is_member_function_pointer;\n    const size_type extent;\n    bool(* const compare)(const void *, const void *);\n    meta_type_node *(* const remove_pointer)() ENTT_NOEXCEPT;\n    meta_type_node *(* const remove_extent)() ENTT_NOEXCEPT;\n    meta_base_node *base{nullptr};\n    meta_conv_node *conv{nullptr};\n    meta_ctor_node *ctor{nullptr};\n    meta_dtor_node *dtor{nullptr};\n    meta_data_node *data{nullptr};\n    meta_func_node *func{nullptr};\n};\n\n\ntemplate<typename Type, typename Op, typename Node>\nvoid visit(Op &op, Node *node) {\n    while(node) {\n        op(Type{node});\n        node = node->next;\n    }\n}\n\n\ntemplate<auto Member, typename Type, typename Op>\nvoid visit(Op &op, const internal::meta_type_node *node) {\n    if(node) {\n        internal::visit<Type>(op, node->*Member);\n        auto *next = node->base;\n\n        while(next) {\n            visit<Member, Type>(op, next->type());\n            next = next->next;\n        }\n    }\n}\n\n\ntemplate<typename Op, typename Node>\nauto find_if(const Op &op, Node *node) {\n    while(node && !op(node)) {\n        node = node->next;\n    }\n\n    return node;\n}\n\n\ntemplate<auto Member, typename Op>\nauto find_if(const Op &op, const meta_type_node *node)\n-> decltype(find_if(op, node->*Member)) {\n    decltype(find_if(op, node->*Member)) ret = nullptr;\n\n    if(node) {\n        ret = find_if(op, node->*Member);\n        auto *next = node->base;\n\n        while(next && !ret) {\n            ret = find_if<Member>(op, next->type());\n            next = next->next;\n        }\n    }\n\n    return ret;\n}\n\n\ntemplate<typename Type>\nbool compare(const void *lhs, const void *rhs) {\n    if constexpr(!std::is_function_v<Type> && is_equality_comparable_v<Type>) {\n        return *static_cast<const Type *>(lhs) == *static_cast<const Type *>(rhs);\n    } else {\n        return lhs == rhs;\n    }\n}\n\n\nstruct ENTT_API meta_context {\n    inline static meta_type_node *local = nullptr;\n    inline static meta_type_node **global = &local;\n\n    static void detach(const meta_type_node *node) ENTT_NOEXCEPT {\n        auto **it = global;\n\n        while(*it && *it != node) {\n            it = &(*it)->next;\n        }\n\n        if(*it) {\n            *it = (*it)->next;\n        }\n    }\n};\n\n\ntemplate<typename Type>\nstruct ENTT_API meta_node {\n    static_assert(std::is_same_v<Type, std::remove_cv_t<std::remove_reference_t<Type>>>);\n\n    static meta_type_node * resolve() ENTT_NOEXCEPT {\n        static meta_type_node node{\n            type_info<Type>::id(),\n            {},\n            nullptr,\n            nullptr,\n            std::is_void_v<Type>,\n            std::is_integral_v<Type>,\n            std::is_floating_point_v<Type>,\n            std::is_array_v<Type>,\n            std::is_enum_v<Type>,\n            std::is_union_v<Type>,\n            std::is_class_v<Type>,\n            std::is_pointer_v<Type>,\n            std::is_pointer_v<Type> && std::is_function_v<std::remove_pointer_t<Type>>,\n            std::is_member_object_pointer_v<Type>,\n            std::is_member_function_pointer_v<Type>,\n            std::extent_v<Type>,\n            &compare<Type>, // workaround for an issue with VS2017\n            &meta_node<std::remove_const_t<std::remove_pointer_t<Type>>>::resolve,\n            &meta_node<std::remove_const_t<std::remove_extent_t<Type>>>::resolve\n        };\n\n        return &node;\n    }\n};\n\n\ntemplate<typename... Type>\nstruct meta_info: meta_node<std::remove_cv_t<std::remove_reference_t<Type>>...> {};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/*! @brief Opaque container for a meta context. */\nstruct meta_ctx {\n    /**\n     * @brief Binds the meta system to the given context.\n     * @param other A valid context to which to bind.\n     */\n    static void bind(meta_ctx other) ENTT_NOEXCEPT {\n        internal::meta_context::global = other.ctx;\n    }\n\nprivate:\n    internal::meta_type_node **ctx{&internal::meta_context::local};\n};\n\n\n/**\n * @brief Opaque container for values of any type.\n *\n * This class uses a technique called small buffer optimization (SBO) to get rid\n * of memory allocations if possible. This should improve overall performance.\n */\nclass meta_any {\n    using storage_type = std::aligned_storage_t<sizeof(void *), alignof(void *)>;\n    using copy_fn_type = void(meta_any &, const meta_any &);\n    using steal_fn_type = void(meta_any &, meta_any &);\n    using destroy_fn_type = void(meta_any &);\n\n    template<typename Type, typename = std::void_t<>>\n    struct type_traits {\n        template<typename... Args>\n        static void instance(meta_any &any, Args &&... args) {\n            any.instance = new Type{std::forward<Args>(args)...};\n            new (&any.storage) Type *{static_cast<Type *>(any.instance)};\n        }\n\n        static void destroy(meta_any &any) {\n            const auto * const node = internal::meta_info<Type>::resolve();\n            if(node->dtor) { node->dtor->invoke(any.instance); }\n            delete static_cast<Type *>(any.instance);\n        }\n\n        static void copy(meta_any &to, const meta_any &from) {\n            auto *instance = new Type{*static_cast<const Type *>(from.instance)};\n            new (&to.storage) Type *{instance};\n            to.instance = instance;\n        }\n\n        static void steal(meta_any &to, meta_any &from) {\n            new (&to.storage) Type *{static_cast<Type *>(from.instance)};\n            to.instance = from.instance;\n        }\n    };\n\n    template<typename Type>\n    struct type_traits<Type, std::enable_if_t<sizeof(Type) <= sizeof(void *) && std::is_nothrow_move_constructible_v<Type>>> {\n        template<typename... Args>\n        static void instance(meta_any &any, Args &&... args) {\n            any.instance = new (&any.storage) Type{std::forward<Args>(args)...};\n        }\n\n        static void destroy(meta_any &any) {\n            const auto * const node = internal::meta_info<Type>::resolve();\n            if(node->dtor) { node->dtor->invoke(any.instance); }\n            static_cast<Type *>(any.instance)->~Type();\n        }\n\n        static void copy(meta_any &to, const meta_any &from) {\n            to.instance = new (&to.storage) Type{*static_cast<const Type *>(from.instance)};\n        }\n\n        static void steal(meta_any &to, meta_any &from) {\n            to.instance = new (&to.storage) Type{std::move(*static_cast<Type *>(from.instance))};\n            destroy(from);\n        }\n    };\n\n    meta_any(const internal::meta_type_node *curr, void *ref) ENTT_NOEXCEPT\n        : meta_any{}\n    {\n        node = curr;\n        instance = ref;\n    }\n\npublic:\n    /*! @brief Default constructor. */\n    meta_any() ENTT_NOEXCEPT\n        : storage{},\n          instance{},\n          node{},\n          destroy_fn{},\n          copy_fn{},\n          steal_fn{}\n    {}\n\n    /**\n     * @brief Constructs a meta any by directly initializing the new object.\n     * @tparam Type Type of object to use to initialize the container.\n     * @tparam Args Types of arguments to use to construct the new instance.\n     * @param args Parameters to use to construct the instance.\n     */\n    template<typename Type, typename... Args>\n    explicit meta_any(std::in_place_type_t<Type>, [[maybe_unused]] Args &&... args)\n        : meta_any{}\n    {\n        node = internal::meta_info<Type>::resolve();\n\n        if constexpr(!std::is_void_v<Type>) {\n            using traits_type = type_traits<std::remove_cv_t<std::remove_reference_t<Type>>>;\n            traits_type::instance(*this, std::forward<Args>(args)...);\n            destroy_fn = &traits_type::destroy;\n            copy_fn = &traits_type::copy;\n            steal_fn = &traits_type::steal;\n        }\n    }\n\n    /**\n     * @brief Constructs a meta any that holds an unmanaged object.\n     * @tparam Type Type of object to use to initialize the container.\n     * @param value An instance of an object to use to initialize the container.\n     */\n    template<typename Type>\n    meta_any(std::reference_wrapper<Type> value)\n        : meta_any{internal::meta_info<Type>::resolve(), &value.get()}\n    {}\n\n    /**\n     * @brief Constructs a meta any from a given value.\n     * @tparam Type Type of object to use to initialize the container.\n     * @param value An instance of an object to use to initialize the container.\n     */\n    template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>>\n    meta_any(Type &&value)\n        : meta_any{std::in_place_type<std::remove_cv_t<std::remove_reference_t<Type>>>, std::forward<Type>(value)}\n    {}\n\n    /**\n     * @brief Copy constructor.\n     * @param other The instance to copy from.\n     */\n    meta_any(const meta_any &other)\n        : meta_any{}\n    {\n        node = other.node;\n        (other.copy_fn ? other.copy_fn : [](meta_any &to, const meta_any &from) { to.instance = from.instance; })(*this, other);\n        destroy_fn = other.destroy_fn;\n        copy_fn = other.copy_fn;\n        steal_fn = other.steal_fn;\n    }\n\n    /**\n     * @brief Move constructor.\n     *\n     * After move construction, instances that have been moved from are placed\n     * in a valid but unspecified state.\n     *\n     * @param other The instance to move from.\n     */\n    meta_any(meta_any &&other)\n        : meta_any{}\n    {\n        swap(*this, other);\n    }\n\n    /*! @brief Frees the internal storage, whatever it means. */\n    ~meta_any() {\n        if(destroy_fn) {\n            destroy_fn(*this);\n        }\n    }\n\n    /**\n     * @brief Assignment operator.\n     * @tparam Type Type of object to use to initialize the container.\n     * @param value An instance of an object to use to initialize the container.\n     * @return This meta any object.\n     */\n    template<typename Type>\n    meta_any & operator=(Type &&value) {\n        return (*this = meta_any{std::forward<Type>(value)});\n    }\n\n    /**\n     * @brief Assignment operator.\n     * @param other The instance to assign from.\n     * @return This meta any object.\n     */\n    meta_any & operator=(meta_any other) {\n        swap(other, *this);\n        return *this;\n    }\n\n    /**\n     * @brief Returns the meta type of the underlying object.\n     * @return The meta type of the underlying object, if any.\n     */\n    inline meta_type type() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Returns an opaque pointer to the contained instance.\n     * @return An opaque pointer the contained instance, if any.\n     */\n    const void * data() const ENTT_NOEXCEPT {\n        return instance;\n    }\n\n    /*! @copydoc data */\n    void * data() ENTT_NOEXCEPT {\n        return const_cast<void *>(std::as_const(*this).data());\n    }\n\n    /**\n     * @brief Tries to cast an instance to a given type.\n     * @tparam Type Type to which to cast the instance.\n     * @return A (possibly null) pointer to the contained instance.\n     */\n    template<typename Type>\n    const Type * try_cast() const {\n        void *ret = nullptr;\n\n        if(const auto type_id = internal::meta_info<Type>::resolve()->type_id; node && node->type_id == type_id) {\n            ret = instance;\n        } else if(const auto *base = internal::find_if<&internal::meta_type_node::base>([type_id](const auto *curr) { return curr->type()->type_id == type_id; }, node); base) {\n            ret = base->cast(instance);\n        }\n\n        return static_cast<const Type *>(ret);\n    }\n\n    /*! @copydoc try_cast */\n    template<typename Type>\n    Type * try_cast() {\n        return const_cast<Type *>(std::as_const(*this).try_cast<Type>());\n    }\n\n    /**\n     * @brief Tries to cast an instance to a given type.\n     *\n     * The type of the instance must be such that the cast is possible.\n     *\n     * @warning\n     * Attempting to perform a cast that isn't viable results in undefined\n     * behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode in case\n     * the cast is not feasible.\n     *\n     * @tparam Type Type to which to cast the instance.\n     * @return A reference to the contained instance.\n     */\n    template<typename Type>\n    const Type & cast() const {\n        auto * const actual = try_cast<Type>();\n        ENTT_ASSERT(actual);\n        return *actual;\n    }\n\n    /*! @copydoc cast */\n    template<typename Type>\n    Type & cast() {\n        return const_cast<Type &>(std::as_const(*this).cast<Type>());\n    }\n\n    /**\n     * @brief Tries to convert an instance to a given type and returns it.\n     * @tparam Type Type to which to convert the instance.\n     * @return A valid meta any object if the conversion is possible, an invalid\n     * one otherwise.\n     */\n    template<typename Type>\n    meta_any convert() const {\n        meta_any any{};\n\n        if(const auto type_id = internal::meta_info<Type>::resolve()->type_id; node && node->type_id == type_id) {\n            any = *this;\n        } else if(const auto * const conv = internal::find_if<&internal::meta_type_node::conv>([type_id](const auto *curr) { return curr->type()->type_id == type_id; }, node); conv) {\n            any = conv->conv(instance);\n        }\n\n        return any;\n    }\n\n    /**\n     * @brief Tries to convert an instance to a given type.\n     * @tparam Type Type to which to convert the instance.\n     * @return True if the conversion is possible, false otherwise.\n     */\n    template<typename Type>\n    bool convert() {\n        bool valid = (node && node->type_id == internal::meta_info<Type>::resolve()->type_id);\n\n        if(!valid) {\n            if(auto any = std::as_const(*this).convert<Type>(); any) {\n                swap(any, *this);\n                valid = true;\n            }\n        }\n\n        return valid;\n    }\n\n    /**\n     * @brief Replaces the contained object by initializing a new instance\n     * directly.\n     * @tparam Type Type of object to use to initialize the container.\n     * @tparam Args Types of arguments to use to construct the new instance.\n     * @param args Parameters to use to construct the instance.\n     */\n    template<typename Type, typename... Args>\n    void emplace(Args &&... args) {\n        *this = meta_any{std::in_place_type_t<Type>{}, std::forward<Args>(args)...};\n    }\n\n    /**\n     * @brief Aliasing constructor.\n     * @return A meta any that shares a reference to an unmanaged object.\n     */\n    meta_any ref() const ENTT_NOEXCEPT {\n        return meta_any{node, instance};\n    }\n\n    /**\n     * @brief Indirection operator for aliasing construction.\n     * @return A meta any that shares a reference to an unmanaged object.\n     */\n    meta_any operator *() const ENTT_NOEXCEPT {\n        return ref();\n    }\n\n    /**\n     * @brief Returns false if a container is empty, true otherwise.\n     * @return False if the container is empty, true otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\n    /**\n     * @brief Checks if two containers differ in their content.\n     * @param other Container with which to compare.\n     * @return False if the two containers differ in their content, true\n     * otherwise.\n     */\n    bool operator==(const meta_any &other) const {\n        return (!node && !other.node) || (node && other.node && node->type_id == other.node->type_id && node->compare(instance, other.instance));\n    }\n\n    /**\n     * @brief Swaps two meta any objects.\n     * @param lhs A valid meta any object.\n     * @param rhs A valid meta any object.\n     */\n    friend void swap(meta_any &lhs, meta_any &rhs) {\n        if(lhs.steal_fn && rhs.steal_fn) {\n            meta_any buffer{};\n            lhs.steal_fn(buffer, lhs);\n            rhs.steal_fn(lhs, rhs);\n            lhs.steal_fn(rhs, buffer);\n        } else if(lhs.steal_fn) {\n            lhs.steal_fn(rhs, lhs);\n        } else if(rhs.steal_fn) {\n            rhs.steal_fn(lhs, rhs);\n        } else {\n            std::swap(lhs.instance, rhs.instance);\n        }\n\n        std::swap(lhs.node, rhs.node);\n        std::swap(lhs.destroy_fn, rhs.destroy_fn);\n        std::swap(lhs.copy_fn, rhs.copy_fn);\n        std::swap(lhs.steal_fn, rhs.steal_fn);\n    }\n\nprivate:\n    storage_type storage;\n    void *instance;\n    const internal::meta_type_node *node;\n    destroy_fn_type *destroy_fn;\n    copy_fn_type *copy_fn;\n    steal_fn_type *steal_fn;\n};\n\n\n/**\n * @brief Opaque pointers to instances of any type.\n *\n * A handle doesn't perform copies and isn't responsible for the contained\n * object. It doesn't prolong the lifetime of the pointed instance.<br/>\n * Handles are used to generate meta references to actual objects when needed.\n */\nstruct meta_handle {\n    /*! @brief Default constructor. */\n    meta_handle()\n        : any{}\n    {}\n\n    /**\n     * @brief Creates a handle that points to an unmanaged object.\n     * @tparam Type Type of object to use to initialize the container.\n     * @param value An instance of an object to use to initialize the container.\n     */\n    template<typename Type>\n    meta_handle(Type &&value) ENTT_NOEXCEPT\n        : meta_handle{}\n    {\n        if constexpr(std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>) {\n            any = *value;\n        } else {\n            static_assert(std::is_lvalue_reference_v<Type>);\n            any = std::ref(value);\n        }\n    }\n\n    /*! @copydoc meta_any::operator* */\n    meta_any operator *() const {\n        return any;\n    }\n\nprivate:\n    meta_any any;\n};\n\n\n/**\n * @brief Checks if two containers differ in their content.\n * @param lhs A meta any object, either empty or not.\n * @param rhs A meta any object, either empty or not.\n * @return True if the two containers differ in their content, false otherwise.\n */\ninline bool operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/*! @brief Opaque container for meta properties of any type. */\nstruct meta_prop {\n    /**\n     * @brief Constructs an instance from a given node.\n     * @param curr The underlying node with which to construct the instance.\n     */\n    meta_prop(const internal::meta_prop_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /**\n     * @brief Returns the stored key.\n     * @return A meta any containing the key stored with the given property.\n     */\n    meta_any key() const {\n        return node->key();\n    }\n\n    /**\n     * @brief Returns the stored value.\n     * @return A meta any containing the value stored with the given property.\n     */\n    meta_any value() const {\n        return node->value();\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\nprivate:\n    const internal::meta_prop_node *node;\n};\n\n\n/*! @brief Opaque container for meta base classes. */\nstruct meta_base {\n    /*! @copydoc meta_prop::meta_prop */\n    meta_base(const internal::meta_base_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /**\n     * @brief Returns the meta type to which a meta object belongs.\n     * @return The meta type to which the meta object belongs.\n     */\n    inline meta_type parent() const ENTT_NOEXCEPT;\n\n    /*! @copydoc meta_any::type */\n    inline meta_type type() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Casts an instance from a parent type to a base type.\n     * @param instance The instance to cast.\n     * @return An opaque pointer to the base type.\n     */\n    void * cast(void *instance) const ENTT_NOEXCEPT {\n        return node->cast(instance);\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\nprivate:\n    const internal::meta_base_node *node;\n};\n\n\n/*! @brief Opaque container for meta conversion functions. */\nstruct meta_conv {\n    /*! @copydoc meta_prop::meta_prop */\n    meta_conv(const internal::meta_conv_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /*! @copydoc meta_base::parent */\n    inline meta_type parent() const ENTT_NOEXCEPT;\n\n    /*! @copydoc meta_any::type */\n    inline meta_type type() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Converts an instance to a given type.\n     * @param instance The instance to convert.\n     * @return An opaque pointer to the instance to convert.\n     */\n    meta_any convert(const void *instance) const {\n        return node->conv(instance);\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\nprivate:\n    const internal::meta_conv_node *node;\n};\n\n\n/*! @brief Opaque container for meta constructors. */\nstruct meta_ctor {\n    /*! @brief Unsigned integer type. */\n    using size_type = typename internal::meta_ctor_node::size_type;\n\n    /*! @copydoc meta_prop::meta_prop */\n    meta_ctor(const internal::meta_ctor_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /*! @copydoc meta_base::parent */\n    inline meta_type parent() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Returns the number of arguments accepted by a meta constructor.\n     * @return The number of arguments accepted by the meta constructor.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return node->size;\n    }\n\n    /**\n     * @brief Returns the meta type of the i-th argument of a meta constructor.\n     * @param index The index of the argument of which to return the meta type.\n     * @return The meta type of the i-th argument of a meta constructor, if any.\n     */\n    meta_type arg(size_type index) const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Creates an instance of the underlying type, if possible.\n     *\n     * To create a valid instance, the parameters must be such that a cast or\n     * conversion to the required types is possible. Otherwise, an empty and\n     * thus invalid container is returned.\n     *\n     * @tparam Args Types of arguments to use to construct the instance.\n     * @param args Parameters to use to construct the instance.\n     * @return A meta any containing the new instance, if any.\n     */\n    template<typename... Args>\n    meta_any invoke([[maybe_unused]] Args &&... args) const {\n        if constexpr(sizeof...(Args) == 0) {\n            return sizeof...(Args) == size() ? node->invoke(nullptr) : meta_any{};\n        } else {\n            meta_any arguments[]{std::forward<Args>(args)...};\n            return sizeof...(Args) == size() ? node->invoke(arguments) : meta_any{};\n        }\n    }\n\n    /**\n     * @brief Iterates all the properties assigned to a meta constructor.\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>\n    prop(Op op) const {\n        internal::visit<meta_prop>(op, node->prop);\n    }\n\n    /**\n     * @brief Returns the property associated with a given key.\n     * @param key The key to use to search for a property.\n     * @return The property associated with the given key, if any.\n     */\n    meta_prop prop(meta_any key) const {\n        return internal::find_if([key = std::move(key)](const auto *curr) {\n            return curr->key() == key;\n        }, node->prop);\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\nprivate:\n    const internal::meta_ctor_node *node;\n};\n\n\n/*! @brief Opaque container for meta data. */\nstruct meta_data {\n    /*! @copydoc meta_prop::meta_prop */\n    meta_data(const internal::meta_data_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /*! @copydoc meta_type::id */\n    id_type id() const ENTT_NOEXCEPT {\n        return node->id;\n    }\n\n    /*! @copydoc id */\n    [[deprecated(\"use ::id instead\")]]\n    id_type alias() const ENTT_NOEXCEPT {\n        return id();\n    }\n\n    /*! @copydoc meta_base::parent */\n    inline meta_type parent() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Indicates whether a given meta data is constant or not.\n     * @return True if the meta data is constant, false otherwise.\n     */\n    bool is_const() const ENTT_NOEXCEPT {\n        return node->is_const;\n    }\n\n    /**\n     * @brief Indicates whether a given meta data is static or not.\n     * @return True if the meta data is static, false otherwise.\n     */\n    bool is_static() const ENTT_NOEXCEPT {\n        return node->is_static;\n    }\n\n    /*! @copydoc meta_any::type */\n    inline meta_type type() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Sets the value of the variable enclosed by a given meta type.\n     *\n     * It must be possible to cast the instance to the parent type of the meta\n     * data. Otherwise, invoking the setter results in an undefined\n     * behavior.<br/>\n     * The type of the value must be such that a cast or conversion to the type\n     * of the variable is possible. Otherwise, invoking the setter does nothing.\n     *\n     * @tparam Type Type of value to assign.\n     * @param instance An opaque instance of the underlying type.\n     * @param value Parameter to use to set the underlying variable.\n     * @return True in case of success, false otherwise.\n     */\n    template<typename Type>\n    bool set(meta_handle instance, Type &&value) const {\n        return node->set(*instance, {}, std::forward<Type>(value));\n    }\n\n    /**\n     * @brief Sets the i-th element of an array enclosed by a given meta type.\n     *\n     * It must be possible to cast the instance to the parent type of the meta\n     * data. Otherwise, invoking the setter results in an undefined\n     * behavior.<br/>\n     * The type of the value must be such that a cast or conversion to the array\n     * type is possible. Otherwise, invoking the setter does nothing.\n     *\n     * @tparam Type Type of value to assign.\n     * @param instance An opaque instance of the underlying type.\n     * @param index Position of the underlying element to set.\n     * @param value Parameter to use to set the underlying element.\n     * @return True in case of success, false otherwise.\n     */\n    template<typename Type>\n    bool set(meta_handle instance, std::size_t index, Type &&value) const {\n        ENTT_ASSERT(index < node->type()->extent);\n        return node->set(*instance, index, std::forward<Type>(value));\n    }\n\n    /**\n     * @brief Gets the value of the variable enclosed by a given meta type.\n     *\n     * It must be possible to cast the instance to the parent type of the meta\n     * data. Otherwise, invoking the getter results in an undefined behavior.\n     *\n     * @param instance An opaque instance of the underlying type.\n     * @return A meta any containing the value of the underlying variable.\n     */\n    meta_any get(meta_handle instance) const {\n        return node->get(*instance, {});\n    }\n\n    /**\n     * @brief Gets the i-th element of an array enclosed by a given meta type.\n     *\n     * It must be possible to cast the instance to the parent type of the meta\n     * data. Otherwise, invoking the getter results in an undefined behavior.\n     *\n     * @param instance An opaque instance of the underlying type.\n     * @param index Position of the underlying element to get.\n     * @return A meta any containing the value of the underlying element.\n     */\n    meta_any get(meta_handle instance, std::size_t index) const {\n        ENTT_ASSERT(index < node->type()->extent);\n        return node->get(*instance, index);\n    }\n\n    /**\n     * @brief Iterates all the properties assigned to a meta data.\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>\n    prop(Op op) const {\n        internal::visit<meta_prop>(op, node->prop);\n    }\n\n    /**\n     * @brief Returns the property associated with a given key.\n     * @param key The key to use to search for a property.\n     * @return The property associated with the given key, if any.\n     */\n    meta_prop prop(meta_any key) const {\n        return internal::find_if([key = std::move(key)](const auto *curr) {\n            return curr->key() == key;\n        }, node->prop);\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\nprivate:\n    const internal::meta_data_node *node;\n};\n\n\n/*! @brief Opaque container for meta functions. */\nstruct meta_func {\n    /*! @brief Unsigned integer type. */\n    using size_type = typename internal::meta_func_node::size_type;\n\n    /*! @copydoc meta_prop::meta_prop */\n    meta_func(const internal::meta_func_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /*! @copydoc meta_type::id */\n    id_type id() const ENTT_NOEXCEPT {\n        return node->id;\n    }\n\n    /*! @copydoc id */\n    [[deprecated(\"use ::id instead\")]]\n    id_type alias() const ENTT_NOEXCEPT {\n        return id();\n    }\n\n    /*! @copydoc meta_base::parent */\n    inline meta_type parent() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Returns the number of arguments accepted by a meta function.\n     * @return The number of arguments accepted by the meta function.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return node->size;\n    }\n\n    /**\n     * @brief Indicates whether a given meta function is constant or not.\n     * @return True if the meta function is constant, false otherwise.\n     */\n    bool is_const() const ENTT_NOEXCEPT {\n        return node->is_const;\n    }\n\n    /**\n     * @brief Indicates whether a given meta function is static or not.\n     * @return True if the meta function is static, false otherwise.\n     */\n    bool is_static() const ENTT_NOEXCEPT {\n        return node->is_static;\n    }\n\n    /**\n     * @brief Returns the meta type of the return type of a meta function.\n     * @return The meta type of the return type of the meta function.\n     */\n    inline meta_type ret() const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Returns the meta type of the i-th argument of a meta function.\n     * @param index The index of the argument of which to return the meta type.\n     * @return The meta type of the i-th argument of a meta function, if any.\n     */\n    inline meta_type arg(size_type index) const ENTT_NOEXCEPT;\n\n    /**\n     * @brief Invokes the underlying function, if possible.\n     *\n     * To invoke a meta function, the parameters must be such that a cast or\n     * conversion to the required types is possible. Otherwise, an empty and\n     * thus invalid container is returned.<br/>\n     * It must be possible to cast the instance to the parent type of the meta\n     * function. Otherwise, invoking the underlying function results in an\n     * undefined behavior.\n     *\n     * @tparam Args Types of arguments to use to invoke the function.\n     * @param instance An opaque instance of the underlying type.\n     * @param args Parameters to use to invoke the function.\n     * @return A meta any containing the returned value, if any.\n     */\n    template<typename... Args>\n    meta_any invoke(meta_handle instance, Args &&... args) const {\n        meta_any arguments[]{*instance, std::forward<Args>(args)...};\n        return sizeof...(Args) == size() ? node->invoke(arguments[0], &arguments[sizeof...(Args) != 0]) : meta_any{};\n    }\n\n    /**\n     * @brief Iterates all the properties assigned to a meta function.\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>\n    prop(Op op) const {\n        internal::visit<meta_prop>(op, node->prop);\n    }\n\n    /**\n     * @brief Returns the property associated with a given key.\n     * @param key The key to use to search for a property.\n     * @return The property associated with the given key, if any.\n     */\n    meta_prop prop(meta_any key) const {\n        return internal::find_if([key = std::move(key)](const auto *curr) {\n            return curr->key() == key;\n        }, node->prop);\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\nprivate:\n    const internal::meta_func_node *node;\n};\n\n\n/*! @brief Opaque container for meta types. */\nclass meta_type {\n    template<typename... Args, std::size_t... Indexes>\n    auto ctor(std::index_sequence<Indexes...>) const {\n        return internal::find_if([](const auto *candidate) {\n            return candidate->size == sizeof...(Args) && ([](auto *from, auto *to) {\n                return (from->type_id == to->type_id)\n                        || internal::find_if<&internal::meta_type_node::base>([to](const auto *curr) { return curr->type()->type_id == to->type_id; }, from)\n                        || internal::find_if<&internal::meta_type_node::conv>([to](const auto *curr) { return curr->type()->type_id == to->type_id; }, from);\n            }(internal::meta_info<Args>::resolve(), candidate->arg(Indexes)) && ...);\n        }, node->ctor);\n    }\n\npublic:\n    /*! @brief Unsigned integer type. */\n    using size_type = typename internal::meta_type_node::size_type;\n\n    /*! @copydoc meta_prop::meta_prop */\n    meta_type(const internal::meta_type_node *curr = nullptr) ENTT_NOEXCEPT\n        : node{curr}\n    {}\n\n    /**\n     * @brief Returns the type id of the underlying type.\n     * @return The type id of the underlying type.\n     */\n    id_type type_id() const ENTT_NOEXCEPT {\n        return node->type_id;\n    }\n\n    /**\n     * @brief Returns the identifier assigned to a given meta object.\n     * @return The identifier assigned to the meta object.\n     */\n    id_type id() const ENTT_NOEXCEPT {\n        return node->id;\n    }\n\n    /*! @copydoc id */\n    [[deprecated(\"use ::id instead\")]]\n    id_type alias() const ENTT_NOEXCEPT {\n        return id();\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to void or not.\n     * @return True if the underlying type is void, false otherwise.\n     */\n    bool is_void() const ENTT_NOEXCEPT {\n        return node->is_void;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to an integral type or\n     * not.\n     * @return True if the underlying type is an integral type, false otherwise.\n     */\n    bool is_integral() const ENTT_NOEXCEPT {\n        return node->is_integral;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to a floating-point\n     * type or not.\n     * @return True if the underlying type is a floating-point type, false\n     * otherwise.\n     */\n    bool is_floating_point() const ENTT_NOEXCEPT {\n        return node->is_floating_point;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to an array type or\n     * not.\n     * @return True if the underlying type is an array type, false otherwise.\n     */\n    bool is_array() const ENTT_NOEXCEPT {\n        return node->is_array;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to an enum or not.\n     * @return True if the underlying type is an enum, false otherwise.\n     */\n    bool is_enum() const ENTT_NOEXCEPT {\n        return node->is_enum;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to an union or not.\n     * @return True if the underlying type is an union, false otherwise.\n     */\n    bool is_union() const ENTT_NOEXCEPT {\n        return node->is_union;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to a class or not.\n     * @return True if the underlying type is a class, false otherwise.\n     */\n    bool is_class() const ENTT_NOEXCEPT {\n        return node->is_class;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to a pointer or not.\n     * @return True if the underlying type is a pointer, false otherwise.\n     */\n    bool is_pointer() const ENTT_NOEXCEPT {\n        return node->is_pointer;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to a function pointer\n     * or not.\n     * @return True if the underlying type is a function pointer, false\n     * otherwise.\n     */\n    bool is_function_pointer() const ENTT_NOEXCEPT {\n        return node->is_function_pointer;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to a pointer to data\n     * member or not.\n     * @return True if the underlying type is a pointer to data member, false\n     * otherwise.\n     */\n    bool is_member_object_pointer() const ENTT_NOEXCEPT {\n        return node->is_member_object_pointer;\n    }\n\n    /**\n     * @brief Indicates whether a given meta type refers to a pointer to member\n     * function or not.\n     * @return True if the underlying type is a pointer to member function,\n     * false otherwise.\n     */\n    bool is_member_function_pointer() const ENTT_NOEXCEPT {\n        return node->is_member_function_pointer;\n    }\n\n    /**\n     * @brief If a given meta type refers to an array type, provides the number\n     * of elements of the array.\n     * @return The number of elements of the array if the underlying type is an\n     * array type, 0 otherwise.\n     */\n    size_type extent() const ENTT_NOEXCEPT {\n        return node->extent;\n    }\n\n    /**\n     * @brief Provides the meta type for which the pointer is defined.\n     * @return The meta type for which the pointer is defined or this meta type\n     * if it doesn't refer to a pointer type.\n     */\n    meta_type remove_pointer() const ENTT_NOEXCEPT {\n        return node->remove_pointer();\n    }\n\n    /**\n     * @brief Provides the meta type for which the array is defined.\n     * @return The meta type for which the array is defined or this meta type\n     * if it doesn't refer to an array type.\n     */\n    meta_type remove_extent() const ENTT_NOEXCEPT {\n        return node->remove_extent();\n    }\n\n    /**\n     * @brief Iterates all the meta bases of a meta type.\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_base>, void>\n    base(Op op) const {\n        internal::visit<&internal::meta_type_node::base, meta_base>(op, node);\n    }\n\n    /**\n     * @brief Returns the meta base associated with a given identifier.\n     * @param id Unique identifier.\n     * @return The meta base associated with the given identifier, if any.\n     */\n    meta_base base(const id_type id) const {\n        return internal::find_if<&internal::meta_type_node::base>([id](const auto *curr) {\n            return curr->type()->id == id;\n        }, node);\n    }\n\n    /**\n     * @brief Iterates all the meta conversion functions of a meta type.\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    void conv(Op op) const {\n        internal::visit<&internal::meta_type_node::conv, meta_conv>(op, node);\n    }\n\n    /**\n     * @brief Returns the meta conversion function associated with a given type.\n     * @tparam Type The type to use to search for a meta conversion function.\n     * @return The meta conversion function associated with the given type, if\n     * any.\n     */\n    template<typename Type>\n    meta_conv conv() const {\n        return internal::find_if<&internal::meta_type_node::conv>([type_id = internal::meta_info<Type>::resolve()->type_id](const auto *curr) {\n            return curr->type()->type_id == type_id;\n        }, node);\n    }\n\n    /**\n     * @brief Iterates all the meta constructors of a meta type.\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    void ctor(Op op) const {\n        internal::visit<meta_ctor>(op, node->ctor);\n    }\n\n    /**\n     * @brief Returns the meta constructor that accepts a given list of types of\n     * arguments.\n     * @return The requested meta constructor, if any.\n     */\n    template<typename... Args>\n    meta_ctor ctor() const {\n        return ctor<Args...>(std::index_sequence_for<Args...>{});\n    }\n\n    /**\n     * @brief Iterates all the meta data of a meta type.\n     *\n     * The meta data of the base classes will also be returned, if any.\n     *\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_data>, void>\n    data(Op op) const {\n        internal::visit<&internal::meta_type_node::data, meta_data>(op, node);\n    }\n\n    /**\n     * @brief Returns the meta data associated with a given identifier.\n     *\n     * The meta data of the base classes will also be visited, if any.\n     *\n     * @param id Unique identifier.\n     * @return The meta data associated with the given identifier, if any.\n     */\n    meta_data data(const id_type id) const {\n        return internal::find_if<&internal::meta_type_node::data>([id](const auto *curr) {\n            return curr->id == id;\n        }, node);\n    }\n\n    /**\n     * @brief Iterates all the meta functions of a meta type.\n     *\n     * The meta functions of the base classes will also be returned, if any.\n     *\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_func>, void>\n    func(Op op) const {\n        internal::visit<&internal::meta_type_node::func, meta_func>(op, node);\n    }\n\n    /**\n     * @brief Returns the meta function associated with a given identifier.\n     *\n     * The meta functions of the base classes will also be visited, if any.\n     *\n     * @param id Unique identifier.\n     * @return The meta function associated with the given identifier, if any.\n     */\n    meta_func func(const id_type id) const {\n        return internal::find_if<&internal::meta_type_node::func>([id](const auto *curr) {\n            return curr->id == id;\n        }, node);\n    }\n\n    /**\n     * @brief Creates an instance of the underlying type, if possible.\n     *\n     * To create a valid instance, the parameters must be such that a cast or\n     * conversion to the required types is possible. Otherwise, an empty and\n     * thus invalid container is returned.\n     *\n     * @tparam Args Types of arguments to use to construct the instance.\n     * @param args Parameters to use to construct the instance.\n     * @return A meta any containing the new instance, if any.\n     */\n    template<typename... Args>\n    meta_any construct(Args &&... args) const {\n        auto construct_if = [this](meta_any *params) {\n            meta_any any{};\n\n            internal::find_if<&internal::meta_type_node::ctor>([params, &any](const auto *curr) {\n                return (curr->size == sizeof...(args)) && (any = curr->invoke(params));\n            }, node);\n\n            return any;\n        };\n\n        if constexpr(sizeof...(Args) == 0) {\n            return construct_if(nullptr);\n        } else {\n            meta_any arguments[]{std::forward<Args>(args)...};\n            return construct_if(arguments);\n        }\n    }\n\n    /**\n     * @brief Iterates all the properties assigned to a meta type.\n     *\n     * The properties of the base classes will also be returned, if any.\n     *\n     * @tparam Op Type of the function object to invoke.\n     * @param op A valid function object.\n     */\n    template<typename Op>\n    std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>\n    prop(Op op) const {\n        internal::visit<&internal::meta_type_node::prop, meta_prop>(op, node);\n    }\n\n    /**\n     * @brief Returns the property associated with a given key.\n     *\n     * The properties of the base classes will also be visited, if any.\n     *\n     * @param key The key to use to search for a property.\n     * @return The property associated with the given key, if any.\n     */\n    meta_prop prop(meta_any key) const {\n        return internal::find_if<&internal::meta_type_node::prop>([key = std::move(key)](const auto *curr) {\n            return curr->key() == key;\n        }, node);\n    }\n\n    /**\n     * @brief Returns true if a meta object is valid, false otherwise.\n     * @return True if the meta object is valid, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return !(node == nullptr);\n    }\n\n    /**\n     * @brief Checks if two meta objects refer to the same type.\n     * @param other The meta object with which to compare.\n     * @return True if the two meta objects refer to the same type, false\n     * otherwise.\n     */\n    bool operator==(const meta_type &other) const ENTT_NOEXCEPT {\n        return (!node && !other.node) || (node && other.node && node->type_id == other.node->type_id);\n    }\n\n    /*! @brief Removes a meta object from the list of searchable types. */\n    void detach() ENTT_NOEXCEPT {\n        internal::meta_context::detach(node);\n    }\n\nprivate:\n    const internal::meta_type_node *node;\n};\n\n\n/**\n * @brief Checks if two meta objects refer to the same type.\n * @param lhs A meta object, either valid or not.\n * @param rhs A meta object, either valid or not.\n * @return False if the two meta objects refer to the same node, true otherwise.\n */\ninline bool operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\ninline meta_type meta_any::type() const ENTT_NOEXCEPT {\n    return node;\n}\n\n\ninline meta_type meta_base::parent() const ENTT_NOEXCEPT {\n    return node->parent;\n}\n\n\ninline meta_type meta_base::type() const ENTT_NOEXCEPT {\n    return node->type();\n}\n\n\ninline meta_type meta_conv::parent() const ENTT_NOEXCEPT {\n    return node->parent;\n}\n\n\ninline meta_type meta_conv::type() const ENTT_NOEXCEPT {\n    return node->type();\n}\n\n\ninline meta_type meta_ctor::parent() const ENTT_NOEXCEPT {\n    return node->parent;\n}\n\n\ninline meta_type meta_ctor::arg(size_type index) const ENTT_NOEXCEPT {\n    return index < size() ? node->arg(index) : nullptr;\n}\n\n\ninline meta_type meta_data::parent() const ENTT_NOEXCEPT {\n    return node->parent;\n}\n\n\ninline meta_type meta_data::type() const ENTT_NOEXCEPT {\n    return node->type();\n}\n\n\ninline meta_type meta_func::parent() const ENTT_NOEXCEPT {\n    return node->parent;\n}\n\n\ninline meta_type meta_func::ret() const ENTT_NOEXCEPT {\n    return node->ret();\n}\n\n\ninline meta_type meta_func::arg(size_type index) const ENTT_NOEXCEPT {\n    return index < size() ? node->arg(index) : nullptr;\n}\n\n\n}\n\n\n#endif\n\n// #include \"policy.hpp\"\n#ifndef ENTT_META_POLICY_HPP\n#define ENTT_META_POLICY_HPP\n\n\nnamespace entt {\n\n\n/*! @brief Empty class type used to request the _as ref_ policy. */\nstruct as_ref_t {};\n\n\n/*! @brief Disambiguation tag. */\ninline constexpr as_ref_t as_ref;\n\n\n/*! @copydoc as_ref_t */\nusing as_alias_t [[deprecated(\"use as_ref_t instead\")]] = as_ref_t;\n\n\n/*! @copydoc as_ref */\n[[deprecated(\"use as_ref instead\")]]\ninline constexpr as_ref_t as_alias;\n\n\n/*! @brief Empty class type used to request the _as-is_ policy. */\nstruct as_is_t {};\n\n\n/*! @brief Empty class type used to request the _as void_ policy. */\nstruct as_void_t {};\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename>\nstruct meta_function_helper;\n\n\ntemplate<typename Ret, typename... Args>\nstruct meta_function_helper<Ret(Args...)> {\n    using return_type = std::remove_cv_t<std::remove_reference_t<Ret>>;\n    using args_type = std::tuple<std::remove_cv_t<std::remove_reference_t<Args>>...>;\n\n    static constexpr std::index_sequence_for<Args...> index_sequence{};\n    static constexpr auto is_const = false;\n\n    static auto arg(typename internal::meta_func_node::size_type index) ENTT_NOEXCEPT {\n        return std::array<meta_type_node *, sizeof...(Args)>{{meta_info<Args>::resolve()...}}[index];\n    }\n};\n\n\ntemplate<typename Ret, typename... Args>\nstruct meta_function_helper<Ret(Args...) const>: meta_function_helper<Ret(Args...)> {\n    static constexpr auto is_const = true;\n};\n\n\ntemplate<typename Ret, typename... Args, typename Class>\nconstexpr meta_function_helper<Ret(Args...)>\nto_meta_function_helper(Ret(Class:: *)(Args...));\n\n\ntemplate<typename Ret, typename... Args, typename Class>\nconstexpr meta_function_helper<Ret(Args...) const>\nto_meta_function_helper(Ret(Class:: *)(Args...) const);\n\n\ntemplate<typename Ret, typename... Args>\nconstexpr meta_function_helper<Ret(Args...)>\nto_meta_function_helper(Ret(*)(Args...));\n\n\nconstexpr void to_meta_function_helper(...);\n\n\ntemplate<typename Candidate>\nusing meta_function_helper_t = decltype(to_meta_function_helper(std::declval<Candidate>()));\n\n\ntemplate<typename Type, typename... Args, std::size_t... Indexes>\nmeta_any construct(meta_any * const args, std::index_sequence<Indexes...>) {\n    [[maybe_unused]] auto direct = std::make_tuple((args+Indexes)->try_cast<Args>()...);\n    meta_any any{};\n\n    if(((std::get<Indexes>(direct) || (args+Indexes)->convert<Args>()) && ...)) {\n        any = Type{(std::get<Indexes>(direct) ? *std::get<Indexes>(direct) : (args+Indexes)->cast<Args>())...};\n    }\n\n    return any;\n}\n\n\ntemplate<bool Const, typename Type, auto Data>\nbool setter([[maybe_unused]] meta_any instance, [[maybe_unused]] meta_any index, [[maybe_unused]] meta_any value) {\n    bool accepted = false;\n\n    if constexpr(!Const) {\n        if constexpr(std::is_function_v<std::remove_reference_t<std::remove_pointer_t<decltype(Data)>>> || std::is_member_function_pointer_v<decltype(Data)>) {\n            using helper_type = meta_function_helper_t<decltype(Data)>;\n            using data_type = std::tuple_element_t<!std::is_member_function_pointer_v<decltype(Data)>, typename helper_type::args_type>;\n            static_assert(std::is_invocable_v<decltype(Data), Type &, data_type>);\n            auto * const clazz = instance.try_cast<Type>();\n            auto * const direct = value.try_cast<data_type>();\n\n            if(clazz && (direct || value.convert<data_type>())) {\n                std::invoke(Data, *clazz, direct ? *direct : value.cast<data_type>());\n                accepted = true;\n            }\n        } else if constexpr(std::is_member_object_pointer_v<decltype(Data)>) {\n            using data_type = std::remove_cv_t<std::remove_reference_t<decltype(std::declval<Type>().*Data)>>;\n            static_assert(std::is_invocable_v<decltype(Data), Type *>);\n            auto * const clazz = instance.try_cast<Type>();\n\n            if constexpr(std::is_array_v<data_type>) {\n                using underlying_type = std::remove_extent_t<data_type>;\n                auto * const direct = value.try_cast<underlying_type>();\n                auto * const idx = index.try_cast<std::size_t>();\n\n                if(clazz && idx && (direct || value.convert<underlying_type>())) {\n                    std::invoke(Data, clazz)[*idx] = direct ? *direct : value.cast<underlying_type>();\n                    accepted = true;\n                }\n            } else {\n                auto * const direct = value.try_cast<data_type>();\n\n                if(clazz && (direct || value.convert<data_type>())) {\n                    std::invoke(Data, clazz) = (direct ? *direct : value.cast<data_type>());\n                    accepted = true;\n                }\n            }\n        } else {\n            static_assert(std::is_pointer_v<decltype(Data)>);\n            using data_type = std::remove_cv_t<std::remove_reference_t<decltype(*Data)>>;\n\n            if constexpr(std::is_array_v<data_type>) {\n                using underlying_type = std::remove_extent_t<data_type>;\n                auto * const direct = value.try_cast<underlying_type>();\n                auto * const idx = index.try_cast<std::size_t>();\n\n                if(idx && (direct || value.convert<underlying_type>())) {\n                    (*Data)[*idx] = (direct ? *direct : value.cast<underlying_type>());\n                    accepted = true;\n                }\n            } else {\n                auto * const direct = value.try_cast<data_type>();\n\n                if(direct || value.convert<data_type>()) {\n                    *Data = (direct ? *direct : value.cast<data_type>());\n                    accepted = true;\n                }\n            }\n        }\n    }\n\n    return accepted;\n}\n\n\ntemplate<typename Type, auto Data, typename Policy>\nmeta_any getter([[maybe_unused]] meta_any instance, [[maybe_unused]] meta_any index) {\n    auto dispatch = [](auto &&value) {\n        if constexpr(std::is_same_v<Policy, as_void_t>) {\n            return meta_any{std::in_place_type<void>, std::forward<decltype(value)>(value)};\n        } else if constexpr(std::is_same_v<Policy, as_ref_t>) {\n            return meta_any{std::ref(std::forward<decltype(value)>(value))};\n        } else {\n            static_assert(std::is_same_v<Policy, as_is_t>);\n            return meta_any{std::forward<decltype(value)>(value)};\n        }\n    };\n\n    if constexpr(std::is_function_v<std::remove_reference_t<std::remove_pointer_t<decltype(Data)>>> || std::is_member_function_pointer_v<decltype(Data)>) {\n        static_assert(std::is_invocable_v<decltype(Data), Type &>);\n        auto * const clazz = instance.try_cast<Type>();\n        return clazz ? dispatch(std::invoke(Data, *clazz)) : meta_any{};\n    } else if constexpr(std::is_member_object_pointer_v<decltype(Data)>) {\n        using data_type = std::remove_cv_t<std::remove_reference_t<decltype(std::declval<Type>().*Data)>>;\n        static_assert(std::is_invocable_v<decltype(Data), Type *>);\n        auto * const clazz = instance.try_cast<Type>();\n\n        if constexpr(std::is_array_v<data_type>) {\n            auto * const idx = index.try_cast<std::size_t>();\n            return (clazz && idx) ? dispatch(std::invoke(Data, clazz)[*idx]) : meta_any{};\n        } else {\n            return clazz ? dispatch(std::invoke(Data, clazz)) : meta_any{};\n        }\n    } else {\n        static_assert(std::is_pointer_v<std::decay_t<decltype(Data)>>);\n\n        if constexpr(std::is_array_v<std::remove_pointer_t<decltype(Data)>>) {\n            auto * const idx = index.try_cast<std::size_t>();\n            return idx ? dispatch((*Data)[*idx]) : meta_any{};\n        } else {\n            return dispatch(*Data);\n        }\n    }\n}\n\n\ntemplate<typename Type, auto Candidate, typename Policy, std::size_t... Indexes>\nmeta_any invoke([[maybe_unused]] meta_any instance, meta_any *args, std::index_sequence<Indexes...>) {\n    using helper_type = meta_function_helper_t<decltype(Candidate)>;\n\n    auto dispatch = [](auto *... params) {\n        if constexpr(std::is_void_v<typename helper_type::return_type> || std::is_same_v<Policy, as_void_t>) {\n            std::invoke(Candidate, *params...);\n            return meta_any{std::in_place_type<void>};\n        } else if constexpr(std::is_same_v<Policy, as_ref_t>) {\n            return meta_any{std::ref(std::invoke(Candidate, *params...))};\n        } else {\n            static_assert(std::is_same_v<Policy, as_is_t>);\n            return meta_any{std::invoke(Candidate, *params...)};\n        }\n    };\n\n    [[maybe_unused]] const auto direct = std::make_tuple([](meta_any *any, auto *value) {\n        using arg_type = std::remove_reference_t<decltype(*value)>;\n\n        if(!value && any->convert<arg_type>()) {\n            value = any->try_cast<arg_type>();\n        }\n\n        return value;\n    }(args+Indexes, (args+Indexes)->try_cast<std::tuple_element_t<Indexes, typename helper_type::args_type>>())...);\n\n    if constexpr(std::is_function_v<std::remove_reference_t<std::remove_pointer_t<decltype(Candidate)>>>) {\n        return (std::get<Indexes>(direct) && ...) ? dispatch(std::get<Indexes>(direct)...) : meta_any{};\n    } else {\n        auto * const clazz = instance.try_cast<Type>();\n        return (clazz && (std::get<Indexes>(direct) && ...)) ? dispatch(clazz, std::get<Indexes>(direct)...) : meta_any{};\n    }\n}\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Meta factory to be used for reflection purposes.\n *\n * The meta factory is an utility class used to reflect types, data members and\n * functions of all sorts. This class ensures that the underlying web of types\n * is built correctly and performs some checks in debug mode to ensure that\n * there are no subtle errors at runtime.\n */\ntemplate<typename...>\nclass meta_factory;\n\n\n/**\n * @brief Extended meta factory to be used for reflection purposes.\n * @tparam Type Reflected type for which the factory was created.\n * @tparam Spec Property specialization pack used to disambiguate overloads.\n */\ntemplate<typename Type, typename... Spec>\nclass meta_factory<Type, Spec...>: public meta_factory<Type> {\n    bool exists(const meta_any &key, const internal::meta_prop_node *node) ENTT_NOEXCEPT {\n        return node && (node->key() == key || exists(key, node->next));\n    }\n\n    template<std::size_t Step = 0, std::size_t... Index, typename... Property, typename... Other>\n    void unpack(std::index_sequence<Index...>, std::tuple<Property...> property, Other &&... other) {\n        unroll<Step>(choice<3>, std::move(std::get<Index>(property))..., std::forward<Other>(other)...);\n    }\n\n    template<std::size_t Step = 0, typename... Property, typename... Other>\n    void unroll(choice_t<3>, std::tuple<Property...> property, Other &&... other) {\n        unpack<Step>(std::index_sequence_for<Property...>{}, std::move(property), std::forward<Other>(other)...);\n    }\n\n    template<std::size_t Step = 0, typename... Property, typename... Other>\n    void unroll(choice_t<2>, std::pair<Property...> property, Other &&... other) {\n        assign<Step>(std::move(property.first), std::move(property.second));\n        unroll<Step+1>(choice<3>, std::forward<Other>(other)...);\n    }\n\n    template<std::size_t Step = 0, typename Property, typename... Other>\n    std::enable_if_t<!std::is_invocable_v<Property>>\n    unroll(choice_t<1>, Property &&property, Other &&... other) {\n        assign<Step>(std::forward<Property>(property));\n        unroll<Step+1>(choice<3>, std::forward<Other>(other)...);\n    }\n\n    template<std::size_t Step = 0, typename Func, typename... Other>\n    void unroll(choice_t<0>, Func &&invocable, Other &&... other) {\n        unroll<Step>(choice<3>, std::forward<Func>(invocable)(), std::forward<Other>(other)...);\n    }\n\n    template<std::size_t>\n    void unroll(choice_t<0>) {}\n\n    template<std::size_t = 0, typename Key, typename... Value>\n    void assign(Key &&key, Value &&... value) {\n        static const auto property{std::make_tuple(std::forward<Key>(key), std::forward<Value>(value)...)};\n\n        static internal::meta_prop_node node{\n            nullptr,\n            []() -> meta_any {\n                return std::get<0>(property);\n            },\n            []() -> meta_any {\n                if constexpr(sizeof...(Value) == 0) {\n                    return {};\n                } else {\n                    return std::get<1>(property);\n                }\n            }\n        };\n\n        ENTT_ASSERT(!exists(node.key(), *curr));\n        node.next = *curr;\n        *curr = &node;\n    }\n\npublic:\n    /**\n     * @brief Constructs an extended factory from a given node.\n     * @param target The underlying node to which to assign the properties.\n     */\n    meta_factory(entt::internal::meta_prop_node **target) ENTT_NOEXCEPT\n        : curr{target}\n    {}\n\n    /**\n     * @brief Assigns a property to the last meta object created.\n     *\n     * Both the key and the value (if any) must be at least copy constructible.\n     *\n     * @tparam PropertyOrKey Type of the property or property key.\n     * @tparam Value Optional type of the property value.\n     * @param property_or_key Property or property key.\n     * @param value Optional property value.\n     * @return A meta factory for the parent type.\n     */\n    template<typename PropertyOrKey, typename... Value>\n    auto prop(PropertyOrKey &&property_or_key, Value &&... value) && {\n        if constexpr(sizeof...(Value) == 0) {\n            unroll(choice<3>, std::forward<PropertyOrKey>(property_or_key));\n        } else {\n            assign(std::forward<PropertyOrKey>(property_or_key), std::forward<Value>(value)...);\n        }\n\n        return meta_factory<Type, Spec..., PropertyOrKey, Value...>{curr};\n    }\n\n    /**\n     * @brief Assigns properties to the last meta object created.\n     *\n     * Both the keys and the values (if any) must be at least copy\n     * constructible.\n     *\n     * @tparam Property Types of the properties.\n     * @param property Properties to assign to the last meta object created.\n     * @return A meta factory for the parent type.\n     */\n    template <typename... Property>\n    auto props(Property... property) && {\n        unroll(choice<3>, std::forward<Property>(property)...);\n        return meta_factory<Type, Spec..., Property...>{curr};\n    }\n\nprivate:\n    entt::internal::meta_prop_node **curr;\n};\n\n\n/**\n * @brief Basic meta factory to be used for reflection purposes.\n * @tparam Type Reflected type for which the factory was created.\n */\ntemplate<typename Type>\nclass meta_factory<Type> {\n    template<typename Node>\n    bool exists(const Node *candidate, const Node *node) ENTT_NOEXCEPT {\n        return node && (node == candidate || exists(candidate, node->next));\n    }\n\n    template<typename Node>\n    bool exists(const id_type id, const Node *node) ENTT_NOEXCEPT {\n        return node && (node->id == id || exists(id, node->next));\n    }\n\npublic:\n    /**\n     * @brief Makes a meta type _searchable_.\n     * @param id Optional unique identifier.\n     * @return An extended meta factory for the given type.\n     */\n    auto type(const id_type id = type_info<Type>::id()) {\n        auto * const node = internal::meta_info<Type>::resolve();\n\n        ENTT_ASSERT(!exists(id, *internal::meta_context::global));\n        ENTT_ASSERT(!exists(node, *internal::meta_context::global));\n        node->id = id;\n        node->next = *internal::meta_context::global;\n        *internal::meta_context::global = node;\n\n        return meta_factory<Type, Type>{&node->prop};\n    }\n\n    /*! @copydoc type */\n    [[deprecated(\"use ::type instead\")]]\n    auto alias(const id_type id) ENTT_NOEXCEPT {\n        return type(id);\n    }\n\n    /**\n     * @brief Assigns a meta base to a meta type.\n     *\n     * A reflected base class must be a real base class of the reflected type.\n     *\n     * @tparam Base Type of the base class to assign to the meta type.\n     * @return A meta factory for the parent type.\n     */\n    template<typename Base>\n    auto base() ENTT_NOEXCEPT {\n        static_assert(std::is_base_of_v<Base, Type>);\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_base_node node{\n            type,\n            nullptr,\n            &internal::meta_info<Base>::resolve,\n            [](void *instance) ENTT_NOEXCEPT -> void * {\n                return static_cast<Base *>(static_cast<Type *>(instance));\n            }\n        };\n\n        ENTT_ASSERT(!exists(&node, type->base));\n        node.next = type->base;\n        type->base = &node;\n\n        return meta_factory<Type>{};\n    }\n\n    /**\n     * @brief Assigns a meta conversion function to a meta type.\n     *\n     * The given type must be such that an instance of the reflected type can be\n     * converted to it.\n     *\n     * @tparam To Type of the conversion function to assign to the meta type.\n     * @return A meta factory for the parent type.\n     */\n    template<typename To>\n    auto conv() ENTT_NOEXCEPT {\n        static_assert(std::is_convertible_v<Type, To>);\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_conv_node node{\n            type,\n            nullptr,\n            &internal::meta_info<To>::resolve,\n            [](const void *instance) -> meta_any {\n                return static_cast<To>(*static_cast<const Type *>(instance));\n            }\n        };\n\n        ENTT_ASSERT(!exists(&node, type->conv));\n        node.next = type->conv;\n        type->conv = &node;\n\n        return meta_factory<Type>{};\n    }\n\n    /**\n     * @brief Assigns a meta conversion function to a meta type.\n     *\n     * Conversion functions can be either free functions or member\n     * functions.<br/>\n     * In case of free functions, they must accept a const reference to an\n     * instance of the parent type as an argument. In case of member functions,\n     * they should have no arguments at all.\n     *\n     * @tparam Candidate The actual function to use for the conversion.\n     * @return A meta factory for the parent type.\n     */\n    template<auto Candidate>\n    auto conv() ENTT_NOEXCEPT {\n        using conv_type = std::invoke_result_t<decltype(Candidate), Type &>;\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_conv_node node{\n            type,\n            nullptr,\n            &internal::meta_info<conv_type>::resolve,\n            [](const void *instance) -> meta_any {\n                return std::invoke(Candidate, *static_cast<const Type *>(instance));\n            }\n        };\n\n        ENTT_ASSERT(!exists(&node, type->conv));\n        node.next = type->conv;\n        type->conv = &node;\n\n        return meta_factory<Type>{};\n    }\n\n    /**\n     * @brief Assigns a meta constructor to a meta type.\n     *\n     * Free functions can be assigned to meta types in the role of constructors.\n     * All that is required is that they return an instance of the underlying\n     * type.<br/>\n     * From a client's point of view, nothing changes if a constructor of a meta\n     * type is a built-in one or a free function.\n     *\n     * @tparam Func The actual function to use as a constructor.\n     * @tparam Policy Optional policy (no policy set by default).\n     * @return An extended meta factory for the parent type.\n     */\n    template<auto Func, typename Policy = as_is_t>\n    auto ctor() ENTT_NOEXCEPT {\n        using helper_type = internal::meta_function_helper_t<decltype(Func)>;\n        static_assert(std::is_same_v<typename helper_type::return_type, Type>);\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_ctor_node node{\n            type,\n            nullptr,\n            nullptr,\n            helper_type::index_sequence.size(),\n            &helper_type::arg,\n            [](meta_any * const any) {\n                return internal::invoke<Type, Func, Policy>({}, any, helper_type::index_sequence);\n            }\n        };\n\n        ENTT_ASSERT(!exists(&node, type->ctor));\n        node.next = type->ctor;\n        type->ctor = &node;\n\n        return meta_factory<Type, std::integral_constant<decltype(Func), Func>>{&node.prop};\n    }\n\n    /**\n     * @brief Assigns a meta constructor to a meta type.\n     *\n     * A meta constructor is uniquely identified by the types of its arguments\n     * and is such that there exists an actual constructor of the underlying\n     * type that can be invoked with parameters whose types are those given.\n     *\n     * @tparam Args Types of arguments to use to construct an instance.\n     * @return An extended meta factory for the parent type.\n     */\n    template<typename... Args>\n    auto ctor() ENTT_NOEXCEPT {\n        using helper_type = internal::meta_function_helper_t<Type(*)(Args...)>;\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_ctor_node node{\n            type,\n            nullptr,\n            nullptr,\n            helper_type::index_sequence.size(),\n            &helper_type::arg,\n            [](meta_any * const any) {\n                return internal::construct<Type, std::remove_cv_t<std::remove_reference_t<Args>>...>(any, helper_type::index_sequence);\n            }\n        };\n\n        ENTT_ASSERT(!exists(&node, type->ctor));\n        node.next = type->ctor;\n        type->ctor = &node;\n\n        return meta_factory<Type, Type(Args...)>{&node.prop};\n    }\n\n    /**\n     * @brief Assigns a meta destructor to a meta type.\n     *\n     * Free functions can be assigned to meta types in the role of destructors.\n     * The signature of the function should identical to the following:\n     *\n     * @code{.cpp}\n     * void(Type &);\n     * @endcode\n     *\n     * The purpose is to give users the ability to free up resources that\n     * require special treatment before an object is actually destroyed.\n     *\n     * @tparam Func The actual function to use as a destructor.\n     * @return A meta factory for the parent type.\n     */\n    template<auto Func>\n    auto dtor() ENTT_NOEXCEPT {\n        static_assert(std::is_invocable_v<decltype(Func), Type &>);\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_dtor_node node{\n            type,\n            [](void *instance) {\n                if(instance) {\n                    std::invoke(Func, *static_cast<Type *>(instance));\n                }\n            }\n        };\n\n        ENTT_ASSERT(!type->dtor);\n        type->dtor = &node;\n\n        return meta_factory<Type>{};\n    }\n\n    /**\n     * @brief Assigns a meta data to a meta type.\n     *\n     * Both data members and static and global variables, as well as constants\n     * of any kind, can be assigned to a meta type.<br/>\n     * From a client's point of view, all the variables associated with the\n     * reflected object will appear as if they were part of the type itself.\n     *\n     * @tparam Data The actual variable to attach to the meta type.\n     * @tparam Policy Optional policy (no policy set by default).\n     * @param id Unique identifier.\n     * @return An extended meta factory for the parent type.\n     */\n    template<auto Data, typename Policy = as_is_t>\n    auto data(const id_type id) ENTT_NOEXCEPT {\n        auto * const type = internal::meta_info<Type>::resolve();\n        internal::meta_data_node *curr = nullptr;\n\n        if constexpr(std::is_same_v<Type, decltype(Data)>) {\n            static_assert(std::is_same_v<Policy, as_is_t>);\n\n            static internal::meta_data_node node{\n                {},\n                type,\n                nullptr,\n                nullptr,\n                true,\n                true,\n                &internal::meta_info<Type>::resolve,\n                [](meta_any, meta_any, meta_any) { return false; },\n                [](meta_any, meta_any) -> meta_any { return Data; }\n            };\n\n            curr = &node;\n        } else if constexpr(std::is_member_object_pointer_v<decltype(Data)>) {\n            using data_type = std::remove_reference_t<decltype(std::declval<Type>().*Data)>;\n\n            static internal::meta_data_node node{\n                {},\n                type,\n                nullptr,\n                nullptr,\n                std::is_const_v<data_type>,\n                !std::is_member_object_pointer_v<decltype(Data)>,\n                &internal::meta_info<data_type>::resolve,\n                &internal::setter<std::is_const_v<data_type>, Type, Data>,\n                &internal::getter<Type, Data, Policy>\n            };\n\n            curr = &node;\n        } else {\n            static_assert(std::is_pointer_v<std::decay_t<decltype(Data)>>);\n            using data_type = std::remove_pointer_t<std::decay_t<decltype(Data)>>;\n\n            static internal::meta_data_node node{\n                {},\n                type,\n                nullptr,\n                nullptr,\n                std::is_const_v<data_type>,\n                !std::is_member_object_pointer_v<decltype(Data)>,\n                &internal::meta_info<data_type>::resolve,\n                &internal::setter<std::is_const_v<data_type>, Type, Data>,\n                &internal::getter<Type, Data, Policy>\n            };\n\n            curr = &node;\n        }\n\n        ENTT_ASSERT(!exists(id, type->data));\n        ENTT_ASSERT(!exists(curr, type->data));\n        curr->id = id;\n        curr->next = type->data;\n        type->data = curr;\n\n        return meta_factory<Type, std::integral_constant<decltype(Data), Data>>{&curr->prop};\n    }\n\n    /**\n     * @brief Assigns a meta data to a meta type by means of its setter and\n     * getter.\n     *\n     * Setters and getters can be either free functions, member functions or a\n     * mix of them.<br/>\n     * In case of free functions, setters and getters must accept a reference to\n     * an instance of the parent type as their first argument. A setter has then\n     * an extra argument of a type convertible to that of the parameter to\n     * set.<br/>\n     * In case of member functions, getters have no arguments at all, while\n     * setters has an argument of a type convertible to that of the parameter to\n     * set.\n     *\n     * @tparam Setter The actual function to use as a setter.\n     * @tparam Getter The actual function to use as a getter.\n     * @tparam Policy Optional policy (no policy set by default).\n     * @param id Unique identifier.\n     * @return An extended meta factory for the parent type.\n     */\n    template<auto Setter, auto Getter, typename Policy = as_is_t>\n    auto data(const id_type id) ENTT_NOEXCEPT {\n        using underlying_type = std::invoke_result_t<decltype(Getter), Type &>;\n        static_assert(std::is_invocable_v<decltype(Setter), Type &, underlying_type>);\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_data_node node{\n            {},\n            type,\n            nullptr,\n            nullptr,\n            false,\n            false,\n            &internal::meta_info<underlying_type>::resolve,\n            &internal::setter<false, Type, Setter>,\n            &internal::getter<Type, Getter, Policy>\n        };\n\n        ENTT_ASSERT(!exists(id, type->data));\n        ENTT_ASSERT(!exists(&node, type->data));\n        node.id = id;\n        node.next = type->data;\n        type->data = &node;\n\n        return meta_factory<Type, std::integral_constant<decltype(Setter), Setter>, std::integral_constant<decltype(Getter), Getter>>{&node.prop};\n    }\n\n    /**\n     * @brief Assigns a meta funcion to a meta type.\n     *\n     * Both member functions and free functions can be assigned to a meta\n     * type.<br/>\n     * From a client's point of view, all the functions associated with the\n     * reflected object will appear as if they were part of the type itself.\n     *\n     * @tparam Candidate The actual function to attach to the meta type.\n     * @tparam Policy Optional policy (no policy set by default).\n     * @param id Unique identifier.\n     * @return An extended meta factory for the parent type.\n     */\n    template<auto Candidate, typename Policy = as_is_t>\n    auto func(const id_type id) ENTT_NOEXCEPT {\n        using helper_type = internal::meta_function_helper_t<decltype(Candidate)>;\n        auto * const type = internal::meta_info<Type>::resolve();\n\n        static internal::meta_func_node node{\n            {},\n            type,\n            nullptr,\n            nullptr,\n            helper_type::index_sequence.size(),\n            helper_type::is_const,\n            !std::is_member_function_pointer_v<decltype(Candidate)>,\n            &internal::meta_info<std::conditional_t<std::is_same_v<Policy, as_void_t>, void, typename helper_type::return_type>>::resolve,\n            &helper_type::arg,\n            [](meta_any instance, meta_any *args) {\n                return internal::invoke<Type, Candidate, Policy>(std::move(instance), args, helper_type::index_sequence);\n            }\n        };\n\n        ENTT_ASSERT(!exists(id, type->func));\n        ENTT_ASSERT(!exists(&node, type->func));\n        node.id = id;\n        node.next = type->func;\n        type->func = &node;\n\n        return meta_factory<Type, std::integral_constant<decltype(Candidate), Candidate>>{&node.prop};\n    }\n\n    /**\n     * @brief Resets a meta type and all its parts.\n     *\n     * This function resets a meta type and all its data members, member\n     * functions and properties, as well as its constructors, destructors and\n     * conversion functions if any.<br/>\n     * Base classes aren't reset but the link between the two types is removed.\n     *\n     * @return An extended meta factory for the given type.\n     */\n    auto reset() ENTT_NOEXCEPT {\n        auto * const node = internal::meta_info<Type>::resolve();\n\n        internal::meta_context::detach(node);\n\n        const auto unregister_all = y_combinator{\n            [](auto &&self, auto **curr, auto... member) {\n                while(*curr) {\n                    auto *prev = *curr;\n                    (self(&(prev->*member)), ...);\n                    *curr = prev->next;\n                    prev->next = nullptr;\n                }\n            }\n        };\n\n        unregister_all(&node->prop);\n        unregister_all(&node->base);\n        unregister_all(&node->conv);\n        unregister_all(&node->ctor, &internal::meta_ctor_node::prop);\n        unregister_all(&node->data, &internal::meta_data_node::prop);\n        unregister_all(&node->func, &internal::meta_func_node::prop);\n\n        node->id = {};\n        node->next = nullptr;\n        node->dtor = nullptr;\n\n        return meta_factory<Type, Type>{&node->prop};\n    }\n};\n\n\n/**\n * @brief Utility function to use for reflection.\n *\n * This is the point from which everything starts.<br/>\n * By invoking this function with a type that is not yet reflected, a meta type\n * is created to which it will be possible to attach meta objects through a\n * dedicated factory.\n *\n * @tparam Type Type to reflect.\n * @return An meta factory for the given type.\n */\ntemplate<typename Type>\ninline meta_factory<Type> meta() ENTT_NOEXCEPT {\n    auto * const node = internal::meta_info<Type>::resolve();\n    // extended meta factory to allow assigning properties to opaque meta types\n    return meta_factory<Type, Type>{&node->prop};\n}\n\n\n}\n\n\n#endif\n\n// #include \"meta/meta.hpp\"\n\n// #include \"meta/resolve.hpp\"\n#ifndef ENTT_META_RESOLVE_HPP\n#define ENTT_META_RESOLVE_HPP\n\n\n#include <type_traits>\n// #include \"meta.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Returns the meta type associated with a given type.\n * @tparam Type Type to use to search for a meta type.\n * @return The meta type associated with the given type, if any.\n */\ntemplate<typename Type>\ninline meta_type resolve() ENTT_NOEXCEPT {\n    return internal::meta_info<Type>::resolve();\n}\n\n\n/**\n * @brief Returns the first meta type that satisfies specific criteria, if any.\n * @tparam Func Type of the unary predicate to use to test the meta types.\n * @param func Unary predicate which returns ​true for the required element.\n * @return The first meta type satisfying the condition, if any.\n */\ntemplate<typename Func>\ninline meta_type resolve_if(Func func) ENTT_NOEXCEPT {\n    return internal::find_if([&func](const auto *curr) {\n        return func(meta_type{curr});\n    }, *internal::meta_context::global);\n}\n\n\n/**\n * @brief Returns the meta type associated with a given identifier, if any.\n * @param id Unique identifier.\n * @return The meta type associated with the given identifier, if any.\n */\ninline meta_type resolve_id(const id_type id) ENTT_NOEXCEPT {\n    return resolve_if([id](const auto type) { return type.id() == id; });\n}\n\n\n/**\n * @brief Returns the meta type associated with a given type id, if any.\n * @param id Unique identifier.\n * @return The meta type associated with the given type id, if any.\n */\ninline meta_type resolve_type(const id_type id) ENTT_NOEXCEPT {\n    return resolve_if([id](const auto type) { return type.type_id() == id; });\n}\n\n\n/*! @copydoc resolve_id */\n[[deprecated(\"use entt::resolve_id instead\")]]\ninline meta_type resolve(const id_type id) ENTT_NOEXCEPT {\n    return resolve_id(id);\n}\n\n\n/**\n * @brief Iterates all the reflected types.\n * @tparam Op Type of the function object to invoke.\n * @param op A valid function object.\n */\ntemplate<typename Op>\ninline std::enable_if_t<std::is_invocable_v<Op, meta_type>, void>\nresolve(Op op) {\n    internal::visit<meta_type>(op, *internal::meta_context::global);\n}\n\n\n}\n\n\n#endif\n\n// #include \"meta/policy.hpp\"\n\n// #include \"process/process.hpp\"\n#ifndef ENTT_PROCESS_PROCESS_HPP\n#define ENTT_PROCESS_PROCESS_HPP\n\n\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n// #include \"../core/type_traits.hpp\"\n#ifndef ENTT_CORE_TYPE_TRAITS_HPP\n#define ENTT_CORE_TYPE_TRAITS_HPP\n\n\n#include <cstddef>\n#include <utility>\n#include <type_traits>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n// #include \"hashed_string.hpp\"\n#ifndef ENTT_CORE_HASHED_STRING_HPP\n#define ENTT_CORE_HASHED_STRING_HPP\n\n\n#include <cstddef>\n#include <cstdint>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n#ifndef ENTT_CORE_FWD_HPP\n#define ENTT_CORE_FWD_HPP\n\n\n// #include \"../config/config.h\"\n\n\n\nnamespace entt {\n\n\n/*! @brief Alias declaration for type identifiers. */\nusing id_type = ENTT_ID_TYPE;\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename>\nstruct fnv1a_traits;\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint32_t> {\n    using type = std::uint32_t;\n    static constexpr std::uint32_t offset = 2166136261;\n    static constexpr std::uint32_t prime = 16777619;\n};\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint64_t> {\n    using type = std::uint64_t;\n    static constexpr std::uint64_t offset = 14695981039346656037ull;\n    static constexpr std::uint64_t prime = 1099511628211ull;\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Zero overhead unique identifier.\n *\n * A hashed string is a compile-time tool that allows users to use\n * human-readable identifers in the codebase while using their numeric\n * counterparts at runtime.<br/>\n * Because of that, a hashed string can also be used in constant expressions if\n * required.\n *\n * @tparam Char Character type.\n */\ntemplate<typename Char>\nclass basic_hashed_string {\n    using traits_type = internal::fnv1a_traits<id_type>;\n\n    struct const_wrapper {\n        // non-explicit constructor on purpose\n        constexpr const_wrapper(const Char *curr) ENTT_NOEXCEPT: str{curr} {}\n        const Char *str;\n    };\n\n    // Fowler–Noll–Vo hash function v. 1a - the good\n    static constexpr id_type helper(const Char *curr) ENTT_NOEXCEPT {\n        auto value = traits_type::offset;\n\n        while(*curr != 0) {\n            value = (value ^ static_cast<traits_type::type>(*(curr++))) * traits_type::prime;\n        }\n\n        return value;\n    }\n\npublic:\n    /*! @brief Character type. */\n    using value_type = Char;\n    /*! @brief Unsigned integer type. */\n    using hash_type = id_type;\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * const auto value = basic_hashed_string<char>::to_value(\"my.png\");\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param str Human-readable identifer.\n     * @return The numeric representation of the string.\n     */\n    template<std::size_t N>\n    static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT {\n        return helper(str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT {\n        return helper(wrapper.str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string view.\n     * @param str Human-readable identifer.\n     * @param size Length of the string to hash.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const value_type *str, std::size_t size) ENTT_NOEXCEPT {\n        id_type partial{traits_type::offset};\n        while(size--) { partial = (partial^(str++)[0])*traits_type::prime; }\n        return partial;\n    }\n\n    /*! @brief Constructs an empty hashed string. */\n    constexpr basic_hashed_string() ENTT_NOEXCEPT\n        : str{nullptr}, hash{}\n    {}\n\n    /**\n     * @brief Constructs a hashed string from an array of const characters.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * basic_hashed_string<char> hs{\"my.png\"};\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param curr Human-readable identifer.\n     */\n    template<std::size_t N>\n    constexpr basic_hashed_string(const value_type (&curr)[N]) ENTT_NOEXCEPT\n        : str{curr}, hash{helper(curr)}\n    {}\n\n    /**\n     * @brief Explicit constructor on purpose to avoid constructing a hashed\n     * string directly from a `const value_type *`.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     */\n    explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT\n        : str{wrapper.str}, hash{helper(wrapper.str)}\n    {}\n\n    /**\n     * @brief Returns the human-readable representation of a hashed string.\n     * @return The string used to initialize the instance.\n     */\n    constexpr const value_type * data() const ENTT_NOEXCEPT {\n        return str;\n    }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr hash_type value() const ENTT_NOEXCEPT {\n        return hash;\n    }\n\n    /*! @copydoc data */\n    constexpr operator const value_type *() const ENTT_NOEXCEPT { return data(); }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr operator hash_type() const ENTT_NOEXCEPT { return value(); }\n\n    /**\n     * @brief Compares two hashed strings.\n     * @param other Hashed string with which to compare.\n     * @return True if the two hashed strings are identical, false otherwise.\n     */\n    constexpr bool operator==(const basic_hashed_string &other) const ENTT_NOEXCEPT {\n        return hash == other.hash;\n    }\n\nprivate:\n    const value_type *str;\n    hash_type hash;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the character type of the hashed string directly from a\n * human-readable identifer provided to the constructor.\n *\n * @tparam Char Character type.\n * @tparam N Number of characters of the identifier.\n * @param str Human-readable identifer.\n */\ntemplate<typename Char, std::size_t N>\nbasic_hashed_string(const Char (&str)[N]) ENTT_NOEXCEPT\n-> basic_hashed_string<Char>;\n\n\n/**\n * @brief Compares two hashed strings.\n * @tparam Char Character type.\n * @param lhs A valid hashed string.\n * @param rhs A valid hashed string.\n * @return True if the two hashed strings are identical, false otherwise.\n */\ntemplate<typename Char>\nconstexpr bool operator!=(const basic_hashed_string<Char> &lhs, const basic_hashed_string<Char> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_string = basic_hashed_string<char>;\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_wstring = basic_hashed_string<wchar_t>;\n\n\n}\n\n\n/**\n * @brief User defined literal for hashed strings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed string.\n */\nconstexpr entt::hashed_string operator\"\" ENTT_HS_SUFFIX(const char *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_string{str};\n}\n\n\n/**\n * @brief User defined literal for hashed wstrings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed wstring.\n */\nconstexpr entt::hashed_wstring operator\"\" ENTT_HWS_SUFFIX(const wchar_t *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_wstring{str};\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Wraps a static constant.\n * @tparam Value A static constant.\n */\ntemplate<auto Value>\nusing integral_constant = std::integral_constant<decltype(Value), Value>;\n\n\n/**\n * @brief Alias template to ease the creation of named values.\n * @tparam Value A constant value at least convertible to `id_type`.\n */\ntemplate<id_type Value>\nusing tag = integral_constant<Value>;\n\n\n/**\n * @brief Utility class to disambiguate overloaded functions.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\nstruct choice_t\n        // Unfortunately, doxygen cannot parse such a construct.\n        /*! @cond TURN_OFF_DOXYGEN */\n        : choice_t<N-1>\n        /*! @endcond TURN_OFF_DOXYGEN */\n{};\n\n\n/*! @copybrief choice_t */\ntemplate<>\nstruct choice_t<0> {};\n\n\n/**\n * @brief Variable template for the choice trick.\n * @tparam N Number of choices available.\n */\ntemplate<std::size_t N>\ninline constexpr choice_t<N> choice{};\n\n\n/*! @brief A class to use to push around lists of types, nothing more. */\ntemplate<typename...>\nstruct type_list {};\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_size;\n\n\n/**\n * @brief Compile-time number of elements in a type list.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_size<type_list<Type...>>\n        : std::integral_constant<std::size_t, sizeof...(Type)>\n{};\n\n\n/**\n * @brief Helper variable template.\n * @tparam List Type list.\n */\ntemplate<class List>\ninline constexpr auto type_list_size_v = type_list_size<List>::value;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename...>\nstruct type_list_cat;\n\n\n/*! @brief Concatenates multiple type lists. */\ntemplate<>\nstruct type_list_cat<> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the first type list.\n * @tparam Other Types provided by the second type list.\n * @tparam List Other type lists, if any.\n */\ntemplate<typename... Type, typename... Other, typename... List>\nstruct type_list_cat<type_list<Type...>, type_list<Other...>, List...> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = typename type_list_cat<type_list<Type..., Other...>, List...>::type;\n};\n\n\n/**\n * @brief Concatenates multiple type lists.\n * @tparam Type Types provided by the type list.\n */\ntemplate<typename... Type>\nstruct type_list_cat<type_list<Type...>> {\n    /*! @brief A type list composed by the types of all the type lists. */\n    using type = type_list<Type...>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam List Type lists to concatenate.\n */\ntemplate<typename... List>\nusing type_list_cat_t = typename type_list_cat<List...>::type;\n\n\n/*! @brief Primary template isn't defined on purpose. */\ntemplate<typename>\nstruct type_list_unique;\n\n\n/**\n * @brief Removes duplicates types from a type list.\n * @tparam Type One of the types provided by the given type list.\n * @tparam Other The other types provided by the given type list.\n */\ntemplate<typename Type, typename... Other>\nstruct type_list_unique<type_list<Type, Other...>> {\n    /*! @brief A type list without duplicate types. */\n    using type = std::conditional_t<\n        std::disjunction_v<std::is_same<Type, Other>...>,\n        typename type_list_unique<type_list<Other...>>::type,\n        type_list_cat_t<type_list<Type>, typename type_list_unique<type_list<Other...>>::type>\n    >;\n};\n\n\n/*! @brief Removes duplicates types from a type list. */\ntemplate<>\nstruct type_list_unique<type_list<>> {\n    /*! @brief A type list without duplicate types. */\n    using type = type_list<>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Type A type list.\n */\ntemplate<typename Type>\nusing type_list_unique_t = typename type_list_unique<Type>::type;\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * equality comparable, false otherwise.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<typename Type, typename = std::void_t<>>\nstruct is_equality_comparable: std::false_type {};\n\n\n/*! @copydoc is_equality_comparable */\ntemplate<typename Type>\nstruct is_equality_comparable<Type, std::void_t<decltype(std::declval<Type>() == std::declval<Type>())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially equality comparable type.\n */\ntemplate<class Type>\ninline constexpr auto is_equality_comparable_v = is_equality_comparable<Type>::value;\n\n\n/**\n * @brief Extracts the class of a non-static member object or function.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nclass member_class {\n    static_assert(std::is_member_pointer_v<Member>);\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...));\n\n    template<typename Class, typename Ret, typename... Args>\n    static Class * clazz(Ret(Class:: *)(Args...) const);\n\n    template<typename Class, typename Type>\n    static Class * clazz(Type Class:: *);\n\npublic:\n    /*! @brief The class of the given non-static member object or function. */\n    using type = std::remove_pointer_t<decltype(clazz(std::declval<Member>()))>;\n};\n\n\n/**\n * @brief Helper type.\n * @tparam Member A pointer to a non-static member object or function.\n */\ntemplate<typename Member>\nusing member_class_t = typename member_class<Member>::type;\n\n\n}\n\n\n/**\n * @brief Defines an enum class to use for opaque identifiers and a dedicate\n * `to_integer` function to convert the identifiers to their underlying type.\n * @param clazz The name to use for the enum class.\n * @param type The underlying type for the enum class.\n */\n#define ENTT_OPAQUE_TYPE(clazz, type)\\\n    enum class clazz: type {};\\\n    constexpr auto to_integral(const clazz id) ENTT_NOEXCEPT {\\\n        return static_cast<std::underlying_type_t<clazz>>(id);\\\n    }\\\n    static_assert(true)\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Base class for processes.\n *\n * This class stays true to the CRTP idiom. Derived classes must specify what's\n * the intended type for elapsed times.<br/>\n * A process should expose publicly the following member functions whether\n * required:\n *\n * * @code{.cpp}\n *   void update(Delta, void *);\n *   @endcode\n *\n *   It's invoked once per tick until a process is explicitly aborted or it\n *   terminates either with or without errors. Even though it's not mandatory to\n *   declare this member function, as a rule of thumb each process should at\n *   least define it to work properly. The `void *` parameter is an opaque\n *   pointer to user data (if any) forwarded directly to the process during an\n *   update.\n *\n * * @code{.cpp}\n *   void init();\n *   @endcode\n *\n *   It's invoked when the process joins the running queue of a scheduler. This\n *   happens as soon as it's attached to the scheduler if the process is a top\n *   level one, otherwise when it replaces its parent if the process is a\n *   continuation.\n *\n * * @code{.cpp}\n *   void succeeded();\n *   @endcode\n *\n *   It's invoked in case of success, immediately after an update and during the\n *   same tick.\n *\n * * @code{.cpp}\n *   void failed();\n *   @endcode\n *\n *   It's invoked in case of errors, immediately after an update and during the\n *   same tick.\n *\n * * @code{.cpp}\n *   void aborted();\n *   @endcode\n *\n *   It's invoked only if a process is explicitly aborted. There is no guarantee\n *   that it executes in the same tick, this depends solely on whether the\n *   process is aborted immediately or not.\n *\n * Derived classes can change the internal state of a process by invoking the\n * `succeed` and `fail` protected member functions and even pause or unpause the\n * process itself.\n *\n * @sa scheduler\n *\n * @tparam Derived Actual type of process that extends the class template.\n * @tparam Delta Type to use to provide elapsed time.\n */\ntemplate<typename Derived, typename Delta>\nclass process {\n    enum class state: unsigned int {\n        UNINITIALIZED = 0,\n        RUNNING,\n        PAUSED,\n        SUCCEEDED,\n        FAILED,\n        ABORTED,\n        FINISHED\n    };\n\n    template<typename Target = Derived>\n    auto next(integral_constant<state::UNINITIALIZED>)\n    -> decltype(std::declval<Target>().init()) {\n        static_cast<Target *>(this)->init();\n    }\n\n    template<typename Target = Derived>\n    auto next(integral_constant<state::RUNNING>, Delta delta, void *data)\n    -> decltype(std::declval<Target>().update(delta, data)) {\n        static_cast<Target *>(this)->update(delta, data);\n    }\n\n    template<typename Target = Derived>\n    auto next(integral_constant<state::SUCCEEDED>)\n    -> decltype(std::declval<Target>().succeeded()) {\n        static_cast<Target *>(this)->succeeded();\n    }\n\n    template<typename Target = Derived>\n    auto next(integral_constant<state::FAILED>)\n    -> decltype(std::declval<Target>().failed()) {\n        static_cast<Target *>(this)->failed();\n    }\n\n    template<typename Target = Derived>\n    auto next(integral_constant<state::ABORTED>)\n    -> decltype(std::declval<Target>().aborted()) {\n        static_cast<Target *>(this)->aborted();\n    }\n\n    void next(...) const ENTT_NOEXCEPT {}\n\nprotected:\n    /**\n     * @brief Terminates a process with success if it's still alive.\n     *\n     * The function is idempotent and it does nothing if the process isn't\n     * alive.\n     */\n    void succeed() ENTT_NOEXCEPT {\n        if(alive()) {\n            current = state::SUCCEEDED;\n        }\n    }\n\n    /**\n     * @brief Terminates a process with errors if it's still alive.\n     *\n     * The function is idempotent and it does nothing if the process isn't\n     * alive.\n     */\n    void fail() ENTT_NOEXCEPT {\n        if(alive()) {\n            current = state::FAILED;\n        }\n    }\n\n    /**\n     * @brief Stops a process if it's in a running state.\n     *\n     * The function is idempotent and it does nothing if the process isn't\n     * running.\n     */\n    void pause() ENTT_NOEXCEPT {\n        if(current == state::RUNNING) {\n            current = state::PAUSED;\n        }\n    }\n\n    /**\n     * @brief Restarts a process if it's paused.\n     *\n     * The function is idempotent and it does nothing if the process isn't\n     * paused.\n     */\n    void unpause() ENTT_NOEXCEPT {\n        if(current  == state::PAUSED) {\n            current  = state::RUNNING;\n        }\n    }\n\npublic:\n    /*! @brief Type used to provide elapsed time. */\n    using delta_type = Delta;\n\n    /*! @brief Default destructor. */\n    virtual ~process() {\n        static_assert(std::is_base_of_v<process, Derived>);\n    }\n\n    /**\n     * @brief Aborts a process if it's still alive.\n     *\n     * The function is idempotent and it does nothing if the process isn't\n     * alive.\n     *\n     * @param immediately Requests an immediate operation.\n     */\n    void abort(const bool immediately = false) {\n        if(alive()) {\n            current = state::ABORTED;\n\n            if(immediately) {\n                tick({});\n            }\n        }\n    }\n\n    /**\n     * @brief Returns true if a process is either running or paused.\n     * @return True if the process is still alive, false otherwise.\n     */\n    bool alive() const ENTT_NOEXCEPT {\n        return current == state::RUNNING || current == state::PAUSED;\n    }\n\n    /**\n     * @brief Returns true if a process is already terminated.\n     * @return True if the process is terminated, false otherwise.\n     */\n    bool dead() const ENTT_NOEXCEPT {\n        return current == state::FINISHED;\n    }\n\n    /**\n     * @brief Returns true if a process is currently paused.\n     * @return True if the process is paused, false otherwise.\n     */\n    bool paused() const ENTT_NOEXCEPT {\n        return current == state::PAUSED;\n    }\n\n    /**\n     * @brief Returns true if a process terminated with errors.\n     * @return True if the process terminated with errors, false otherwise.\n     */\n    bool rejected() const ENTT_NOEXCEPT {\n        return stopped;\n    }\n\n    /**\n     * @brief Updates a process and its internal state if required.\n     * @param delta Elapsed time.\n     * @param data Optional data.\n     */\n    void tick(const Delta delta, void *data = nullptr) {\n        switch (current) {\n        case state::UNINITIALIZED:\n            next(integral_constant<state::UNINITIALIZED>{});\n            current = state::RUNNING;\n            break;\n        case state::RUNNING:\n            next(integral_constant<state::RUNNING>{}, delta, data);\n            break;\n        default:\n            // suppress warnings\n            break;\n        }\n\n        // if it's dead, it must be notified and removed immediately\n        switch(current) {\n        case state::SUCCEEDED:\n            next(integral_constant<state::SUCCEEDED>{});\n            current = state::FINISHED;\n            break;\n        case state::FAILED:\n            next(integral_constant<state::FAILED>{});\n            current = state::FINISHED;\n            stopped = true;\n            break;\n        case state::ABORTED:\n            next(integral_constant<state::ABORTED>{});\n            current = state::FINISHED;\n            stopped = true;\n            break;\n        default:\n            // suppress warnings\n            break;\n        }\n    }\n\nprivate:\n    state current{state::UNINITIALIZED};\n    bool stopped{false};\n};\n\n\n/**\n * @brief Adaptor for lambdas and functors to turn them into processes.\n *\n * Lambdas and functors can't be used directly with a scheduler for they are not\n * properly defined processes with managed life cycles.<br/>\n * This class helps in filling the gap and turning lambdas and functors into\n * full featured processes usable by a scheduler.\n *\n * The signature of the function call operator should be equivalent to the\n * following:\n *\n * @code{.cpp}\n * void(Delta delta, void *data, auto succeed, auto fail);\n * @endcode\n *\n * Where:\n *\n * * `delta` is the elapsed time.\n * * `data` is an opaque pointer to user data if any, `nullptr` otherwise.\n * * `succeed` is a function to call when a process terminates with success.\n * * `fail` is a function to call when a process terminates with errors.\n *\n * The signature of the function call operator of both `succeed` and `fail`\n * is equivalent to the following:\n *\n * @code{.cpp}\n * void();\n * @endcode\n *\n * Usually users shouldn't worry about creating adaptors. A scheduler will\n * create them internally each and avery time a lambda or a functor is used as\n * a process.\n *\n * @sa process\n * @sa scheduler\n *\n * @tparam Func Actual type of process.\n * @tparam Delta Type to use to provide elapsed time.\n */\ntemplate<typename Func, typename Delta>\nstruct process_adaptor: process<process_adaptor<Func, Delta>, Delta>, private Func {\n    /**\n     * @brief Constructs a process adaptor from a lambda or a functor.\n     * @tparam Args Types of arguments to use to initialize the actual process.\n     * @param args Parameters to use to initialize the actual process.\n     */\n    template<typename... Args>\n    process_adaptor(Args &&... args)\n        : Func{std::forward<Args>(args)...}\n    {}\n\n    /**\n     * @brief Updates a process and its internal state if required.\n     * @param delta Elapsed time.\n     * @param data Optional data.\n     */\n    void update(const Delta delta, void *data) {\n        Func::operator()(delta, data, [this]() { this->succeed(); }, [this]() { this->fail(); });\n    }\n};\n\n\n}\n\n\n#endif\n\n// #include \"process/scheduler.hpp\"\n#ifndef ENTT_PROCESS_SCHEDULER_HPP\n#define ENTT_PROCESS_SCHEDULER_HPP\n\n\n#include <vector>\n#include <memory>\n#include <utility>\n#include <algorithm>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"process.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Cooperative scheduler for processes.\n *\n * A cooperative scheduler runs processes and helps managing their life cycles.\n *\n * Each process is invoked once per tick. If a process terminates, it's\n * removed automatically from the scheduler and it's never invoked again.<br/>\n * A process can also have a child. In this case, the process is replaced with\n * its child when it terminates if it returns with success. In case of errors,\n * both the process and its child are discarded.\n *\n * Example of use (pseudocode):\n *\n * @code{.cpp}\n * scheduler.attach([](auto delta, void *, auto succeed, auto fail) {\n *     // code\n * }).then<my_process>(arguments...);\n * @endcode\n *\n * In order to invoke all scheduled processes, call the `update` member function\n * passing it the elapsed time to forward to the tasks.\n *\n * @sa process\n *\n * @tparam Delta Type to use to provide elapsed time.\n */\ntemplate<typename Delta>\nclass scheduler {\n    struct process_handler {\n        using instance_type = std::unique_ptr<void, void(*)(void *)>;\n        using update_fn_type = bool(process_handler &, Delta, void *);\n        using abort_fn_type = void(process_handler &, bool);\n        using next_type = std::unique_ptr<process_handler>;\n\n        instance_type instance;\n        update_fn_type *update;\n        abort_fn_type *abort;\n        next_type next;\n    };\n\n    struct continuation {\n        continuation(process_handler *ref)\n            : handler{ref}\n        {\n            ENTT_ASSERT(handler);\n        }\n\n        template<typename Proc, typename... Args>\n        continuation then(Args &&... args) {\n            static_assert(std::is_base_of_v<process<Proc, Delta>, Proc>);\n            auto proc = typename process_handler::instance_type{new Proc{std::forward<Args>(args)...}, &scheduler::deleter<Proc>};\n            handler->next.reset(new process_handler{std::move(proc), &scheduler::update<Proc>, &scheduler::abort<Proc>, nullptr});\n            handler = handler->next.get();\n            return *this;\n        }\n\n        template<typename Func>\n        continuation then(Func &&func) {\n            return then<process_adaptor<std::decay_t<Func>, Delta>>(std::forward<Func>(func));\n        }\n\n    private:\n        process_handler *handler;\n    };\n\n    template<typename Proc>\n    static bool update(process_handler &handler, const Delta delta, void *data) {\n        auto *process = static_cast<Proc *>(handler.instance.get());\n        process->tick(delta, data);\n\n        auto dead = process->dead();\n\n        if(dead) {\n            if(handler.next && !process->rejected()) {\n                handler = std::move(*handler.next);\n                // forces the process to exit the uninitialized state\n                dead = handler.update(handler, {}, nullptr);\n            } else {\n                handler.instance.reset();\n            }\n        }\n\n        return dead;\n    }\n\n    template<typename Proc>\n    static void abort(process_handler &handler, const bool immediately) {\n        static_cast<Proc *>(handler.instance.get())->abort(immediately);\n    }\n\n    template<typename Proc>\n    static void deleter(void *proc) {\n        delete static_cast<Proc *>(proc);\n    }\n\npublic:\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n\n    /*! @brief Default constructor. */\n    scheduler() = default;\n\n    /*! @brief Default move constructor. */\n    scheduler(scheduler &&) = default;\n\n    /*! @brief Default move assignment operator. @return This scheduler. */\n    scheduler & operator=(scheduler &&) = default;\n\n    /**\n     * @brief Number of processes currently scheduled.\n     * @return Number of processes currently scheduled.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return handlers.size();\n    }\n\n    /**\n     * @brief Returns true if at least a process is currently scheduled.\n     * @return True if there are scheduled processes, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return handlers.empty();\n    }\n\n    /**\n     * @brief Discards all scheduled processes.\n     *\n     * Processes aren't aborted. They are discarded along with their children\n     * and never executed again.\n     */\n    void clear() {\n        handlers.clear();\n    }\n\n    /**\n     * @brief Schedules a process for the next tick.\n     *\n     * Returned value is an opaque object that can be used to attach a child to\n     * the given process. The child is automatically scheduled when the process\n     * terminates and only if the process returns with success.\n     *\n     * Example of use (pseudocode):\n     *\n     * @code{.cpp}\n     * // schedules a task in the form of a process class\n     * scheduler.attach<my_process>(arguments...)\n     * // appends a child in the form of a lambda function\n     * .then([](auto delta, void *, auto succeed, auto fail) {\n     *     // code\n     * })\n     * // appends a child in the form of another process class\n     * .then<my_other_process>();\n     * @endcode\n     *\n     * @tparam Proc Type of process to schedule.\n     * @tparam Args Types of arguments to use to initialize the process.\n     * @param args Parameters to use to initialize the process.\n     * @return An opaque object to use to concatenate processes.\n     */\n    template<typename Proc, typename... Args>\n    auto attach(Args &&... args) {\n        static_assert(std::is_base_of_v<process<Proc, Delta>, Proc>);\n        auto proc = typename process_handler::instance_type{new Proc{std::forward<Args>(args)...}, &scheduler::deleter<Proc>};\n        process_handler handler{std::move(proc), &scheduler::update<Proc>, &scheduler::abort<Proc>, nullptr};\n        // forces the process to exit the uninitialized state\n        handler.update(handler, {}, nullptr);\n        return continuation{&handlers.emplace_back(std::move(handler))};\n    }\n\n    /**\n     * @brief Schedules a process for the next tick.\n     *\n     * A process can be either a lambda or a functor. The scheduler wraps both\n     * of them in a process adaptor internally.<br/>\n     * The signature of the function call operator should be equivalent to the\n     * following:\n     *\n     * @code{.cpp}\n     * void(Delta delta, void *data, auto succeed, auto fail);\n     * @endcode\n     *\n     * Where:\n     *\n     * * `delta` is the elapsed time.\n     * * `data` is an opaque pointer to user data if any, `nullptr` otherwise.\n     * * `succeed` is a function to call when a process terminates with success.\n     * * `fail` is a function to call when a process terminates with errors.\n     *\n     * The signature of the function call operator of both `succeed` and `fail`\n     * is equivalent to the following:\n     *\n     * @code{.cpp}\n     * void();\n     * @endcode\n     *\n     * Returned value is an opaque object that can be used to attach a child to\n     * the given process. The child is automatically scheduled when the process\n     * terminates and only if the process returns with success.\n     *\n     * Example of use (pseudocode):\n     *\n     * @code{.cpp}\n     * // schedules a task in the form of a lambda function\n     * scheduler.attach([](auto delta, void *, auto succeed, auto fail) {\n     *     // code\n     * })\n     * // appends a child in the form of another lambda function\n     * .then([](auto delta, void *, auto succeed, auto fail) {\n     *     // code\n     * })\n     * // appends a child in the form of a process class\n     * .then<my_process>(arguments...);\n     * @endcode\n     *\n     * @sa process_adaptor\n     *\n     * @tparam Func Type of process to schedule.\n     * @param func Either a lambda or a functor to use as a process.\n     * @return An opaque object to use to concatenate processes.\n     */\n    template<typename Func>\n    auto attach(Func &&func) {\n        using Proc = process_adaptor<std::decay_t<Func>, Delta>;\n        return attach<Proc>(std::forward<Func>(func));\n    }\n\n    /**\n     * @brief Updates all scheduled processes.\n     *\n     * All scheduled processes are executed in no specific order.<br/>\n     * If a process terminates with success, it's replaced with its child, if\n     * any. Otherwise, if a process terminates with an error, it's removed along\n     * with its child.\n     *\n     * @param delta Elapsed time.\n     * @param data Optional data.\n     */\n    void update(const Delta delta, void *data = nullptr) {\n        bool clean = false;\n\n        for(auto pos = handlers.size(); pos; --pos) {\n            auto &handler = handlers[pos-1];\n            const bool dead = handler.update(handler, delta, data);\n            clean = clean || dead;\n        }\n\n        if(clean) {\n            handlers.erase(std::remove_if(handlers.begin(), handlers.end(), [](auto &handler) {\n                return !handler.instance;\n            }), handlers.end());\n        }\n    }\n\n    /**\n     * @brief Aborts all scheduled processes.\n     *\n     * Unless an immediate operation is requested, the abort is scheduled for\n     * the next tick. Processes won't be executed anymore in any case.<br/>\n     * Once a process is fully aborted and thus finished, it's discarded along\n     * with its child, if any.\n     *\n     * @param immediately Requests an immediate operation.\n     */\n    void abort(const bool immediately = false) {\n        decltype(handlers) exec;\n        exec.swap(handlers);\n\n        for(auto &&handler: exec) {\n            handler.abort(handler, immediately);\n        }\n\n        std::move(handlers.begin(), handlers.end(), std::back_inserter(exec));\n        handlers.swap(exec);\n    }\n\nprivate:\n    std::vector<process_handler> handlers{};\n};\n\n\n}\n\n\n#endif\n\n// #include \"resource/cache.hpp\"\n#ifndef ENTT_RESOURCE_CACHE_HPP\n#define ENTT_RESOURCE_CACHE_HPP\n\n\n#include <memory>\n#include <type_traits>\n#include <unordered_map>\n#include <utility>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n// #include \"../core/fwd.hpp\"\n#ifndef ENTT_CORE_FWD_HPP\n#define ENTT_CORE_FWD_HPP\n\n\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/*! @brief Alias declaration for type identifiers. */\nusing id_type = ENTT_ID_TYPE;\n\n\n}\n\n\n#endif\n\n// #include \"handle.hpp\"\n#ifndef ENTT_RESOURCE_HANDLE_HPP\n#define ENTT_RESOURCE_HANDLE_HPP\n\n\n#include <memory>\n#include <utility>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n#ifndef ENTT_RESOURCE_FWD_HPP\n#define ENTT_RESOURCE_FWD_HPP\n\n\nnamespace entt {\n\n\n/*! @struct cache */\ntemplate<typename>\nstruct cache;\n\n/*! @class handle */\ntemplate<typename>\nclass handle;\n\n/*! @class loader */\ntemplate<typename, typename>\nclass loader;\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Shared resource handle.\n *\n * A shared resource handle is a small class that wraps a resource and keeps it\n * alive even if it's deleted from the cache. It can be either copied or\n * moved. A handle shares a reference to the same resource with all the other\n * handles constructed for the same identifier.<br/>\n * As a rule of thumb, resources should never be copied nor moved. Handles are\n * the way to go to keep references to them.\n *\n * @tparam Resource Type of resource managed by a handle.\n */\ntemplate<typename Resource>\nclass handle {\n    /*! @brief Resource handles are friends of their caches. */\n    friend struct cache<Resource>;\n\n    handle(std::shared_ptr<Resource> res) ENTT_NOEXCEPT\n        : resource{std::move(res)}\n    {}\n\npublic:\n    /*! @brief Default constructor. */\n    handle() ENTT_NOEXCEPT = default;\n\n    /**\n     * @brief Gets a reference to the managed resource.\n     *\n     * @warning\n     * The behavior is undefined if the handle doesn't contain a resource.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * handle is empty.\n     *\n     * @return A reference to the managed resource.\n     */\n    const Resource & get() const ENTT_NOEXCEPT {\n        ENTT_ASSERT(static_cast<bool>(resource));\n        return *resource;\n    }\n\n    /*! @copydoc get */\n    Resource & get() ENTT_NOEXCEPT {\n        return const_cast<Resource &>(std::as_const(*this).get());\n    }\n\n    /*! @copydoc get */\n    operator const Resource & () const ENTT_NOEXCEPT { return get(); }\n\n    /*! @copydoc get */\n    operator Resource & () ENTT_NOEXCEPT { return get(); }\n\n    /*! @copydoc get */\n    const Resource & operator *() const ENTT_NOEXCEPT { return get(); }\n\n    /*! @copydoc get */\n    Resource & operator *() ENTT_NOEXCEPT { return get(); }\n\n    /**\n     * @brief Gets a pointer to the managed resource.\n     *\n     * @warning\n     * The behavior is undefined if the handle doesn't contain a resource.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * handle is empty.\n     *\n     * @return A pointer to the managed resource or `nullptr` if the handle\n     * contains no resource at all.\n     */\n    const Resource * operator->() const ENTT_NOEXCEPT {\n        ENTT_ASSERT(static_cast<bool>(resource));\n        return resource.get();\n    }\n\n    /*! @copydoc operator-> */\n    Resource * operator->() ENTT_NOEXCEPT {\n        return const_cast<Resource *>(std::as_const(*this).operator->());\n    }\n\n    /**\n     * @brief Returns true if a handle contains a resource, false otherwise.\n     * @return True if the handle contains a resource, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return static_cast<bool>(resource);\n    }\n\nprivate:\n    std::shared_ptr<Resource> resource;\n};\n\n\n}\n\n\n#endif\n\n// #include \"loader.hpp\"\n#ifndef ENTT_RESOURCE_LOADER_HPP\n#define ENTT_RESOURCE_LOADER_HPP\n\n\n#include <memory>\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Base class for resource loaders.\n *\n * Resource loaders must inherit from this class and stay true to the CRTP\n * idiom. Moreover, a resource loader must expose a public, const member\n * function named `load` that accepts a variable number of arguments and returns\n * a shared pointer to the resource just created.<br/>\n * As an example:\n *\n * @code{.cpp}\n * struct my_resource {};\n *\n * struct my_loader: entt::loader<my_loader, my_resource> {\n *     std::shared_ptr<my_resource> load(int) const {\n *         // use the integer value somehow\n *         return std::make_shared<my_resource>();\n *     }\n * };\n * @endcode\n *\n * In general, resource loaders should not have a state or retain data of any\n * type. They should let the cache manage their resources instead.\n *\n * @note\n * Base class and CRTP idiom aren't strictly required with the current\n * implementation. One could argue that a cache can easily work with loaders of\n * any type. However, future changes won't be breaking ones by forcing the use\n * of a base class today and that's why the model is already in its place.\n *\n * @tparam Loader Type of the derived class.\n * @tparam Resource Type of resource for which to use the loader.\n */\ntemplate<typename Loader, typename Resource>\nclass loader {\n    /*! @brief Resource loaders are friends of their caches. */\n    friend struct cache<Resource>;\n\n    /**\n     * @brief Loads the resource and returns it.\n     * @tparam Args Types of arguments for the loader.\n     * @param args Arguments for the loader.\n     * @return The resource just loaded or an empty pointer in case of errors.\n     */\n    template<typename... Args>\n    std::shared_ptr<Resource> get(Args &&... args) const {\n        return static_cast<const Loader *>(this)->load(std::forward<Args>(args)...);\n    }\n};\n\n\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Simple cache for resources of a given type.\n *\n * Minimal implementation of a cache for resources of a given type. It doesn't\n * offer much functionalities but it's suitable for small or medium sized\n * applications and can be freely inherited to add targeted functionalities for\n * large sized applications.\n *\n * @tparam Resource Type of resources managed by a cache.\n */\ntemplate<typename Resource>\nstruct cache {\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Type of resources managed by a cache. */\n    using resource_type = Resource;\n\n    /*! @brief Default constructor. */\n    cache() = default;\n\n    /*! @brief Default move constructor. */\n    cache(cache &&) = default;\n\n    /*! @brief Default move assignment operator. @return This cache. */\n    cache & operator=(cache &&) = default;\n\n    /**\n     * @brief Number of resources managed by a cache.\n     * @return Number of resources currently stored.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return resources.size();\n    }\n\n    /**\n     * @brief Returns true if a cache contains no resources, false otherwise.\n     * @return True if the cache contains no resources, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return resources.empty();\n    }\n\n    /**\n     * @brief Clears a cache and discards all its resources.\n     *\n     * Handles are not invalidated and the memory used by a resource isn't\n     * freed as long as at least a handle keeps the resource itself alive.\n     */\n    void clear() ENTT_NOEXCEPT {\n        resources.clear();\n    }\n\n    /**\n     * @brief Loads the resource that corresponds to a given identifier.\n     *\n     * In case an identifier isn't already present in the cache, it loads its\n     * resource and stores it aside for future uses. Arguments are forwarded\n     * directly to the loader in order to construct properly the requested\n     * resource.\n     *\n     * @note\n     * If the identifier is already present in the cache, this function does\n     * nothing and the arguments are simply discarded.\n     *\n     * @warning\n     * If the resource cannot be loaded correctly, the returned handle will be\n     * invalid and any use of it will result in undefined behavior.\n     *\n     * @tparam Loader Type of loader to use to load the resource if required.\n     * @tparam Args Types of arguments to use to load the resource if required.\n     * @param id Unique resource identifier.\n     * @param args Arguments to use to load the resource if required.\n     * @return A handle for the given resource.\n     */\n    template<typename Loader, typename... Args>\n    entt::handle<Resource> load(const id_type id, Args &&... args) {\n        static_assert(std::is_base_of_v<loader<Loader, Resource>, Loader>);\n        entt::handle<Resource> resource{};\n\n        if(auto it = resources.find(id); it == resources.cend()) {\n            if(auto instance = Loader{}.get(std::forward<Args>(args)...); instance) {\n                resources[id] = instance;\n                resource = std::move(instance);\n            }\n        } else {\n            resource = it->second;\n        }\n\n        return resource;\n    }\n\n    /**\n     * @brief Reloads a resource or loads it for the first time if not present.\n     *\n     * Equivalent to the following snippet (pseudocode):\n     *\n     * @code{.cpp}\n     * cache.discard(id);\n     * cache.load(id, args...);\n     * @endcode\n     *\n     * Arguments are forwarded directly to the loader in order to construct\n     * properly the requested resource.\n     *\n     * @warning\n     * If the resource cannot be loaded correctly, the returned handle will be\n     * invalid and any use of it will result in undefined behavior.\n     *\n     * @tparam Loader Type of loader to use to load the resource.\n     * @tparam Args Types of arguments to use to load the resource.\n     * @param id Unique resource identifier.\n     * @param args Arguments to use to load the resource.\n     * @return A handle for the given resource.\n     */\n    template<typename Loader, typename... Args>\n    entt::handle<Resource> reload(const id_type id, Args &&... args) {\n        return (discard(id), load<Loader>(id, std::forward<Args>(args)...));\n    }\n\n    /**\n     * @brief Creates a temporary handle for a resource.\n     *\n     * Arguments are forwarded directly to the loader in order to construct\n     * properly the requested resource. The handle isn't stored aside and the\n     * cache isn't in charge of the lifetime of the resource itself.\n     *\n     * @tparam Loader Type of loader to use to load the resource.\n     * @tparam Args Types of arguments to use to load the resource.\n     * @param args Arguments to use to load the resource.\n     * @return A handle for the given resource.\n     */\n    template<typename Loader, typename... Args>\n    entt::handle<Resource> temp(Args &&... args) const {\n        return { Loader{}.get(std::forward<Args>(args)...) };\n    }\n\n    /**\n     * @brief Creates a handle for a given resource identifier.\n     *\n     * A resource handle can be in a either valid or invalid state. In other\n     * terms, a resource handle is properly initialized with a resource if the\n     * cache contains the resource itself. Otherwise the returned handle is\n     * uninitialized and accessing it results in undefined behavior.\n     *\n     * @sa handle\n     *\n     * @param id Unique resource identifier.\n     * @return A handle for the given resource.\n     */\n    entt::handle<Resource> handle(const id_type id) const {\n        auto it = resources.find(id);\n        return { it == resources.end() ? nullptr : it->second };\n    }\n\n    /**\n     * @brief Checks if a cache contains a given identifier.\n     * @param id Unique resource identifier.\n     * @return True if the cache contains the resource, false otherwise.\n     */\n    bool contains(const id_type id) const {\n        return (resources.find(id) != resources.cend());\n    }\n\n    /**\n     * @brief Discards the resource that corresponds to a given identifier.\n     *\n     * Handles are not invalidated and the memory used by the resource isn't\n     * freed as long as at least a handle keeps the resource itself alive.\n     *\n     * @param id Unique resource identifier.\n     */\n    void discard(const id_type id) {\n        if(auto it = resources.find(id); it != resources.end()) {\n            resources.erase(it);\n        }\n    }\n\n    /**\n     * @brief Iterates all resources.\n     *\n     * The function object is invoked for each element. It is provided with\n     * either the resource identifier, the resource handle or both of them.<br/>\n     * The signature of the function must be equivalent to one of the following\n     * forms:\n     *\n     * @code{.cpp}\n     * void(const id_type);\n     * void(handle<Resource>);\n     * void(const id_type, handle<Resource>);\n     * @endcode\n     *\n     * @tparam Func Type of the function object to invoke.\n     * @param func A valid function object.\n     */\n    template <typename Func>\n    void each(Func func) const {\n        auto begin = resources.begin();\n        auto end = resources.end();\n\n        while(begin != end) {\n            auto curr = begin++;\n\n            if constexpr(std::is_invocable_v<Func, id_type>) {\n                func(curr->first);\n            } else if constexpr(std::is_invocable_v<Func, entt::handle<Resource>>) {\n                func(entt::handle{ curr->second });\n            } else {\n                func(curr->first, entt::handle{ curr->second });\n            }\n        }\n    }\n\nprivate:\n    std::unordered_map<id_type, std::shared_ptr<Resource>> resources;\n};\n\n\n}\n\n\n#endif\n\n// #include \"resource/handle.hpp\"\n\n// #include \"resource/loader.hpp\"\n\n// #include \"signal/delegate.hpp\"\n#ifndef ENTT_SIGNAL_DELEGATE_HPP\n#define ENTT_SIGNAL_DELEGATE_HPP\n\n\n#include <tuple>\n#include <cstddef>\n#include <utility>\n#include <functional>\n#include <type_traits>\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename Ret, typename... Args>\nauto function_pointer(Ret(*)(Args...)) -> Ret(*)(Args...);\n\n\ntemplate<typename Ret, typename Type, typename... Args, typename Other>\nauto function_pointer(Ret(*)(Type, Args...), Other &&) -> Ret(*)(Args...);\n\n\ntemplate<typename Class, typename Ret, typename... Args, typename... Other>\nauto function_pointer(Ret(Class:: *)(Args...), Other &&...) -> Ret(*)(Args...);\n\n\ntemplate<typename Class, typename Ret, typename... Args, typename... Other>\nauto function_pointer(Ret(Class:: *)(Args...) const, Other &&...) -> Ret(*)(Args...);\n\n\ntemplate<typename Class, typename Type, typename... Other>\nauto function_pointer(Type Class:: *, Other &&...) -> Type(*)();\n\n\ntemplate<typename... Type>\nusing function_pointer_t = decltype(internal::function_pointer(std::declval<Type>()...));\n\n\ntemplate<typename... Class, typename Ret, typename... Args>\nconstexpr auto index_sequence_for(Ret(*)(Args...)) {\n    return std::index_sequence_for<Class..., Args...>{};\n}\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/*! @brief Used to wrap a function or a member of a specified type. */\ntemplate<auto>\nstruct connect_arg_t {};\n\n\n/*! @brief Constant of type connect_arg_t used to disambiguate calls. */\ntemplate<auto Func>\ninline constexpr connect_arg_t<Func> connect_arg{};\n\n\n/**\n * @brief Basic delegate implementation.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is a function type.\n */\ntemplate<typename>\nclass delegate;\n\n\n/**\n * @brief Utility class to use to send around functions and members.\n *\n * Unmanaged delegate for function pointers and members. Users of this class are\n * in charge of disconnecting instances before deleting them.\n *\n * A delegate can be used as a general purpose invoker without memory overhead\n * for free functions possibly with payloads and bound or unbound members.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nclass delegate<Ret(Args...)> {\n    using proto_fn_type = Ret(const void *, Args...);\n\n    template<auto Candidate, std::size_t... Index>\n    auto wrap(std::index_sequence<Index...>) ENTT_NOEXCEPT {\n        return [](const void *, Args... args) -> Ret {\n            const auto arguments = std::forward_as_tuple(std::forward<Args>(args)...);\n            return Ret(std::invoke(Candidate, std::forward<std::tuple_element_t<Index, std::tuple<Args...>>>(std::get<Index>(arguments))...));\n        };\n    }\n\n    template<auto Candidate, typename Type, std::size_t... Index>\n    auto wrap(Type &, std::index_sequence<Index...>) ENTT_NOEXCEPT {\n        return [](const void *payload, Args... args) -> Ret {\n            const auto arguments = std::forward_as_tuple(std::forward<Args>(args)...);\n            Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n            return Ret(std::invoke(Candidate, *curr, std::forward<std::tuple_element_t<Index, std::tuple<Args...>>>(std::get<Index>(arguments))...));\n        };\n    }\n\n    template<auto Candidate, typename Type, std::size_t... Index>\n    auto wrap(Type *, std::index_sequence<Index...>) ENTT_NOEXCEPT {\n        return [](const void *payload, Args... args) -> Ret {\n            const auto arguments = std::forward_as_tuple(std::forward<Args>(args)...);\n            Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n            return Ret(std::invoke(Candidate, curr, std::forward<std::tuple_element_t<Index, std::tuple<Args...>>>(std::get<Index>(arguments))...));\n        };\n    }\n\npublic:\n    /*! @brief Function type of the delegate. */\n    using function_type = Ret(Args...);\n\n    /*! @brief Default constructor. */\n    delegate() ENTT_NOEXCEPT\n        : fn{nullptr}, data{nullptr}\n    {}\n\n    /**\n     * @brief Constructs a delegate and connects a free function or an unbound\n     * member.\n     * @tparam Candidate Function or member to connect to the delegate.\n     */\n    template<auto Candidate>\n    delegate(connect_arg_t<Candidate>) ENTT_NOEXCEPT\n        : delegate{}\n    {\n        connect<Candidate>();\n    }\n\n    /**\n     * @brief Constructs a delegate and connects a free function with payload or\n     * a bound member.\n     * @tparam Candidate Function or member to connect to the delegate.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    delegate(connect_arg_t<Candidate>, Type &&value_or_instance) ENTT_NOEXCEPT\n        : delegate{}\n    {\n        connect<Candidate>(std::forward<Type>(value_or_instance));\n    }\n\n    /**\n     * @brief Connects a free function or an unbound member to a delegate.\n     * @tparam Candidate Function or member to connect to the delegate.\n     */\n    template<auto Candidate>\n    void connect() ENTT_NOEXCEPT {\n        data = nullptr;\n\n        if constexpr(std::is_invocable_r_v<Ret, decltype(Candidate), Args...>) {\n            fn = [](const void *, Args... args) -> Ret {\n                return Ret(std::invoke(Candidate, std::forward<Args>(args)...));\n            };\n        } else if constexpr(std::is_member_pointer_v<decltype(Candidate)>) {\n            fn = wrap<Candidate>(internal::index_sequence_for<std::tuple_element_t<0, std::tuple<Args...>>>(internal::function_pointer_t<decltype(Candidate)>{}));\n        } else {\n            fn = wrap<Candidate>(internal::index_sequence_for(internal::function_pointer_t<decltype(Candidate)>{}));\n        }\n    }\n\n    /**\n     * @brief Connects a free function with payload or a bound member to a\n     * delegate.\n     *\n     * The delegate isn't responsible for the connected object or the payload.\n     * Users must always guarantee that the lifetime of the instance overcomes\n     * the one  of the delegate.<br/>\n     * When used to connect a free function with payload, its signature must be\n     * such that the instance is the first argument before the ones used to\n     * define the delegate itself.\n     *\n     * @tparam Candidate Function or member to connect to the delegate.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid reference that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    void connect(Type &value_or_instance) ENTT_NOEXCEPT {\n        data = &value_or_instance;\n\n        if constexpr(std::is_invocable_r_v<Ret, decltype(Candidate), Type &, Args...>) {\n            fn = [](const void *payload, Args... args) -> Ret {\n                Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n                return Ret(std::invoke(Candidate, *curr, std::forward<Args>(args)...));\n            };\n        } else {\n            fn = wrap<Candidate>(value_or_instance, internal::index_sequence_for(internal::function_pointer_t<decltype(Candidate), Type>{}));\n        }\n    }\n\n    /**\n     * @brief Connects a free function with payload or a bound member to a\n     * delegate.\n     *\n     * @sa connect(Type &)\n     *\n     * @tparam Candidate Function or member to connect to the delegate.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid pointer that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    void connect(Type *value_or_instance) ENTT_NOEXCEPT {\n        data = value_or_instance;\n\n        if constexpr(std::is_invocable_r_v<Ret, decltype(Candidate), Type *, Args...>) {\n            fn = [](const void *payload, Args... args) -> Ret {\n                Type *curr = static_cast<Type *>(const_cast<std::conditional_t<std::is_const_v<Type>, const void *, void *>>(payload));\n                return Ret(std::invoke(Candidate, curr, std::forward<Args>(args)...));\n            };\n        } else {\n            fn = wrap<Candidate>(value_or_instance, internal::index_sequence_for(internal::function_pointer_t<decltype(Candidate), Type>{}));\n        }\n    }\n\n    /**\n     * @brief Resets a delegate.\n     *\n     * After a reset, a delegate cannot be invoked anymore.\n     */\n    void reset() ENTT_NOEXCEPT {\n        fn = nullptr;\n        data = nullptr;\n    }\n\n    /**\n     * @brief Returns the instance or the payload linked to a delegate, if any.\n     * @return An opaque pointer to the underlying data.\n     */\n    const void * instance() const ENTT_NOEXCEPT {\n        return data;\n    }\n\n    /**\n     * @brief Triggers a delegate.\n     *\n     * The delegate invokes the underlying function and returns the result.\n     *\n     * @warning\n     * Attempting to trigger an invalid delegate results in undefined\n     * behavior.<br/>\n     * An assertion will abort the execution at runtime in debug mode if the\n     * delegate has not yet been set.\n     *\n     * @param args Arguments to use to invoke the underlying function.\n     * @return The value returned by the underlying function.\n     */\n    Ret operator()(Args... args) const {\n        ENTT_ASSERT(fn);\n        return fn(data, std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Checks whether a delegate actually stores a listener.\n     * @return False if the delegate is empty, true otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        // no need to test also data\n        return !(fn == nullptr);\n    }\n\n    /**\n     * @brief Compares the contents of two delegates.\n     * @param other Delegate with which to compare.\n     * @return False if the two contents differ, true otherwise.\n     */\n    bool operator==(const delegate<Ret(Args...)> &other) const ENTT_NOEXCEPT {\n        return fn == other.fn && data == other.data;\n    }\n\nprivate:\n    proto_fn_type *fn;\n    const void *data;\n};\n\n\n/**\n * @brief Compares the contents of two delegates.\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n * @param lhs A valid delegate object.\n * @param rhs A valid delegate object.\n * @return True if the two contents differ, false otherwise.\n */\ntemplate<typename Ret, typename... Args>\nbool operator!=(const delegate<Ret(Args...)> &lhs, const delegate<Ret(Args...)> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/**\n * @brief Deduction guide.\n * @tparam Candidate Function or member to connect to the delegate.\n */\ntemplate<auto Candidate>\ndelegate(connect_arg_t<Candidate>) ENTT_NOEXCEPT\n-> delegate<std::remove_pointer_t<internal::function_pointer_t<decltype(Candidate)>>>;\n\n\n/**\n * @brief Deduction guide.\n * @tparam Candidate Function or member to connect to the delegate.\n * @tparam Type Type of class or type of payload.\n */\ntemplate<auto Candidate, typename Type>\ndelegate(connect_arg_t<Candidate>, Type &&) ENTT_NOEXCEPT\n-> delegate<std::remove_pointer_t<internal::function_pointer_t<decltype(Candidate), Type>>>;\n\n\n}\n\n\n#endif\n\n// #include \"signal/dispatcher.hpp\"\n#ifndef ENTT_SIGNAL_DISPATCHER_HPP\n#define ENTT_SIGNAL_DISPATCHER_HPP\n\n\n#include <cstddef>\n#include <memory>\n#include <type_traits>\n#include <utility>\n#include <vector>\n// #include \"../config/config.h\"\n\n// #include \"../core/fwd.hpp\"\n#ifndef ENTT_CORE_FWD_HPP\n#define ENTT_CORE_FWD_HPP\n\n\n// #include \"../config/config.h\"\n#ifndef ENTT_CONFIG_CONFIG_H\n#define ENTT_CONFIG_CONFIG_H\n\n\n#ifndef ENTT_NOEXCEPT\n#   define ENTT_NOEXCEPT noexcept\n#endif\n\n\n#ifndef ENTT_HS_SUFFIX\n#   define ENTT_HS_SUFFIX _hs\n#endif\n\n\n#ifndef ENTT_HWS_SUFFIX\n#   define ENTT_HWS_SUFFIX _hws\n#endif\n\n\n#ifndef ENTT_USE_ATOMIC\n#   define ENTT_MAYBE_ATOMIC(Type) Type\n#else\n#   include <atomic>\n#   define ENTT_MAYBE_ATOMIC(Type) std::atomic<Type>\n#endif\n\n\n#ifndef ENTT_ID_TYPE\n#   include <cstdint>\n#   define ENTT_ID_TYPE std::uint32_t\n#endif\n\n\n#ifndef ENTT_PAGE_SIZE\n#   define ENTT_PAGE_SIZE 32768\n#endif\n\n\n#ifndef ENTT_ASSERT\n#   include <cassert>\n#   define ENTT_ASSERT(condition) assert(condition)\n#endif\n\n\n#ifndef ENTT_NO_ETO\n#   include <type_traits>\n#   define ENTT_IS_EMPTY(Type) std::is_empty_v<Type>\n#else\n#   include <type_traits>\n#   // sfinae-friendly definition\n#   define ENTT_IS_EMPTY(Type) (false && std::is_empty_v<Type>)\n#endif\n\n\n#ifndef ENTT_STANDARD_CPP\n#   if defined _MSC_VER\n#      define ENTT_PRETTY_FUNCTION __FUNCSIG__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __clang__ || (defined __GNUC__ && __GNUC__ > 8)\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) constexpr\n#   elif defined __GNUC__\n#      define ENTT_PRETTY_FUNCTION __PRETTY_FUNCTION__\n#      define ENTT_PRETTY_FUNCTION_CONSTEXPR(...) __VA_ARGS__\n#   endif\n#endif\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/*! @brief Alias declaration for type identifiers. */\nusing id_type = ENTT_ID_TYPE;\n\n\n}\n\n\n#endif\n\n// #include \"../core/type_info.hpp\"\n#ifndef ENTT_CORE_TYPE_INFO_HPP\n#define ENTT_CORE_TYPE_INFO_HPP\n\n\n// #include \"../config/config.h\"\n\n// #include \"../core/attribute.h\"\n#ifndef ENTT_CORE_ATTRIBUTE_H\n#define ENTT_CORE_ATTRIBUTE_H\n\n\n#ifndef ENTT_EXPORT\n#   if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER\n#       define ENTT_EXPORT __declspec(dllexport)\n#       define ENTT_IMPORT __declspec(dllimport)\n#       define ENTT_HIDDEN\n#   elif defined __GNUC__ && __GNUC__ >= 4\n#       define ENTT_EXPORT __attribute__((visibility(\"default\")))\n#       define ENTT_IMPORT __attribute__((visibility(\"default\")))\n#       define ENTT_HIDDEN __attribute__((visibility(\"hidden\")))\n#   else /* Unsupported compiler */\n#       define ENTT_EXPORT\n#       define ENTT_IMPORT\n#       define ENTT_HIDDEN\n#   endif\n#endif\n\n\n#ifndef ENTT_API\n#   if defined ENTT_API_EXPORT\n#       define ENTT_API ENTT_EXPORT\n#   elif defined ENTT_API_IMPORT\n#       define ENTT_API ENTT_IMPORT\n#   else /* No API */\n#       define ENTT_API\n#   endif\n#endif\n\n\n#endif\n\n// #include \"hashed_string.hpp\"\n#ifndef ENTT_CORE_HASHED_STRING_HPP\n#define ENTT_CORE_HASHED_STRING_HPP\n\n\n#include <cstddef>\n#include <cstdint>\n// #include \"../config/config.h\"\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\ntemplate<typename>\nstruct fnv1a_traits;\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint32_t> {\n    using type = std::uint32_t;\n    static constexpr std::uint32_t offset = 2166136261;\n    static constexpr std::uint32_t prime = 16777619;\n};\n\n\ntemplate<>\nstruct fnv1a_traits<std::uint64_t> {\n    using type = std::uint64_t;\n    static constexpr std::uint64_t offset = 14695981039346656037ull;\n    static constexpr std::uint64_t prime = 1099511628211ull;\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Zero overhead unique identifier.\n *\n * A hashed string is a compile-time tool that allows users to use\n * human-readable identifers in the codebase while using their numeric\n * counterparts at runtime.<br/>\n * Because of that, a hashed string can also be used in constant expressions if\n * required.\n *\n * @tparam Char Character type.\n */\ntemplate<typename Char>\nclass basic_hashed_string {\n    using traits_type = internal::fnv1a_traits<id_type>;\n\n    struct const_wrapper {\n        // non-explicit constructor on purpose\n        constexpr const_wrapper(const Char *curr) ENTT_NOEXCEPT: str{curr} {}\n        const Char *str;\n    };\n\n    // Fowler–Noll–Vo hash function v. 1a - the good\n    static constexpr id_type helper(const Char *curr) ENTT_NOEXCEPT {\n        auto value = traits_type::offset;\n\n        while(*curr != 0) {\n            value = (value ^ static_cast<traits_type::type>(*(curr++))) * traits_type::prime;\n        }\n\n        return value;\n    }\n\npublic:\n    /*! @brief Character type. */\n    using value_type = Char;\n    /*! @brief Unsigned integer type. */\n    using hash_type = id_type;\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * const auto value = basic_hashed_string<char>::to_value(\"my.png\");\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param str Human-readable identifer.\n     * @return The numeric representation of the string.\n     */\n    template<std::size_t N>\n    static constexpr hash_type value(const value_type (&str)[N]) ENTT_NOEXCEPT {\n        return helper(str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const_wrapper wrapper) ENTT_NOEXCEPT {\n        return helper(wrapper.str);\n    }\n\n    /**\n     * @brief Returns directly the numeric representation of a string view.\n     * @param str Human-readable identifer.\n     * @param size Length of the string to hash.\n     * @return The numeric representation of the string.\n     */\n    static hash_type value(const value_type *str, std::size_t size) ENTT_NOEXCEPT {\n        id_type partial{traits_type::offset};\n        while(size--) { partial = (partial^(str++)[0])*traits_type::prime; }\n        return partial;\n    }\n\n    /*! @brief Constructs an empty hashed string. */\n    constexpr basic_hashed_string() ENTT_NOEXCEPT\n        : str{nullptr}, hash{}\n    {}\n\n    /**\n     * @brief Constructs a hashed string from an array of const characters.\n     *\n     * Forcing template resolution avoids implicit conversions. An\n     * human-readable identifier can be anything but a plain, old bunch of\n     * characters.<br/>\n     * Example of use:\n     * @code{.cpp}\n     * basic_hashed_string<char> hs{\"my.png\"};\n     * @endcode\n     *\n     * @tparam N Number of characters of the identifier.\n     * @param curr Human-readable identifer.\n     */\n    template<std::size_t N>\n    constexpr basic_hashed_string(const value_type (&curr)[N]) ENTT_NOEXCEPT\n        : str{curr}, hash{helper(curr)}\n    {}\n\n    /**\n     * @brief Explicit constructor on purpose to avoid constructing a hashed\n     * string directly from a `const value_type *`.\n     * @param wrapper Helps achieving the purpose by relying on overloading.\n     */\n    explicit constexpr basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT\n        : str{wrapper.str}, hash{helper(wrapper.str)}\n    {}\n\n    /**\n     * @brief Returns the human-readable representation of a hashed string.\n     * @return The string used to initialize the instance.\n     */\n    constexpr const value_type * data() const ENTT_NOEXCEPT {\n        return str;\n    }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr hash_type value() const ENTT_NOEXCEPT {\n        return hash;\n    }\n\n    /*! @copydoc data */\n    constexpr operator const value_type *() const ENTT_NOEXCEPT { return data(); }\n\n    /**\n     * @brief Returns the numeric representation of a hashed string.\n     * @return The numeric representation of the instance.\n     */\n    constexpr operator hash_type() const ENTT_NOEXCEPT { return value(); }\n\n    /**\n     * @brief Compares two hashed strings.\n     * @param other Hashed string with which to compare.\n     * @return True if the two hashed strings are identical, false otherwise.\n     */\n    constexpr bool operator==(const basic_hashed_string &other) const ENTT_NOEXCEPT {\n        return hash == other.hash;\n    }\n\nprivate:\n    const value_type *str;\n    hash_type hash;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the character type of the hashed string directly from a\n * human-readable identifer provided to the constructor.\n *\n * @tparam Char Character type.\n * @tparam N Number of characters of the identifier.\n * @param str Human-readable identifer.\n */\ntemplate<typename Char, std::size_t N>\nbasic_hashed_string(const Char (&str)[N]) ENTT_NOEXCEPT\n-> basic_hashed_string<Char>;\n\n\n/**\n * @brief Compares two hashed strings.\n * @tparam Char Character type.\n * @param lhs A valid hashed string.\n * @param rhs A valid hashed string.\n * @return True if the two hashed strings are identical, false otherwise.\n */\ntemplate<typename Char>\nconstexpr bool operator!=(const basic_hashed_string<Char> &lhs, const basic_hashed_string<Char> &rhs) ENTT_NOEXCEPT {\n    return !(lhs == rhs);\n}\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_string = basic_hashed_string<char>;\n\n\n/*! @brief Aliases for common character types. */\nusing hashed_wstring = basic_hashed_string<wchar_t>;\n\n\n}\n\n\n/**\n * @brief User defined literal for hashed strings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed string.\n */\nconstexpr entt::hashed_string operator\"\" ENTT_HS_SUFFIX(const char *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_string{str};\n}\n\n\n/**\n * @brief User defined literal for hashed wstrings.\n * @param str The literal without its suffix.\n * @return A properly initialized hashed wstring.\n */\nconstexpr entt::hashed_wstring operator\"\" ENTT_HWS_SUFFIX(const wchar_t *str, std::size_t) ENTT_NOEXCEPT {\n    return entt::hashed_wstring{str};\n}\n\n\n#endif\n\n// #include \"fwd.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @cond TURN_OFF_DOXYGEN\n * Internal details not to be documented.\n */\n\n\nnamespace internal {\n\n\nstruct ENTT_API type_index {\n    static id_type next() ENTT_NOEXCEPT {\n        static ENTT_MAYBE_ATOMIC(id_type) value{};\n        return value++;\n    }\n};\n\n\n}\n\n\n/**\n * Internal details not to be documented.\n * @endcond TURN_OFF_DOXYGEN\n */\n\n\n/**\n * @brief Type index.\n * @tparam Type Type for which to generate a sequential identifier.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_index {\n    /**\n     * @brief Returns the sequential identifier of a given type.\n     * @return The sequential identifier of a given type.\n     */\n    static id_type value() ENTT_NOEXCEPT {\n        static const id_type value = internal::type_index::next();\n        return value;\n    }\n};\n\n\n/**\n * @brief Provides the member constant `value` to true if a given type is\n * indexable, false otherwise.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename, typename = void>\nstruct has_type_index: std::false_type {};\n\n\n/*! @brief has_type_index */\ntemplate<typename Type>\nstruct has_type_index<Type, std::void_t<decltype(type_index<Type>::value())>>: std::true_type {};\n\n\n/**\n * @brief Helper variable template.\n * @tparam Type Potentially indexable type.\n */\ntemplate<typename Type>\ninline constexpr bool has_type_index_v = has_type_index<Type>::value;\n\n\n/**\n * @brief Type info.\n * @tparam Type Type for which to generate information.\n */\ntemplate<typename Type, typename = void>\nstruct ENTT_API type_info {\n    /**\n     * @brief Returns the numeric representation of a given type.\n     * @return The numeric representation of the given type.\n     */\n#if defined ENTT_PRETTY_FUNCTION\n    static ENTT_PRETTY_FUNCTION_CONSTEXPR() id_type id() ENTT_NOEXCEPT {\n        ENTT_PRETTY_FUNCTION_CONSTEXPR(static const) auto value = entt::hashed_string::value(ENTT_PRETTY_FUNCTION);\n        return value;\n    }\n#else\n    static id_type id() ENTT_NOEXCEPT {\n        return type_index<Type>::value();\n    }\n#endif\n};\n\n\n}\n\n\n#endif\n\n// #include \"sigh.hpp\"\n#ifndef ENTT_SIGNAL_SIGH_HPP\n#define ENTT_SIGNAL_SIGH_HPP\n\n\n#include <vector>\n#include <utility>\n#include <iterator>\n#include <algorithm>\n#include <functional>\n#include <type_traits>\n// #include \"../config/config.h\"\n\n// #include \"delegate.hpp\"\n\n// #include \"fwd.hpp\"\n#ifndef ENTT_SIGNAL_FWD_HPP\n#define ENTT_SIGNAL_FWD_HPP\n\n\nnamespace entt {\n\n\n/*! @class delegate */\ntemplate<typename>\nclass delegate;\n\n/*! @class dispatcher */\nclass dispatcher;\n\n/*! @class emitter */\ntemplate<typename>\nclass emitter;\n\n/*! @class connection */\nclass connection;\n\n/*! @class scoped_connection */\nstruct scoped_connection;\n\n/*! @class sink */\ntemplate<typename>\nclass sink;\n\n/*! @class sigh */\ntemplate<typename>\nclass sigh;\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Sink class.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is a function type.\n *\n * @tparam Function A valid function type.\n */\ntemplate<typename Function>\nclass sink;\n\n\n/**\n * @brief Unmanaged signal handler.\n *\n * Primary template isn't defined on purpose. All the specializations give a\n * compile-time error unless the template parameter is a function type.\n *\n * @tparam Function A valid function type.\n */\ntemplate<typename Function>\nclass sigh;\n\n\n/**\n * @brief Unmanaged signal handler.\n *\n * It works directly with references to classes and pointers to member functions\n * as well as pointers to free functions. Users of this class are in charge of\n * disconnecting instances before deleting them.\n *\n * This class serves mainly two purposes:\n *\n * * Creating signals to use later to notify a bunch of listeners.\n * * Collecting results from a set of functions like in a voting system.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nclass sigh<Ret(Args...)> {\n    /*! @brief A sink is allowed to modify a signal. */\n    friend class sink<Ret(Args...)>;\n\npublic:\n    /*! @brief Unsigned integer type. */\n    using size_type = std::size_t;\n    /*! @brief Sink type. */\n    using sink_type = entt::sink<Ret(Args...)>;\n\n    /**\n     * @brief Instance type when it comes to connecting member functions.\n     * @tparam Class Type of class to which the member function belongs.\n     */\n    template<typename Class>\n    using instance_type = Class *;\n\n    /**\n     * @brief Number of listeners connected to the signal.\n     * @return Number of listeners currently connected.\n     */\n    size_type size() const ENTT_NOEXCEPT {\n        return calls.size();\n    }\n\n    /**\n     * @brief Returns false if at least a listener is connected to the signal.\n     * @return True if the signal has no listeners connected, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return calls.empty();\n    }\n\n    /**\n     * @brief Triggers a signal.\n     *\n     * All the listeners are notified. Order isn't guaranteed.\n     *\n     * @param args Arguments to use to invoke listeners.\n     */\n    void publish(Args... args) const {\n        for(auto &&call: std::as_const(calls)) {\n            call(args...);\n        }\n    }\n\n    /**\n     * @brief Collects return values from the listeners.\n     *\n     * The collector must expose a call operator with the following properties:\n     *\n     * * The return type is either `void` or such that it's convertible to\n     *   `bool`. In the second case, a true value will stop the iteration.\n     * * The list of parameters is empty if `Ret` is `void`, otherwise it\n     *   contains a single element such that `Ret` is convertible to it.\n     *\n     * @tparam Func Type of collector to use, if any.\n     * @param func A valid function object.\n     * @param args Arguments to use to invoke listeners.\n     */\n    template<typename Func>\n    void collect(Func func, Args... args) const {\n        for(auto &&call: calls) {\n            if constexpr(std::is_void_v<Ret>) {\n                if constexpr(std::is_invocable_r_v<bool, Func>) {\n                    call(args...);\n                    if(func()) { break; }\n                } else {\n                    call(args...);\n                    func();\n                }\n            } else {\n                if constexpr(std::is_invocable_r_v<bool, Func, Ret>) {\n                    if(func(call(args...))) { break; }\n                } else {\n                    func(call(args...));\n                }\n            }\n        }\n    }\n\nprivate:\n    std::vector<delegate<Ret(Args...)>> calls;\n};\n\n\n/**\n * @brief Connection class.\n *\n * Opaque object the aim of which is to allow users to release an already\n * estabilished connection without having to keep a reference to the signal or\n * the sink that generated it.\n */\nclass connection {\n    /*! @brief A sink is allowed to create connection objects. */\n    template<typename>\n    friend class sink;\n\n    connection(delegate<void(void *)> fn, void *ref)\n        : disconnect{fn}, signal{ref}\n    {}\n\npublic:\n    /*! @brief Default constructor. */\n    connection() = default;\n\n    /**\n     * @brief Checks whether a connection is properly initialized.\n     * @return True if the connection is properly initialized, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return static_cast<bool>(disconnect);\n    }\n\n    /*! @brief Breaks the connection. */\n    void release() {\n        if(disconnect) {\n            disconnect(signal);\n            disconnect.reset();\n        }\n    }\n\nprivate:\n    delegate<void(void *)> disconnect;\n    void *signal{};\n};\n\n\n/**\n * @brief Scoped connection class.\n *\n * Opaque object the aim of which is to allow users to release an already\n * estabilished connection without having to keep a reference to the signal or\n * the sink that generated it.<br/>\n * A scoped connection automatically breaks the link between the two objects\n * when it goes out of scope.\n */\nstruct scoped_connection {\n    /*! @brief Default constructor. */\n    scoped_connection() = default;\n\n    /**\n     * @brief Constructs a scoped connection from a basic connection.\n     * @param other A valid connection object.\n     */\n    scoped_connection(const connection &other)\n        : conn{other}\n    {}\n\n    /*! @brief Default copy constructor, deleted on purpose. */\n    scoped_connection(const scoped_connection &) = delete;\n\n    /*! @brief Automatically breaks the link on destruction. */\n    ~scoped_connection() {\n        conn.release();\n    }\n\n    /**\n     * @brief Default copy assignment operator, deleted on purpose.\n     * @return This scoped connection.\n     */\n    scoped_connection & operator=(const scoped_connection &) = delete;\n\n    /**\n     * @brief Acquires a connection.\n     * @param other The connection object to acquire.\n     * @return This scoped connection.\n     */\n    scoped_connection & operator=(connection other) {\n        conn = std::move(other);\n        return *this;\n    }\n\n    /**\n     * @brief Checks whether a scoped connection is properly initialized.\n     * @return True if the connection is properly initialized, false otherwise.\n     */\n    explicit operator bool() const ENTT_NOEXCEPT {\n        return static_cast<bool>(conn);\n    }\n\n    /*! @brief Breaks the connection. */\n    void release() {\n        conn.release();\n    }\n\nprivate:\n    connection conn;\n};\n\n\n/**\n * @brief Sink class.\n *\n * A sink is used to connect listeners to signals and to disconnect them.<br/>\n * The function type for a listener is the one of the signal to which it\n * belongs.\n *\n * The clear separation between a signal and a sink permits to store the former\n * as private data member without exposing the publish functionality to the\n * users of the class.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nclass sink<Ret(Args...)> {\n    using signal_type = sigh<Ret(Args...)>;\n    using difference_type = typename std::iterator_traits<typename decltype(signal_type::calls)::iterator>::difference_type;\n\n    template<auto Candidate, typename Type>\n    static void release(Type value_or_instance, void *signal) {\n        sink{*static_cast<signal_type *>(signal)}.disconnect<Candidate>(value_or_instance);\n    }\n\n    template<auto Candidate>\n    static void release(void *signal) {\n        sink{*static_cast<signal_type *>(signal)}.disconnect<Candidate>();\n    }\n\npublic:\n    /**\n     * @brief Constructs a sink that is allowed to modify a given signal.\n     * @param ref A valid reference to a signal object.\n     */\n    sink(sigh<Ret(Args...)> &ref) ENTT_NOEXCEPT\n        : offset{},\n          signal{&ref}\n    {}\n\n    /**\n     * @brief Returns false if at least a listener is connected to the sink.\n     * @return True if the sink has no listeners connected, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return signal->calls.empty();\n    }\n\n    /**\n     * @brief Returns a sink that connects before a given free function or an\n     * unbound member.\n     * @tparam Function A valid free function pointer.\n     * @return A properly initialized sink object.\n     */\n    template<auto Function>\n    sink before() {\n        delegate<Ret(Args...)> call{};\n        call.template connect<Function>();\n\n        const auto &calls = signal->calls;\n        const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));\n\n        sink other{*this};\n        other.offset = std::distance(it, calls.cend());\n        return other;\n    }\n\n    /**\n     * @brief Returns a sink that connects before a free function with payload\n     * or a bound member.\n     * @tparam Candidate Member or free function to look for.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     * @return A properly initialized sink object.\n     */\n    template<auto Candidate, typename Type>\n    sink before(Type &&value_or_instance) {\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>(std::forward<Type>(value_or_instance));\n\n        const auto &calls = signal->calls;\n        const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));\n\n        sink other{*this};\n        other.offset = std::distance(it, calls.cend());\n        return other;\n    }\n\n    /**\n     * @brief Returns a sink that connects before a given instance or specific\n     * payload.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     * @return A properly initialized sink object.\n     */\n    template<typename Type>\n    sink before(Type &value_or_instance) {\n        return before(&value_or_instance);\n    }\n\n    /**\n     * @brief Returns a sink that connects before a given instance or specific\n     * payload.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid pointer that fits the purpose.\n     * @return A properly initialized sink object.\n     */\n    template<typename Type>\n    sink before(Type *value_or_instance) {\n        sink other{*this};\n\n        if(value_or_instance) {\n            const auto &calls = signal->calls;\n            const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) {\n                return delegate.instance() == value_or_instance;\n            });\n\n            other.offset = std::distance(it, calls.cend());\n        }\n\n        return other;\n    }\n\n    /**\n     * @brief Returns a sink that connects before anything else.\n     * @return A properly initialized sink object.\n     */\n    sink before() {\n        sink other{*this};\n        other.offset = signal->calls.size();\n        return other;\n    }\n\n    /**\n     * @brief Connects a free function or an unbound member to a signal.\n     *\n     * The signal handler performs checks to avoid multiple connections for the\n     * same function.\n     *\n     * @tparam Candidate Function or member to connect to the signal.\n     * @return A properly initialized connection object.\n     */\n    template<auto Candidate>\n    connection connect() {\n        disconnect<Candidate>();\n\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>();\n        signal->calls.insert(signal->calls.end() - offset, std::move(call));\n\n        delegate<void(void *)> conn{};\n        conn.template connect<&release<Candidate>>();\n        return { std::move(conn), signal };\n    }\n\n    /**\n     * @brief Connects a free function with payload or a bound member to a\n     * signal.\n     *\n     * The signal isn't responsible for the connected object or the payload.\n     * Users must always guarantee that the lifetime of the instance overcomes\n     * the one of the signal. On the other side, the signal handler performs\n     * checks to avoid multiple connections for the same function.<br/>\n     * When used to connect a free function with payload, its signature must be\n     * such that the instance is the first argument before the ones used to\n     * define the signal itself.\n     *\n     * @tparam Candidate Function or member to connect to the signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     * @return A properly initialized connection object.\n     */\n    template<auto Candidate, typename Type>\n    connection connect(Type &&value_or_instance) {\n        disconnect<Candidate>(value_or_instance);\n\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>(value_or_instance);\n        signal->calls.insert(signal->calls.end() - offset, std::move(call));\n\n        delegate<void(void *)> conn{};\n        conn.template connect<&release<Candidate, Type>>(value_or_instance);\n        return { std::move(conn), signal };\n    }\n\n    /**\n     * @brief Disconnects a free function or an unbound member from a signal.\n     * @tparam Candidate Function or member to disconnect from the signal.\n     */\n    template<auto Candidate>\n    void disconnect() {\n        auto &calls = signal->calls;\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>();\n        calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());\n    }\n\n    /**\n     * @brief Disconnects a free function with payload or a bound member from a\n     * signal.\n     * @tparam Candidate Function or member to disconnect from the signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<auto Candidate, typename Type>\n    void disconnect(Type &&value_or_instance) {\n        auto &calls = signal->calls;\n        delegate<Ret(Args...)> call{};\n        call.template connect<Candidate>(std::forward<Type>(value_or_instance));\n        calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());\n    }\n\n    /**\n     * @brief Disconnects free functions with payload or bound members from a\n     * signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<typename Type>\n    void disconnect(Type &value_or_instance) {\n        disconnect(&value_or_instance);\n    }\n\n    /**\n     * @brief Disconnects free functions with payload or bound members from a\n     * signal.\n     * @tparam Type Type of class or type of payload.\n     * @param value_or_instance A valid object that fits the purpose.\n     */\n    template<typename Type>\n    void disconnect(Type *value_or_instance) {\n        if(value_or_instance) {\n            auto &calls = signal->calls;\n            calls.erase(std::remove_if(calls.begin(), calls.end(), [value_or_instance](const auto &delegate) {\n                return delegate.instance() == value_or_instance;\n            }), calls.end());\n        }\n    }\n\n    /*! @brief Disconnects all the listeners from a signal. */\n    void disconnect() {\n        signal->calls.clear();\n    }\n\nprivate:\n    difference_type offset;\n    signal_type *signal;\n};\n\n\n/**\n * @brief Deduction guide.\n *\n * It allows to deduce the function type of a sink directly from the signal it\n * refers to.\n *\n * @tparam Ret Return type of a function type.\n * @tparam Args Types of arguments of a function type.\n */\ntemplate<typename Ret, typename... Args>\nsink(sigh<Ret(Args...)> &) ENTT_NOEXCEPT -> sink<Ret(Args...)>;\n\n\n}\n\n\n#endif\n\n\n\nnamespace entt {\n\n\n/**\n * @brief Basic dispatcher implementation.\n *\n * A dispatcher can be used either to trigger an immediate event or to enqueue\n * events to be published all together once per tick.<br/>\n * Listeners are provided in the form of member functions. For each event of\n * type `Event`, listeners are such that they can be invoked with an argument of\n * type `const Event &`, no matter what the return type is.\n *\n * The dispatcher creates instances of the `sigh` class internally. Refer to the\n * documentation of the latter for more details.\n */\nclass dispatcher {\n    struct basic_pool {\n        virtual ~basic_pool() = default;\n        virtual void publish() = 0;\n        virtual void clear() ENTT_NOEXCEPT = 0;\n        virtual id_type type_id() const ENTT_NOEXCEPT = 0;\n    };\n\n    template<typename Event>\n    struct pool_handler final: basic_pool {\n        using signal_type = sigh<void(const Event &)>;\n        using sink_type = typename signal_type::sink_type;\n\n        void publish() override {\n            const auto length = events.size();\n\n            for(std::size_t pos{}; pos < length; ++pos) {\n                signal.publish(events[pos]);\n            }\n\n            events.erase(events.cbegin(), events.cbegin()+length);\n        }\n\n        void clear() ENTT_NOEXCEPT override {\n            events.clear();\n        }\n\n        sink_type sink() ENTT_NOEXCEPT {\n            return entt::sink{signal};\n        }\n\n        template<typename... Args>\n        void trigger(Args &&... args) {\n            signal.publish(Event{std::forward<Args>(args)...});\n        }\n\n        template<typename... Args>\n        void enqueue(Args &&... args) {\n            events.emplace_back(std::forward<Args>(args)...);\n        }\n\n        id_type type_id() const ENTT_NOEXCEPT override {\n            return type_info<Event>::id();\n        }\n\n    private:\n        signal_type signal{};\n        std::vector<Event> events;\n    };\n\n    template<typename Event>\n    pool_handler<Event> & assure() {\n        static_assert(std::is_same_v<Event, std::decay_t<Event>>);\n\n        if constexpr(has_type_index_v<Event>) {\n            const auto index = type_index<Event>::value();\n\n            if(!(index < pools.size())) {\n                pools.resize(index+1);\n            }\n\n            if(!pools[index]) {\n                pools[index].reset(new pool_handler<Event>{});\n            }\n\n            return static_cast<pool_handler<Event> &>(*pools[index]);\n        } else {\n            auto it = std::find_if(pools.begin(), pools.end(), [id = type_info<Event>::id()](const auto &cpool) { return id == cpool->type_id(); });\n            return static_cast<pool_handler<Event> &>(it == pools.cend() ? *pools.emplace_back(new pool_handler<Event>{}) : **it);\n        }\n    }\n\npublic:\n    /**\n     * @brief Returns a sink object for the given event.\n     *\n     * A sink is an opaque object used to connect listeners to events.\n     *\n     * The function type for a listener is:\n     * @code{.cpp}\n     * void(const Event &);\n     * @endcode\n     *\n     * The order of invocation of the listeners isn't guaranteed.\n     *\n     * @sa sink\n     *\n     * @tparam Event Type of event of which to get the sink.\n     * @return A temporary sink object.\n     */\n    template<typename Event>\n    auto sink() {\n        return assure<Event>().sink();\n    }\n\n    /**\n     * @brief Triggers an immediate event of the given type.\n     *\n     * All the listeners registered for the given type are immediately notified.\n     * The event is discarded after the execution.\n     *\n     * @tparam Event Type of event to trigger.\n     * @tparam Args Types of arguments to use to construct the event.\n     * @param args Arguments to use to construct the event.\n     */\n    template<typename Event, typename... Args>\n    void trigger(Args &&... args) {\n        assure<Event>().trigger(std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Triggers an immediate event of the given type.\n     *\n     * All the listeners registered for the given type are immediately notified.\n     * The event is discarded after the execution.\n     *\n     * @tparam Event Type of event to trigger.\n     * @param event An instance of the given type of event.\n     */\n    template<typename Event>\n    void trigger(Event &&event) {\n        assure<std::decay_t<Event>>().trigger(std::forward<Event>(event));\n    }\n\n    /**\n     * @brief Enqueues an event of the given type.\n     *\n     * An event of the given type is queued. No listener is invoked. Use the\n     * `update` member function to notify listeners when ready.\n     *\n     * @tparam Event Type of event to enqueue.\n     * @tparam Args Types of arguments to use to construct the event.\n     * @param args Arguments to use to construct the event.\n     */\n    template<typename Event, typename... Args>\n    void enqueue(Args &&... args) {\n        assure<Event>().enqueue(std::forward<Args>(args)...);\n    }\n\n    /**\n     * @brief Enqueues an event of the given type.\n     *\n     * An event of the given type is queued. No listener is invoked. Use the\n     * `update` member function to notify listeners when ready.\n     *\n     * @tparam Event Type of event to enqueue.\n     * @param event An instance of the given type of event.\n     */\n    template<typename Event>\n    void enqueue(Event &&event) {\n        assure<std::decay_t<Event>>().enqueue(std::forward<Event>(event));\n    }\n\n    /**\n     * @brief Discards all the events queued so far.\n     *\n     * If no types are provided, the dispatcher will clear all the existing\n     * pools.\n     *\n     * @tparam Event Type of events to discard.\n     */\n    template<typename... Event>\n    void clear() {\n        if constexpr(sizeof...(Event) == 0) {\n            for(auto &&cpool: pools) {\n                if(cpool) {\n                    cpool->clear();\n                }\n            }\n        } else {\n            (assure<Event>().clear(), ...);\n        }\n    }\n\n    /**\n     * @brief Delivers all the pending events of the given type.\n     *\n     * This method is blocking and it doesn't return until all the events are\n     * delivered to the registered listeners. It's responsibility of the users\n     * to reduce at a minimum the time spent in the bodies of the listeners.\n     *\n     * @tparam Event Type of events to send.\n     */\n    template<typename Event>\n    void update() {\n        assure<Event>().publish();\n    }\n\n    /**\n     * @brief Delivers all the pending events.\n     *\n     * This method is blocking and it doesn't return until all the events are\n     * delivered to the registered listeners. It's responsibility of the users\n     * to reduce at a minimum the time spent in the bodies of the listeners.\n     */\n    void update() const {\n        for(auto pos = pools.size(); pos; --pos) {\n            if(auto &&cpool = pools[pos-1]; cpool) {\n                cpool->publish();\n            }\n        }\n    }\n\nprivate:\n    std::vector<std::unique_ptr<basic_pool>> pools;\n};\n\n\n}\n\n\n#endif\n\n// #include \"signal/emitter.hpp\"\n#ifndef ENTT_SIGNAL_EMITTER_HPP\n#define ENTT_SIGNAL_EMITTER_HPP\n\n\n#include <algorithm>\n#include <functional>\n#include <iterator>\n#include <list>\n#include <memory>\n#include <type_traits>\n#include <utility>\n#include <vector>\n// #include \"../config/config.h\"\n\n// #include \"../core/fwd.hpp\"\n\n// #include \"../core/type_info.hpp\"\n\n\n\nnamespace entt {\n\n\n/**\n * @brief General purpose event emitter.\n *\n * The emitter class template follows the CRTP idiom. To create a custom emitter\n * type, derived classes must inherit directly from the base class as:\n *\n * @code{.cpp}\n * struct my_emitter: emitter<my_emitter> {\n *     // ...\n * }\n * @endcode\n *\n * Pools for the type of events are created internally on the fly. It's not\n * required to specify in advance the full list of accepted types.<br/>\n * Moreover, whenever an event is published, an emitter provides the listeners\n * with a reference to itself along with a const reference to the event.\n * Therefore listeners have an handy way to work with it without incurring in\n * the need of capturing a reference to the emitter.\n *\n * @tparam Derived Actual type of emitter that extends the class template.\n */\ntemplate<typename Derived>\nclass emitter {\n    struct basic_pool {\n        virtual ~basic_pool() = default;\n        virtual bool empty() const ENTT_NOEXCEPT = 0;\n        virtual void clear() ENTT_NOEXCEPT = 0;\n        virtual id_type type_id() const ENTT_NOEXCEPT = 0;\n    };\n\n    template<typename Event>\n    struct pool_handler final: basic_pool {\n        using listener_type = std::function<void(const Event &, Derived &)>;\n        using element_type = std::pair<bool, listener_type>;\n        using container_type = std::list<element_type>;\n        using connection_type = typename container_type::iterator;\n\n        bool empty() const ENTT_NOEXCEPT override {\n            auto pred = [](auto &&element) { return element.first; };\n\n            return std::all_of(once_list.cbegin(), once_list.cend(), pred) &&\n                    std::all_of(on_list.cbegin(), on_list.cend(), pred);\n        }\n\n        void clear() ENTT_NOEXCEPT override {\n            if(publishing) {\n                for(auto &&element: once_list) {\n                    element.first = true;\n                }\n\n                for(auto &&element: on_list) {\n                    element.first = true;\n                }\n            } else {\n                once_list.clear();\n                on_list.clear();\n            }\n        }\n\n        connection_type once(listener_type listener) {\n            return once_list.emplace(once_list.cend(), false, std::move(listener));\n        }\n\n        connection_type on(listener_type listener) {\n            return on_list.emplace(on_list.cend(), false, std::move(listener));\n        }\n\n        void erase(connection_type conn) {\n            conn->first = true;\n\n            if(!publishing) {\n                auto pred = [](auto &&element) { return element.first; };\n                once_list.remove_if(pred);\n                on_list.remove_if(pred);\n            }\n        }\n\n        void publish(const Event &event, Derived &ref) {\n            container_type swap_list;\n            once_list.swap(swap_list);\n\n            publishing = true;\n\n            for(auto &&element: on_list) {\n                element.first ? void() : element.second(event, ref);\n            }\n\n            for(auto &&element: swap_list) {\n                element.first ? void() : element.second(event, ref);\n            }\n\n            publishing = false;\n\n            on_list.remove_if([](auto &&element) { return element.first; });\n        }\n\n        id_type type_id() const ENTT_NOEXCEPT override {\n            return type_info<Event>::id();\n        }\n\n    private:\n        bool publishing{false};\n        container_type once_list{};\n        container_type on_list{};\n    };\n\n    template<typename Event>\n    const pool_handler<Event> & assure() const {\n        static_assert(std::is_same_v<Event, std::decay_t<Event>>);\n\n        if constexpr(has_type_index_v<Event>) {\n            const auto index = type_index<Event>::value();\n\n            if(!(index < pools.size())) {\n                pools.resize(index+1);\n            }\n\n            if(!pools[index]) {\n                pools[index].reset(new pool_handler<Event>{});\n            }\n\n            return static_cast<pool_handler<Event> &>(*pools[index]);\n        } else {\n            auto it = std::find_if(pools.begin(), pools.end(), [id = type_info<Event>::id()](const auto &cpool) { return id == cpool->type_id(); });\n            return static_cast<pool_handler<Event> &>(it == pools.cend() ? *pools.emplace_back(new pool_handler<Event>{}) : **it);\n        }\n    }\n\n    template<typename Event>\n    pool_handler<Event> & assure() {\n        return const_cast<pool_handler<Event> &>(std::as_const(*this).template assure<Event>());\n    }\n\npublic:\n    /** @brief Type of listeners accepted for the given event. */\n    template<typename Event>\n    using listener = typename pool_handler<Event>::listener_type;\n\n    /**\n     * @brief Generic connection type for events.\n     *\n     * Type of the connection object returned by the event emitter whenever a\n     * listener for the given type is registered.<br/>\n     * It can be used to break connections still in use.\n     *\n     * @tparam Event Type of event for which the connection is created.\n     */\n    template<typename Event>\n    struct connection: private pool_handler<Event>::connection_type {\n        /** @brief Event emitters are friend classes of connections. */\n        friend class emitter;\n\n        /*! @brief Default constructor. */\n        connection() = default;\n\n        /**\n         * @brief Creates a connection that wraps its underlying instance.\n         * @param conn A connection object to wrap.\n         */\n        connection(typename pool_handler<Event>::connection_type conn)\n            : pool_handler<Event>::connection_type{std::move(conn)}\n        {}\n    };\n\n    /*! @brief Default constructor. */\n    emitter() = default;\n\n    /*! @brief Default destructor. */\n    virtual ~emitter() {\n        static_assert(std::is_base_of_v<emitter<Derived>, Derived>);\n    }\n\n    /*! @brief Default move constructor. */\n    emitter(emitter &&) = default;\n\n    /*! @brief Default move assignment operator. @return This emitter. */\n    emitter & operator=(emitter &&) = default;\n\n    /**\n     * @brief Emits the given event.\n     *\n     * All the listeners registered for the specific event type are invoked with\n     * the given event. The event type must either have a proper constructor for\n     * the arguments provided or be an aggregate type.\n     *\n     * @tparam Event Type of event to publish.\n     * @tparam Args Types of arguments to use to construct the event.\n     * @param args Parameters to use to initialize the event.\n     */\n    template<typename Event, typename... Args>\n    void publish(Args &&... args) {\n        assure<Event>().publish(Event{std::forward<Args>(args)...}, *static_cast<Derived *>(this));\n    }\n\n    /**\n     * @brief Registers a long-lived listener with the event emitter.\n     *\n     * This method can be used to register a listener designed to be invoked\n     * more than once for the given event type.<br/>\n     * The connection returned by the method can be freely discarded. It's meant\n     * to be used later to disconnect the listener if required.\n     *\n     * The listener is as a callable object that can be moved and the type of\n     * which is `void(const Event &, Derived &)`.\n     *\n     * @note\n     * Whenever an event is emitted, the emitter provides the listener with a\n     * reference to the derived class. Listeners don't have to capture those\n     * instances for later uses.\n     *\n     * @tparam Event Type of event to which to connect the listener.\n     * @param instance The listener to register.\n     * @return Connection object that can be used to disconnect the listener.\n     */\n    template<typename Event>\n    connection<Event> on(listener<Event> instance) {\n        return assure<Event>().on(std::move(instance));\n    }\n\n    /**\n     * @brief Registers a short-lived listener with the event emitter.\n     *\n     * This method can be used to register a listener designed to be invoked\n     * only once for the given event type.<br/>\n     * The connection returned by the method can be freely discarded. It's meant\n     * to be used later to disconnect the listener if required.\n     *\n     * The listener is as a callable object that can be moved and the type of\n     * which is `void(const Event &, Derived &)`.\n     *\n     * @note\n     * Whenever an event is emitted, the emitter provides the listener with a\n     * reference to the derived class. Listeners don't have to capture those\n     * instances for later uses.\n     *\n     * @tparam Event Type of event to which to connect the listener.\n     * @param instance The listener to register.\n     * @return Connection object that can be used to disconnect the listener.\n     */\n    template<typename Event>\n    connection<Event> once(listener<Event> instance) {\n        return assure<Event>().once(std::move(instance));\n    }\n\n    /**\n     * @brief Disconnects a listener from the event emitter.\n     *\n     * Do not use twice the same connection to disconnect a listener, it results\n     * in undefined behavior. Once used, discard the connection object.\n     *\n     * @tparam Event Type of event of the connection.\n     * @param conn A valid connection.\n     */\n    template<typename Event>\n    void erase(connection<Event> conn) {\n        assure<Event>().erase(std::move(conn));\n    }\n\n    /**\n     * @brief Disconnects all the listeners for the given event type.\n     *\n     * All the connections previously returned for the given event are\n     * invalidated. Using them results in undefined behavior.\n     *\n     * @tparam Event Type of event to reset.\n     */\n    template<typename Event>\n    void clear() {\n        assure<Event>().clear();\n    }\n\n    /**\n     * @brief Disconnects all the listeners.\n     *\n     * All the connections previously returned are invalidated. Using them\n     * results in undefined behavior.\n     */\n    void clear() ENTT_NOEXCEPT {\n        for(auto &&cpool: pools) {\n            if(cpool) {\n                cpool->clear();\n            }\n        }\n    }\n\n    /**\n     * @brief Checks if there are listeners registered for the specific event.\n     * @tparam Event Type of event to test.\n     * @return True if there are no listeners registered, false otherwise.\n     */\n    template<typename Event>\n    bool empty() const {\n        return assure<Event>().empty();\n    }\n\n    /**\n     * @brief Checks if there are listeners registered with the event emitter.\n     * @return True if there are no listeners registered, false otherwise.\n     */\n    bool empty() const ENTT_NOEXCEPT {\n        return std::all_of(pools.cbegin(), pools.cend(), [](auto &&cpool) {\n            return !cpool || cpool->empty();\n        });\n    }\n\nprivate:\n    mutable std::vector<std::unique_ptr<basic_pool>> pools{};\n};\n\n\n}\n\n\n#endif\n\n// #include \"signal/sigh.hpp\"\n\n"
  },
  {
    "path": "Hazel/vendor/filewatch/FileWatch.h",
    "content": "//\tMIT License\n//\t\n//\tCopyright(c) 2017 Thomas Monkman\n//\t\n//\tPermission is hereby granted, free of charge, to any person obtaining a copy\n//\tof this software and associated documentation files(the \"Software\"), to deal\n//\tin the Software without restriction, including without limitation the rights\n//\tto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//\tcopies of the Software, and to permit persons to whom the Software is\n//\tfurnished to do so, subject to the following conditions :\n//\t\n//\tThe above copyright notice and this permission notice shall be included in all\n//\tcopies or substantial portions of the Software.\n//\t\n//\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE\n//\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n//\tSOFTWARE.\n\n#ifndef FILEWATCHER_H\n#define FILEWATCHER_H\n\n#ifdef _WIN32\n#define WIN32_LEAN_AND_MEAN\n#ifndef NOMINMAX\n#define NOMINMAX\n#endif\n#include <windows.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <tchar.h>\n#include <Pathcch.h>\n#include <shlwapi.h>\n#endif // WIN32\n\n#if __unix__\n#include <stdio.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <sys/types.h>\n#include <sys/inotify.h>\n#include <sys/stat.h>\n#include <unistd.h>\n#endif // __unix__\n\n#include <functional>\n#include <atomic>\n#include <thread>\n#include <mutex>\n#include <condition_variable>\n#include <utility>\n#include <vector>\n#include <array>\n#include <map>\n#include <system_error>\n#include <string>\n#include <algorithm>\n#include <type_traits>\n#include <future>\n#include <regex>\n#include <iostream>\n\nnamespace filewatch {\n\tenum class Event {\n\t\tadded,\n\t\tremoved,\n\t\tmodified,\n\t\trenamed_old,\n\t\trenamed_new\n\t};\n\n\t/**\n\t* \\class FileWatch\n\t*\n\t* \\brief Watches a folder or file, and will notify of changes via function callback.\n\t*\n\t* \\author Thomas Monkman\n\t*\n\t*/\n\ttemplate<class T>\n\tclass FileWatch\n\t{\n\t\ttypedef typename T::value_type C;\n\t\ttypedef std::basic_string<C, std::char_traits<C>> UnderpinningString;\n\t\ttypedef std::basic_regex<C, std::regex_traits<C>> UnderpinningRegex;\n\n\tpublic:\n\n\t\tFileWatch(T path, UnderpinningRegex pattern, std::function<void(const T& file, const Event event_type)> callback) :\n\t\t\t_path(path),\n\t\t\t_pattern(pattern),\n\t\t\t_callback(callback),\n\t\t\t_directory(get_directory(path))\n\t\t{\n\t\t\tinit();\n\t\t}\n\n\t\tFileWatch(T path, std::function<void(const T& file, const Event event_type)> callback) :\n\t\t\tFileWatch<T>(path, UnderpinningRegex(_regex_all), callback) {}\n\n\t\t~FileWatch() {\n\t\t\tdestroy();\n\t\t}\n\n\t\tFileWatch(const FileWatch<T>& other) : FileWatch<T>(other._path, other._callback) {}\n\n\t\tFileWatch<T>& operator=(const FileWatch<T>& other) \n\t\t{\n\t\t\tif (this == &other) { return *this; }\n\n\t\t\tdestroy();\n\t\t\t_path = other._path;\n\t\t\t_callback = other._callback;\n\t\t\t_directory = get_directory(other._path);\n\t\t\tinit();\n\t\t\treturn *this;\n\t\t}\n\n\t\t// Const memeber varibles don't let me implent moves nicely, if moves are really wanted std::unique_ptr should be used and move that.\n\t\tFileWatch<T>(FileWatch<T>&&) = delete;\n\t\tFileWatch<T>& operator=(FileWatch<T>&&) & = delete;\n\n\tprivate:\n\t\tstatic constexpr C _regex_all[] = { '.', '*', '\\0' };\n\t\tstatic constexpr C _this_directory[] = { '.', '/', '\\0' };\n\n\t\tstruct PathParts\n\t\t{\n\t\t\tPathParts(T directory, T filename) : directory(directory), filename(filename) {}\n\t\t\tT directory;\n\t\t\tT filename;\n\t\t};\n\t\tconst T _path;\n\n\t\tUnderpinningRegex _pattern;\n\n\t\tstatic constexpr std::size_t _buffer_size = { 1024 * 256 };\n\n\t\t// only used if watch a single file\n\t\tbool _watching_single_file = { false };\n\t\tT _filename;\n\n\t\tstd::atomic<bool> _destory = { false };\n\t\tstd::function<void(const T& file, const Event event_type)> _callback;\n\n\t\tstd::thread _watch_thread;\n\n\t\tstd::condition_variable _cv;\n\t\tstd::mutex _callback_mutex;\n\t\tstd::vector<std::pair<T, Event>> _callback_information;\n\t\tstd::thread _callback_thread;\n\n\t\tstd::promise<void> _running;\n#ifdef _WIN32\n\t\tHANDLE _directory = { nullptr };\n\t\tHANDLE _close_event = { nullptr };\n\n\t\tconst DWORD _listen_filters =\n\t\t\tFILE_NOTIFY_CHANGE_SECURITY |\n\t\t\tFILE_NOTIFY_CHANGE_CREATION |\n\t\t\tFILE_NOTIFY_CHANGE_LAST_ACCESS |\n\t\t\tFILE_NOTIFY_CHANGE_LAST_WRITE |\n\t\t\tFILE_NOTIFY_CHANGE_SIZE |\n\t\t\tFILE_NOTIFY_CHANGE_ATTRIBUTES |\n\t\t\tFILE_NOTIFY_CHANGE_DIR_NAME |\n\t\t\tFILE_NOTIFY_CHANGE_FILE_NAME;\n\n\t\tconst std::map<DWORD, Event> _event_type_mapping = {\n\t\t\t{ FILE_ACTION_ADDED, Event::added },\n\t\t\t{ FILE_ACTION_REMOVED, Event::removed },\n\t\t\t{ FILE_ACTION_MODIFIED, Event::modified },\n\t\t\t{ FILE_ACTION_RENAMED_OLD_NAME, Event::renamed_old },\n\t\t\t{ FILE_ACTION_RENAMED_NEW_NAME, Event::renamed_new }\n\t\t};\n#endif // WIN32\n\n#if __unix__\n\t\tstruct FolderInfo {\n\t\t\tint folder;\n\t\t\tint watch;\n\t\t};\n\n\t\tFolderInfo  _directory;\n\n\t\tconst std::uint32_t _listen_filters = IN_MODIFY | IN_CREATE | IN_DELETE;\n\n\t\tconst static std::size_t event_size = (sizeof(struct inotify_event));\n#endif // __unix__\n\n\t\tvoid init() \n\t\t{\n#ifdef _WIN32\n\t\t\t_close_event = CreateEvent(NULL, TRUE, FALSE, NULL);\n\t\t\tif (!_close_event) {\n\t\t\t\tthrow std::system_error(GetLastError(), std::system_category());\n\t\t\t}\n#endif // WIN32\n\t\t\t_callback_thread = std::move(std::thread([this]() {\n\t\t\t\ttry {\n\t\t\t\t\tcallback_thread();\n\t\t\t\t} catch (...) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t_running.set_exception(std::current_exception());\n\t\t\t\t\t}\n\t\t\t\t\tcatch (...) {} // set_exception() may throw too\n\t\t\t\t}\n\t\t\t}));\n\t\t\t_watch_thread = std::move(std::thread([this]() { \n\t\t\t\ttry {\n\t\t\t\t\tmonitor_directory();\n\t\t\t\t} catch (...) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t_running.set_exception(std::current_exception());\n\t\t\t\t\t}\n\t\t\t\t\tcatch (...) {} // set_exception() may throw too\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tstd::future<void> future = _running.get_future();\n\t\t\tfuture.get(); //block until the monitor_directory is up and running\n\t\t}\n\n\t\tvoid destroy()\n\t\t{\n\t\t\t_destory = true;\n\t\t\t_running = std::promise<void>();\n#ifdef _WIN32\n\t\t\tSetEvent(_close_event);\n#elif __unix__\n\t\t\tinotify_rm_watch(_directory.folder, _directory.watch);\n#endif // __unix__\n\t\t\t_cv.notify_all();\n\t\t\t_watch_thread.join();\n\t\t\t_callback_thread.join();\n#ifdef _WIN32\n\t\t\tCloseHandle(_directory);\n#elif __unix__\n\t\t\tclose(_directory.folder);\n#endif // __unix__\n\t\t}\n\n\t\tconst PathParts split_directory_and_file(const T& path) const \n\t\t{\n\t\t\tconst auto predict = [](C character) {\n#ifdef _WIN32\n\t\t\t\treturn character == C('\\\\') || character == C('/');\n#elif __unix__\n\t\t\t\treturn character == C('/');\n#endif // __unix__\n\t\t\t};\n\n\t\t\tUnderpinningString path_string = path;\n\t\t\tconst auto pivot = std::find_if(path_string.rbegin(), path_string.rend(), predict).base();\n\t\t\t//if the path is something like \"test.txt\" there will be no directory part, however we still need one, so insert './'\n\t\t\tconst T directory = [&]() {\n\t\t\t\tconst auto extracted_directory = UnderpinningString(path_string.begin(), pivot);\n\t\t\t\treturn (extracted_directory.size() > 0) ? extracted_directory : UnderpinningString(_this_directory);\n\t\t\t}();\n\t\t\tconst T filename = UnderpinningString(pivot, path_string.end());\n\t\t\treturn PathParts(directory, filename);\n\t\t}\n\n\t\tbool pass_filter(const UnderpinningString& file_path)\n\t\t{ \n\t\t\tif (_watching_single_file) {\n\t\t\t\tconst UnderpinningString extracted_filename = { split_directory_and_file(file_path).filename };\n\t\t\t\t//if we are watching a single file, only that file should trigger action\n\t\t\t\treturn extracted_filename == _filename;\n\t\t\t}\n\t\t\treturn std::regex_match(file_path, _pattern);\n\t\t}\n\n#ifdef _WIN32\n\t\ttemplate<typename... Args> DWORD GetFileAttributesX(const char* lpFileName, Args... args) {\n\t\t\treturn GetFileAttributesA(lpFileName, args...);\n\t\t}\n\t\ttemplate<typename... Args> DWORD GetFileAttributesX(const wchar_t* lpFileName, Args... args) {\n\t\t\treturn GetFileAttributesW(lpFileName, args...);\n\t\t}\n\n\t\ttemplate<typename... Args> HANDLE CreateFileX(const char* lpFileName, Args... args) {\n\t\t\treturn CreateFileA(lpFileName, args...);\n\t\t}\n\t\ttemplate<typename... Args> HANDLE CreateFileX(const wchar_t* lpFileName, Args... args) {\n\t\t\treturn CreateFileW(lpFileName, args...);\n\t\t}\n\n\t\tHANDLE get_directory(const T& path) \n\t\t{\n\t\t\tauto file_info = GetFileAttributesX(path.c_str());\n\n\t\t\tif (file_info == INVALID_FILE_ATTRIBUTES)\n\t\t\t{\n\t\t\t\tthrow std::system_error(GetLastError(), std::system_category());\n\t\t\t}\n\t\t\t_watching_single_file = (file_info & FILE_ATTRIBUTE_DIRECTORY) == false;\n\n\t\t\tconst T watch_path = [this, &path]() {\n\t\t\t\tif (_watching_single_file)\n\t\t\t\t{\n\t\t\t\t\tconst auto parsed_path = split_directory_and_file(path);\n\t\t\t\t\t_filename = parsed_path.filename;\n\t\t\t\t\treturn parsed_path.directory;\n\t\t\t\t}\n\t\t\t\telse \n\t\t\t\t{\n\t\t\t\t\treturn path;\n\t\t\t\t}\n\t\t\t}();\n\n\t\t\tHANDLE directory = CreateFileX(\n\t\t\t\twatch_path.c_str(),           // pointer to the file name\n\t\t\t\tFILE_LIST_DIRECTORY,    // access (read/write) mode\n\t\t\t\tFILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, // share mode\n\t\t\t\tnullptr, // security descriptor\n\t\t\t\tOPEN_EXISTING,         // how to create\n\t\t\t\tFILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, // file attributes\n\t\t\t\tHANDLE(0));                 // file with attributes to copy\n\n\t\t\tif (directory == INVALID_HANDLE_VALUE)\n\t\t\t{\n\t\t\t\tthrow std::system_error(GetLastError(), std::system_category());\n\t\t\t}\n\t\t\treturn directory;\n\t\t}\n\n\t\tvoid convert_wstring(const std::wstring& wstr, std::string& out)\n\t\t{\n\t\t\tint size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);\n\t\t\tout.resize(size_needed, '\\0');\n\t\t\tWideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &out[0], size_needed, NULL, NULL);\n\t\t}\n\n\t\tvoid convert_wstring(const std::wstring& wstr, std::wstring& out)\n\t\t{\n\t\t\tout = wstr;\n\t\t}\n\n\t\tvoid monitor_directory() \n\t\t{\n\t\t\tstd::vector<BYTE> buffer(_buffer_size);\n\t\t\tDWORD bytes_returned = 0;\n\t\t\tOVERLAPPED overlapped_buffer{ 0 };\n\n\t\t\toverlapped_buffer.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);\n\t\t\tif (!overlapped_buffer.hEvent) {\n\t\t\t\tstd::cerr << \"Error creating monitor event\" << std::endl;\n\t\t\t}\n\n\t\t\tstd::array<HANDLE, 2> handles{ overlapped_buffer.hEvent, _close_event };\n\n\t\t\tauto async_pending = false;\n\t\t\t_running.set_value();\n\t\t\tdo {\n\t\t\t\tstd::vector<std::pair<T, Event>> parsed_information;\n\t\t\t\tReadDirectoryChangesW(\n\t\t\t\t\t_directory,\n\t\t\t\t\tbuffer.data(), static_cast<DWORD>(buffer.size()),\n\t\t\t\t\tTRUE,\n\t\t\t\t\t_listen_filters,\n\t\t\t\t\t&bytes_returned,\n\t\t\t\t\t&overlapped_buffer, NULL);\n\t\t\t\n\t\t\t\tasync_pending = true;\n\t\t\t\n\t\t\t\tswitch (WaitForMultipleObjects(2, handles.data(), FALSE, INFINITE))\n\t\t\t\t{\n\t\t\t\tcase WAIT_OBJECT_0:\n\t\t\t\t{\n\t\t\t\t\tif (!GetOverlappedResult(_directory, &overlapped_buffer, &bytes_returned, TRUE)) {\n\t\t\t\t\t\tthrow std::system_error(GetLastError(), std::system_category());\n\t\t\t\t\t}\n\t\t\t\t\tasync_pending = false;\n\n\t\t\t\t\tif (bytes_returned == 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tFILE_NOTIFY_INFORMATION *file_information = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(&buffer[0]);\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\tstd::wstring changed_file_w{ file_information->FileName, file_information->FileNameLength / sizeof(file_information->FileName[0]) };\n\t\t\t\t\t\tUnderpinningString changed_file;\n\t\t\t\t\t\tconvert_wstring(changed_file_w, changed_file);\n\t\t\t\t\t\tif (pass_filter(changed_file))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparsed_information.emplace_back(T{ changed_file }, _event_type_mapping.at(file_information->Action));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (file_information->NextEntryOffset == 0) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfile_information = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(reinterpret_cast<BYTE*>(file_information) + file_information->NextEntryOffset);\n\t\t\t\t\t} while (true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase WAIT_OBJECT_0 + 1:\n\t\t\t\t\t// quit\n\t\t\t\t\tbreak;\n\t\t\t\tcase WAIT_FAILED:\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t//dispatch callbacks\n\t\t\t\t{\n\t\t\t\t\tstd::lock_guard<std::mutex> lock(_callback_mutex);\n\t\t\t\t\t_callback_information.insert(_callback_information.end(), parsed_information.begin(), parsed_information.end());\n\t\t\t\t}\n\t\t\t\t_cv.notify_all();\n\t\t\t} while (_destory == false);\n\n\t\t\tif (async_pending)\n\t\t\t{\n\t\t\t\t//clean up running async io\n\t\t\t\tCancelIo(_directory);\n\t\t\t\tGetOverlappedResult(_directory, &overlapped_buffer, &bytes_returned, TRUE);\n\t\t\t}\n\t\t}\n#endif // WIN32\n\n#if __unix__\n\n\t\tbool is_file(const T& path) const\n\t\t{\n\t\t\tstruct stat statbuf = {};\n\t\t\tif (stat(path.c_str(), &statbuf) != 0)\n\t\t\t{\n\t\t\t\tthrow std::system_error(errno, std::system_category());\n\t\t\t}\n\t\t\treturn S_ISREG(statbuf.st_mode);\n\t\t}\n\n\t\tFolderInfo get_directory(const T& path) \n\t\t{\n\t\t\tconst auto folder = inotify_init();\n\t\t\tif (folder < 0) \n\t\t\t{\n\t\t\t\tthrow std::system_error(errno, std::system_category());\n\t\t\t}\n\t\t\tconst auto listen_filters = _listen_filters;\n\n\t\t\t_watching_single_file = is_file(path);\n\n\t\t\tconst T watch_path = [this, &path]() {\n\t\t\t\tif (_watching_single_file)\n\t\t\t\t{\n\t\t\t\t\tconst auto parsed_path = split_directory_and_file(path);\n\t\t\t\t\t_filename = parsed_path.filename;\n\t\t\t\t\treturn parsed_path.directory;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn path;\n\t\t\t\t}\n\t\t\t}();\n\n\t\t\tconst auto watch = inotify_add_watch(folder, watch_path.c_str(), IN_MODIFY | IN_CREATE | IN_DELETE);\n\t\t\tif (watch < 0) \n\t\t\t{\n\t\t\t\tthrow std::system_error(errno, std::system_category());\n\t\t\t}\n\t\t\treturn { folder, watch };\n\t\t}\n\n\t\tvoid monitor_directory() \n\t\t{\n\t\t\tstd::vector<char> buffer(_buffer_size);\n\n\t\t\t_running.set_value();\n\t\t\twhile (_destory == false) \n\t\t\t{\n\t\t\t\tconst auto length = read(_directory.folder, static_cast<void*>(buffer.data()), buffer.size());\n\t\t\t\tif (length > 0) \n\t\t\t\t{\n\t\t\t\t\tint i = 0;\n\t\t\t\t\tstd::vector<std::pair<T, Event>> parsed_information;\n\t\t\t\t\twhile (i < length) \n\t\t\t\t\t{\n\t\t\t\t\t\tstruct inotify_event *event = reinterpret_cast<struct inotify_event *>(&buffer[i]); // NOLINT\n\t\t\t\t\t\tif (event->len) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst UnderpinningString changed_file{ event->name };\n\t\t\t\t\t\t\tif (pass_filter(changed_file))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (event->mask & IN_CREATE) \n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparsed_information.emplace_back(T{ changed_file }, Event::added);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (event->mask & IN_DELETE) \n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparsed_information.emplace_back(T{ changed_file }, Event::removed);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (event->mask & IN_MODIFY) \n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparsed_information.emplace_back(T{ changed_file }, Event::modified);\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\ti += event_size + event->len;\n\t\t\t\t\t}\n\t\t\t\t\t//dispatch callbacks\n\t\t\t\t\t{\n\t\t\t\t\t\tstd::lock_guard<std::mutex> lock(_callback_mutex);\n\t\t\t\t\t\t_callback_information.insert(_callback_information.end(), parsed_information.begin(), parsed_information.end());\n\t\t\t\t\t}\n\t\t\t\t\t_cv.notify_all();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n#endif // __unix__\n\n\t\tvoid callback_thread()\n\t\t{\n\t\t\twhile (_destory == false) {\n\t\t\t\tstd::unique_lock<std::mutex> lock(_callback_mutex);\n\t\t\t\tif (_callback_information.empty() && _destory == false) {\n\t\t\t\t\t_cv.wait(lock, [this] { return _callback_information.size() > 0 || _destory; });\n\t\t\t\t}\n\t\t\t\tdecltype(_callback_information) callback_information = {};\n\t\t\t\tstd::swap(callback_information, _callback_information);\n\t\t\t\tlock.unlock();\n\n\t\t\t\tfor (const auto& file : callback_information) {\n\t\t\t\t\tif (_callback) {\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_callback(file.first, file.second);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (const std::exception&)\n\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}\n\t\t}\n\t};\n\n\ttemplate<class T> constexpr typename FileWatch<T>::C FileWatch<T>::_regex_all[];\n\ttemplate<class T> constexpr typename FileWatch<T>::C FileWatch<T>::_this_directory[];\n}\n#endif"
  },
  {
    "path": "Hazel/vendor/mono/LICENSE",
    "content": "\nIn general, the runtime and its class libraries are licensed under the\nterms of the MIT license, and some third party code is licensed under\nthe 3-clause BSD license.  See the file \"PATENTS.TXT\" for Microsoft's\npatent grant on the Mono codebase.\n\nThe Mono distribution does include a handful of pieces of code that\nare used during the build system and are covered under different\nlicenses, those include:\n\nBuild Time Code\n===============\n\nThis is code that is used at build time, or during the maintenance of\nMono itself, and does not end up in the redistributable part of Mono:\n\n* gettext\n\n  m4 source files used to probe features at build time: GPL\n\n* Benchmark Source Files\n\n  Logic.cs and zipmark.cs are GPL source files.\n\n* mono/docs/HtmlAgilityPack\n\n  MS-PL licensed\n\n* mcs/jay: 4-clause BSD licensed\n\n* mcs/class/I18N/mklist.sh, tools/cvt.sh: GNU GPLv2\n\nRuntime Code\n============\n\nThe following code is linked with the final Mono runtime, the libmono\nembeddable runtime:\n\n* support/minizip: BSD license.\n\n* mono/utils/memcheck.h: BSD license, used on debug builds that use Valgrind.\n\n* mono/utils/freebsd-dwarf.h, freebsd-elf_common.h, freebsd-elf64.h freebsd-elf32.h: BSD license.\n\n* mono/utils/bsearch.c: BSD license.\n\n* mono/metadata/w32file-unix-glob.c, w32file-unix-glob.h: BSD license\n\nClass Library code\n==================\n\nThese are class libraries that can be loaded by your process:\n\n* mcs/class/RabbitMQ.Client: dual licensed in Apache v2, and Mozilla Public License 1.1\n\n* mcs/class/Compat.ICSharpCode.SharpZipLib and\n  mcs/class/ICSharpCode.SharpZipLib are GPL with class-path exception.\n  Originates with the SharpDevelop project.\n\n* mcs/class/System.Core/System/TimeZoneInfo.Android.cs\n\n  This is a port of Apache 2.0-licensed Android code, and thus is\n  licensed under the Apache 2.0 license\n\n\t    http://www.apache.org/licenses/LICENSE-2.0\n\nAPI Documentation\n=================\n\nThe API documentation is licensed under the terms of the Creative\nCommons Attribution 4.0 International Public License\n\n\nThe Licenses\n============\n\n\tThese are the licenses used in Mono, the files are located:\n\n### MIT X11 License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n### Mozilla.MPL\n\n                          MOZILLA PUBLIC LICENSE\n                                Version 1.1\n\n                              ---------------\n\n1. Definitions.\n\n     1.0.1. \"Commercial Use\" means distribution or otherwise making the\n     Covered Code available to a third party.\n\n     1.1. \"Contributor\" means each entity that creates or contributes to\n     the creation of Modifications.\n\n     1.2. \"Contributor Version\" means the combination of the Original\n     Code, prior Modifications used by a Contributor, and the Modifications\n     made by that particular Contributor.\n\n     1.3. \"Covered Code\" means the Original Code or Modifications or the\n     combination of the Original Code and Modifications, in each case\n     including portions thereof.\n\n     1.4. \"Electronic Distribution Mechanism\" means a mechanism generally\n     accepted in the software development community for the electronic\n     transfer of data.\n\n     1.5. \"Executable\" means Covered Code in any form other than Source\n     Code.\n\n     1.6. \"Initial Developer\" means the individual or entity identified\n     as the Initial Developer in the Source Code notice required by Exhibit\n     A.\n\n     1.7. \"Larger Work\" means a work which combines Covered Code or\n     portions thereof with code not governed by the terms of this License.\n\n     1.8. \"License\" means this document.\n\n     1.8.1. \"Licensable\" means having the right to grant, to the maximum\n     extent possible, whether at the time of the initial grant or\n     subsequently acquired, any and all of the rights conveyed herein.\n\n     1.9. \"Modifications\" means any addition to or deletion from the\n     substance or structure of either the Original Code or any previous\n     Modifications. When Covered Code is released as a series of files, a\n     Modification is:\n          A. Any addition to or deletion from the contents of a file\n          containing Original Code or previous Modifications.\n\n          B. Any new file that contains any part of the Original Code or\n          previous Modifications.\n\n     1.10. \"Original Code\" means Source Code of computer software code\n     which is described in the Source Code notice required by Exhibit A as\n     Original Code, and which, at the time of its release under this\n     License is not already Covered Code governed by this License.\n\n     1.10.1. \"Patent Claims\" means any patent claim(s), now owned or\n     hereafter acquired, including without limitation,  method, process,\n     and apparatus claims, in any patent Licensable by grantor.\n\n     1.11. \"Source Code\" means the preferred form of the Covered Code for\n     making modifications to it, including all modules it contains, plus\n     any associated interface definition files, scripts used to control\n     compilation and installation of an Executable, or source code\n     differential comparisons against either the Original Code or another\n     well known, available Covered Code of the Contributor's choice. The\n     Source Code can be in a compressed or archival form, provided the\n     appropriate decompression or de-archiving software is widely available\n     for no charge.\n\n     1.12. \"You\" (or \"Your\")  means an individual or a legal entity\n     exercising rights under, and complying with all of the terms of, this\n     License or a future version of this License issued under Section 6.1.\n     For legal entities, \"You\" includes any entity which controls, is\n     controlled by, or is under common control with You. For purposes of\n     this definition, \"control\" means (a) the power, direct or indirect,\n     to cause the direction or management of such entity, whether by\n     contract or otherwise, or (b) ownership of more than fifty percent\n     (50%) of the outstanding shares or beneficial ownership of such\n     entity.\n\n2. Source Code License.\n\n     2.1. The Initial Developer Grant.\n     The Initial Developer hereby grants You a world-wide, royalty-free,\n     non-exclusive license, subject to third party intellectual property\n     claims:\n          (a)  under intellectual property rights (other than patent or\n          trademark) Licensable by Initial Developer to use, reproduce,\n          modify, display, perform, sublicense and distribute the Original\n          Code (or portions thereof) with or without Modifications, and/or\n          as part of a Larger Work; and\n\n          (b) under Patents Claims infringed by the making, using or\n          selling of Original Code, to make, have made, use, practice,\n          sell, and offer for sale, and/or otherwise dispose of the\n          Original Code (or portions thereof).\n\n          (c) the licenses granted in this Section 2.1(a) and (b) are\n          effective on the date Initial Developer first distributes\n          Original Code under the terms of this License.\n\n          (d) Notwithstanding Section 2.1(b) above, no patent license is\n          granted: 1) for code that You delete from the Original Code; 2)\n          separate from the Original Code;  or 3) for infringements caused\n          by: i) the modification of the Original Code or ii) the\n          combination of the Original Code with other software or devices.\n\n     2.2. Contributor Grant.\n     Subject to third party intellectual property claims, each Contributor\n     hereby grants You a world-wide, royalty-free, non-exclusive license\n\n          (a)  under intellectual property rights (other than patent or\n          trademark) Licensable by Contributor, to use, reproduce, modify,\n          display, perform, sublicense and distribute the Modifications\n          created by such Contributor (or portions thereof) either on an\n          unmodified basis, with other Modifications, as Covered Code\n          and/or as part of a Larger Work; and\n\n          (b) under Patent Claims infringed by the making, using, or\n          selling of  Modifications made by that Contributor either alone\n          and/or in combination with its Contributor Version (or portions\n          of such combination), to make, use, sell, offer for sale, have\n          made, and/or otherwise dispose of: 1) Modifications made by that\n          Contributor (or portions thereof); and 2) the combination of\n          Modifications made by that Contributor with its Contributor\n          Version (or portions of such combination).\n\n          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are\n          effective on the date Contributor first makes Commercial Use of\n          the Covered Code.\n\n          (d)    Notwithstanding Section 2.2(b) above, no patent license is\n          granted: 1) for any code that Contributor has deleted from the\n          Contributor Version; 2)  separate from the Contributor Version;\n          3)  for infringements caused by: i) third party modifications of\n          Contributor Version or ii)  the combination of Modifications made\n          by that Contributor with other software  (except as part of the\n          Contributor Version) or other devices; or 4) under Patent Claims\n          infringed by Covered Code in the absence of Modifications made by\n          that Contributor.\n\n3. Distribution Obligations.\n\n     3.1. Application of License.\n     The Modifications which You create or to which You contribute are\n     governed by the terms of this License, including without limitation\n     Section 2.2. The Source Code version of Covered Code may be\n     distributed only under the terms of this License or a future version\n     of this License released under Section 6.1, and You must include a\n     copy of this License with every copy of the Source Code You\n     distribute. You may not offer or impose any terms on any Source Code\n     version that alters or restricts the applicable version of this\n     License or the recipients' rights hereunder. However, You may include\n     an additional document offering the additional rights described in\n     Section 3.5.\n\n     3.2. Availability of Source Code.\n     Any Modification which You create or to which You contribute must be\n     made available in Source Code form under the terms of this License\n     either on the same media as an Executable version or via an accepted\n     Electronic Distribution Mechanism to anyone to whom you made an\n     Executable version available; and if made available via Electronic\n     Distribution Mechanism, must remain available for at least twelve (12)\n     months after the date it initially became available, or at least six\n     (6) months after a subsequent version of that particular Modification\n     has been made available to such recipients. You are responsible for\n     ensuring that the Source Code version remains available even if the\n     Electronic Distribution Mechanism is maintained by a third party.\n\n     3.3. Description of Modifications.\n     You must cause all Covered Code to which You contribute to contain a\n     file documenting the changes You made to create that Covered Code and\n     the date of any change. You must include a prominent statement that\n     the Modification is derived, directly or indirectly, from Original\n     Code provided by the Initial Developer and including the name of the\n     Initial Developer in (a) the Source Code, and (b) in any notice in an\n     Executable version or related documentation in which You describe the\n     origin or ownership of the Covered Code.\n\n     3.4. Intellectual Property Matters\n          (a) Third Party Claims.\n          If Contributor has knowledge that a license under a third party's\n          intellectual property rights is required to exercise the rights\n          granted by such Contributor under Sections 2.1 or 2.2,\n          Contributor must include a text file with the Source Code\n          distribution titled \"LEGAL\" which describes the claim and the\n          party making the claim in sufficient detail that a recipient will\n          know whom to contact. If Contributor obtains such knowledge after\n          the Modification is made available as described in Section 3.2,\n          Contributor shall promptly modify the LEGAL file in all copies\n          Contributor makes available thereafter and shall take other steps\n          (such as notifying appropriate mailing lists or newsgroups)\n          reasonably calculated to inform those who received the Covered\n          Code that new knowledge has been obtained.\n\n          (b) Contributor APIs.\n          If Contributor's Modifications include an application programming\n          interface and Contributor has knowledge of patent licenses which\n          are reasonably necessary to implement that API, Contributor must\n          also include this information in the LEGAL file.\n\n               (c)    Representations.\n          Contributor represents that, except as disclosed pursuant to\n          Section 3.4(a) above, Contributor believes that Contributor's\n          Modifications are Contributor's original creation(s) and/or\n          Contributor has sufficient rights to grant the rights conveyed by\n          this License.\n\n     3.5. Required Notices.\n     You must duplicate the notice in Exhibit A in each file of the Source\n     Code.  If it is not possible to put such notice in a particular Source\n     Code file due to its structure, then You must include such notice in a\n     location (such as a relevant directory) where a user would be likely\n     to look for such a notice.  If You created one or more Modification(s)\n     You may add your name as a Contributor to the notice described in\n     Exhibit A.  You must also duplicate this License in any documentation\n     for the Source Code where You describe recipients' rights or ownership\n     rights relating to Covered Code.  You may choose to offer, and to\n     charge a fee for, warranty, support, indemnity or liability\n     obligations to one or more recipients of Covered Code. However, You\n     may do so only on Your own behalf, and not on behalf of the Initial\n     Developer or any Contributor. You must make it absolutely clear than\n     any such warranty, support, indemnity or liability obligation is\n     offered by You alone, and You hereby agree to indemnify the Initial\n     Developer and every Contributor for any liability incurred by the\n     Initial Developer or such Contributor as a result of warranty,\n     support, indemnity or liability terms You offer.\n\n     3.6. Distribution of Executable Versions.\n     You may distribute Covered Code in Executable form only if the\n     requirements of Section 3.1-3.5 have been met for that Covered Code,\n     and if You include a notice stating that the Source Code version of\n     the Covered Code is available under the terms of this License,\n     including a description of how and where You have fulfilled the\n     obligations of Section 3.2. The notice must be conspicuously included\n     in any notice in an Executable version, related documentation or\n     collateral in which You describe recipients' rights relating to the\n     Covered Code. You may distribute the Executable version of Covered\n     Code or ownership rights under a license of Your choice, which may\n     contain terms different from this License, provided that You are in\n     compliance with the terms of this License and that the license for the\n     Executable version does not attempt to limit or alter the recipient's\n     rights in the Source Code version from the rights set forth in this\n     License. If You distribute the Executable version under a different\n     license You must make it absolutely clear that any terms which differ\n     from this License are offered by You alone, not by the Initial\n     Developer or any Contributor. You hereby agree to indemnify the\n     Initial Developer and every Contributor for any liability incurred by\n     the Initial Developer or such Contributor as a result of any such\n     terms You offer.\n\n     3.7. Larger Works.\n     You may create a Larger Work by combining Covered Code with other code\n     not governed by the terms of this License and distribute the Larger\n     Work as a single product. In such a case, You must make sure the\n     requirements of this License are fulfilled for the Covered Code.\n\n4. Inability to Comply Due to Statute or Regulation.\n\n     If it is impossible for You to comply with any of the terms of this\n     License with respect to some or all of the Covered Code due to\n     statute, judicial order, or regulation then You must: (a) comply with\n     the terms of this License to the maximum extent possible; and (b)\n     describe the limitations and the code they affect. Such description\n     must be included in the LEGAL file described in Section 3.4 and must\n     be included with all distributions of the Source Code. Except to the\n     extent prohibited by statute or regulation, such description must be\n     sufficiently detailed for a recipient of ordinary skill to be able to\n     understand it.\n\n5. Application of this License.\n\n     This License applies to code to which the Initial Developer has\n     attached the notice in Exhibit A and to related Covered Code.\n\n6. Versions of the License.\n\n     6.1. New Versions.\n     Netscape Communications Corporation (\"Netscape\") may publish revised\n     and/or new versions of the License from time to time. Each version\n     will be given a distinguishing version number.\n\n     6.2. Effect of New Versions.\n     Once Covered Code has been published under a particular version of the\n     License, You may always continue to use it under the terms of that\n     version. You may also choose to use such Covered Code under the terms\n     of any subsequent version of the License published by Netscape. No one\n     other than Netscape has the right to modify the terms applicable to\n     Covered Code created under this License.\n\n     6.3. Derivative Works.\n     If You create or use a modified version of this License (which you may\n     only do in order to apply it to code which is not already Covered Code\n     governed by this License), You must (a) rename Your license so that\n     the phrases \"Mozilla\", \"MOZILLAPL\", \"MOZPL\", \"Netscape\",\n     \"MPL\", \"NPL\" or any confusingly similar phrase do not appear in your\n     license (except to note that your license differs from this License)\n     and (b) otherwise make it clear that Your version of the license\n     contains terms which differ from the Mozilla Public License and\n     Netscape Public License. (Filling in the name of the Initial\n     Developer, Original Code or Contributor in the notice described in\n     Exhibit A shall not of themselves be deemed to be modifications of\n     this License.)\n\n7. DISCLAIMER OF WARRANTY.\n\n     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN \"AS IS\" BASIS,\n     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,\n     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF\n     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.\n     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE\n     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,\n     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE\n     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER\n     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF\n     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.\n\n8. TERMINATION.\n\n     8.1.  This License and the rights granted hereunder will terminate\n     automatically if You fail to comply with terms herein and fail to cure\n     such breach within 30 days of becoming aware of the breach. All\n     sublicenses to the Covered Code which are properly granted shall\n     survive any termination of this License. Provisions which, by their\n     nature, must remain in effect beyond the termination of this License\n     shall survive.\n\n     8.2.  If You initiate litigation by asserting a patent infringement\n     claim (excluding declatory judgment actions) against Initial Developer\n     or a Contributor (the Initial Developer or Contributor against whom\n     You file such action is referred to as \"Participant\")  alleging that:\n\n     (a)  such Participant's Contributor Version directly or indirectly\n     infringes any patent, then any and all rights granted by such\n     Participant to You under Sections 2.1 and/or 2.2 of this License\n     shall, upon 60 days notice from Participant terminate prospectively,\n     unless if within 60 days after receipt of notice You either: (i)\n     agree in writing to pay Participant a mutually agreeable reasonable\n     royalty for Your past and future use of Modifications made by such\n     Participant, or (ii) withdraw Your litigation claim with respect to\n     the Contributor Version against such Participant.  If within 60 days\n     of notice, a reasonable royalty and payment arrangement are not\n     mutually agreed upon in writing by the parties or the litigation claim\n     is not withdrawn, the rights granted by Participant to You under\n     Sections 2.1 and/or 2.2 automatically terminate at the expiration of\n     the 60 day notice period specified above.\n\n     (b)  any software, hardware, or device, other than such Participant's\n     Contributor Version, directly or indirectly infringes any patent, then\n     any rights granted to You by such Participant under Sections 2.1(b)\n     and 2.2(b) are revoked effective as of the date You first made, used,\n     sold, distributed, or had made, Modifications made by that\n     Participant.\n\n     8.3.  If You assert a patent infringement claim against Participant\n     alleging that such Participant's Contributor Version directly or\n     indirectly infringes any patent where such claim is resolved (such as\n     by license or settlement) prior to the initiation of patent\n     infringement litigation, then the reasonable value of the licenses\n     granted by such Participant under Sections 2.1 or 2.2 shall be taken\n     into account in determining the amount or value of any payment or\n     license.\n\n     8.4.  In the event of termination under Sections 8.1 or 8.2 above,\n     all end user license agreements (excluding distributors and resellers)\n     which have been validly granted by You or any distributor hereunder\n     prior to termination shall survive termination.\n\n9. LIMITATION OF LIABILITY.\n\n     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT\n     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL\n     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,\n     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR\n     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY\n     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,\n     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER\n     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN\n     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF\n     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY\n     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW\n     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE\n     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO\n     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n\n10. U.S. GOVERNMENT END USERS.\n\n     The Covered Code is a \"commercial item,\" as that term is defined in\n     48 C.F.R. 2.101 (Oct. 1995), consisting of \"commercial computer\n     software\" and \"commercial computer software documentation,\" as such\n     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48\n     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),\n     all U.S. Government End Users acquire Covered Code with only those\n     rights set forth herein.\n\n11. MISCELLANEOUS.\n\n     This License represents the complete agreement concerning subject\n     matter hereof. If any provision of this License is held to be\n     unenforceable, such provision shall be reformed only to the extent\n     necessary to make it enforceable. This License shall be governed by\n     California law provisions (except to the extent applicable law, if\n     any, provides otherwise), excluding its conflict-of-law provisions.\n     With respect to disputes in which at least one party is a citizen of,\n     or an entity chartered or registered to do business in the United\n     States of America, any litigation relating to this License shall be\n     subject to the jurisdiction of the Federal Courts of the Northern\n     District of California, with venue lying in Santa Clara County,\n     California, with the losing party responsible for costs, including\n     without limitation, court costs and reasonable attorneys' fees and\n     expenses. The application of the United Nations Convention on\n     Contracts for the International Sale of Goods is expressly excluded.\n     Any law or regulation which provides that the language of a contract\n     shall be construed against the drafter shall not apply to this\n     License.\n\n12. RESPONSIBILITY FOR CLAIMS.\n\n     As between Initial Developer and the Contributors, each party is\n     responsible for claims and damages arising, directly or indirectly,\n     out of its utilization of rights under this License and You agree to\n     work with Initial Developer and Contributors to distribute such\n     responsibility on an equitable basis. Nothing herein is intended or\n     shall be deemed to constitute any admission of liability.\n\n13. MULTIPLE-LICENSED CODE.\n\n     Initial Developer may designate portions of the Covered Code as\n     \"Multiple-Licensed\".  \"Multiple-Licensed\" means that the Initial\n     Developer permits you to utilize portions of the Covered Code under\n     Your choice of the NPL or the alternative licenses, if any, specified\n     by the Initial Developer in the file described in Exhibit A.\n\nEXHIBIT A -Mozilla Public License.\n\n     ``The contents of this file are subject to the Mozilla Public License\n     Version 1.1 (the \"License\"); you may not use this file except in\n     compliance with the License. You may obtain a copy of the License at\n     http://www.mozilla.org/MPL/\n\n     Software distributed under the License is distributed on an \"AS IS\"\n     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the\n     License for the specific language governing rights and limitations\n     under the License.\n\n     The Original Code is ______________________________________.\n\n     The Initial Developer of the Original Code is ________________________.\n     Portions created by ______________________ are Copyright (C) ______\n     _______________________. All Rights Reserved.\n\n     Contributor(s): ______________________________________.\n\n     Alternatively, the contents of this file may be used under the terms\n     of the _____ license (the  \"[___] License\"), in which case the\n     provisions of [______] License are applicable instead of those\n     above.  If you wish to allow use of your version of this file only\n     under the terms of the [____] License and not to allow others to use\n     your version of this file under the MPL, indicate your decision by\n     deleting  the provisions above and replace  them with the notice and\n     other provisions required by the [___] License.  If you do not delete\n     the provisions above, a recipient may use your version of this file\n     under either the MPL or the [___] License.\"\n\n     [NOTE: The text of this Exhibit A may differ slightly from the text of\n     the notices in the Source Code files of the Original Code. You should\n     use the text of this Exhibit A rather than the text found in the\n     Original Code Source Code for Your Modifications.]\n\n### Microsoft Public License\n\nMicrosoft Permissive License (Ms-PL)\n \n\tThis 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 \n1. Definitions\n\n\tThe terms reproduce, reproduction, derivative works, and distribution have the same meaning here as under U.S. copyright law.\n\tA contribution is the original software, or any additions or changes to the software.\n\tA contributor is any person that distributes its contribution under this license.\n\t Licensed patents are a contributors patent claims that read directly on its contribution.\n \n2. Grant of Rights\n\n\t(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, 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\t(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, 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 \n3. Conditions and Limitations\n\n\t(A) No Trademark License- This license does not grant you rights to use any contributors name, logo, or trademarks.\n\t(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\n\t(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\n\t(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\n\t(E) The software is licensed as-is. You bear the risk of using it. The contributors give 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, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\n\t(F) If you distribute the software or derivative works with programs you develop, you agree to indemnify, defend, and hold harmless all contributors from any claims, including attorneys fees, related to the distribution or use of your programs.  For clarity, you have no such obligations to a contributor for any claims based solely on the unmodified contributions of that contributor.\n\t(G) If you make any additions or changes to the original software, you may only distribute them under a new namespace.  In addition, you will clearly identify your changes or additions as your own.\n\n### Infozip BSD\n\nThis is version 2009-Jan-02 of the Info-ZIP license. The definitive\nversion of this document should be available at\nftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and a\ncopy at http://www.info-zip.org/pub/infozip/license.html.\n\nCopyright (c) 1990-2009 Info-ZIP. All rights reserved.\n\nFor the purposes of this copyright and license, \"Info-ZIP\" is defined\nas the following set of individuals: Mark Adler, John Bush, Karl\nDavis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter\nGoatley, Ed Gordon, Ian Gorman, Chris Herborth, Dirk Haase, Greg\nHartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David\nKirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve\nP. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,\nKai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,\nChristian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,\nRich Wales, Mike White.\n\nThis software is provided \"as is,\" without warranty of any kind,\nexpress or implied. In no event shall Info-ZIP or its contributors be\nheld liable for any direct, indirect, incidental, special or\nconsequential damages arising out of the use of or inability to use\nthis software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the above disclaimer and the following\nrestrictions:\n\nRedistributions of source code (in whole or in part) must retain the\nabove copyright notice, definition, disclaimer, and this list of\nconditions.\n\nRedistributions in binary form (compiled executables and libraries)\nmust reproduce the above copyright notice, definition, disclaimer, and\nthis list of conditions in documentation and/or other materials\nprovided with the distribution. Additional documentation is not needed\nfor executables where a command line license option provides these and\na note regarding this option is in the executable's startup\nbanner. The sole exception to this condition is redistribution of a\nstandard UnZipSFX binary (including SFXWiz) as part of a\nself-extracting archive; that is permitted without inclusion of this\nlicense, as long as the normal SFX banner has not been removed from\nthe binary or disabled.\n\nAltered versions--including, but not limited to, ports to new\noperating systems, existing ports with new graphical interfaces,\nversions with modified or added functionality, and dynamic, shared, or\nstatic library versions not from Info-ZIP--must be plainly marked as\nsuch and must not be misrepresented as being the original source or,\nif binaries, compiled from the original source. Such altered versions\nalso must not be misrepresented as being Info-ZIP releases--including,\nbut not limited to, labeling of the altered versions with the names\n\"Info-ZIP\" (or any variation thereof, including, but not limited to,\ndifferent capitalizations), \"Pocket UnZip,\" \"WiZ\" or \"MacZip\" without\nthe explicit permission of Info-ZIP. Such altered versions are further\nprohibited from misrepresentative use of the Zip-Bugs or Info-ZIP\ne-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP\nwill provide support for the altered versions.\n\nInfo-ZIP retains the right to use the names \"Info-ZIP,\" \"Zip,\"\n\"UnZip,\" \"UnZipSFX,\" \"WiZ,\" \"Pocket UnZip,\" \"Pocket Zip,\" and \"MacZip\"\nfor its own source and binary releases.\n\n### License Creative Commons 2.5\n\n// Copyright 2006 James Newton-King\n// http://www.newtonsoft.com\n//\n// This work is licensed under the Creative Commons Attribution 2.5 License\n// http://creativecommons.org/licenses/by/2.5/\n//\n// You are free:\n//    * to copy, distribute, display, and perform the work\n//    * to make derivative works\n//    * to make commercial use of the work\n//\n// Under the following conditions:\n//    * For any reuse or distribution, you must make clear to others the license terms of this work.\n//    * Any of these conditions can be waived if you get permission from the copyright holder.\n\nFrom: james.newtonking@gmail.com [mailto:james.newtonking@gmail.com] On Behalf Of James Newton-King\nSent: Tuesday, June 05, 2007 6:36 AM\nTo: Konstantin Triger\nSubject: Re: Support request by Konstantin Triger for Json.NET\n\nHey Kosta\n\nI think it would be awesome to use Json.NET in Mono for System.Web.Extensions.\n\nThe CC license has the following clause: Any of the above conditions can be waived if you get permission from the copyright holder.\n\nI can waive that statement for you and Mono. Would that be acceptable?\n\n\nRegards,\nJames\n\n### Creative Commons Attribution 4.0 International Public License\n\nAttribution 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n\twiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More_considerations\n     for the public: \n\twiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution 4.0 International Public License (\"Public License\"). To the\nextent this Public License may be interpreted as a contract, You are\ngranted the Licensed Rights in consideration of Your acceptance of\nthese terms and conditions, and the Licensor grants You such rights in\nconsideration of benefits the Licensor receives from making the\nLicensed Material available under these terms and conditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  d. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  e. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  f. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  g. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  h. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  i. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  j. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  k. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n       4. If You Share Adapted Material You produce, the Adapter's\n          License You apply must not prevent recipients of the Adapted\n          Material from complying with this Public License.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material; and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\nits public licenses to material it publishes and in those instances\nwill be considered the “Licensor.” The text of the Creative Commons\npublic licenses is dedicated to the public domain under the CC0 Public\nDomain Dedication. Except for the limited purpose of indicating that\nmaterial is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the\npublic licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n\n### GPL version 2\n\n\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year  name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "Hazel/vendor/mono/README.md",
    "content": "Mono is a software platform designed to allow developers to easily\ncreate cross platform applications.  It is an open source\nimplementation of Microsoft's .NET Framework based on the ECMA\nstandards for C# and the Common Language Runtime.\n\nThe Mono project is part of the [.NET Foundation](https://www.dotnetfoundation.org/)\n\n[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mono/mono?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n1. [Compilation and Installation](#compilation-and-installation)\n2. [Using Mono](#using-mono)\n3. [Directory Roadmap](#directory-roadmap)\n4. [Contributing to Mono](#contributing-to-mono)\n5. [Reporting bugs](#reporting-bugs)\n6. [Configuration Options](#configuration-options)\n7. [Working with Submodules](#working-with-submodules)\n\n### Build Status\n\n| OS           | Architecture       | Status                       |\n|--------------|--------------------|------------------------------|\n| Debian 9     | amd64              | [![debian-9-amd64][1]][2]    |\n| Debian 9     | i386               | [![debian-9-i386][3]][4]     |\n| Debian 9     | armel              | [![debian-9-armel][5]][6]    |\n| Debian 9     | armhf              | [![debian-9-armhf][7]][8]    |\n| Debian 9     | arm64              | [![debian-9-arm64][9]][10]   |\n| OS X         | amd64              | [![osx-amd64][11]][12]       |\n| OS X         | i386               | [![osx-i386][13]][14]        |\n| Windows      | amd64              | [![windows-amd64][15]][16]   |\n| Windows      | i386               | [![windows-i386][17]][18]    |\n| CentOS       | s390x (cs)         | [![centos-s390x][19]][20]    |\n| Debian 9     | ppc64el (cs)       | [![debian-9-ppc64el][21]][22]|\n| AIX 6.1      | ppc64 (cs)         | [![aix-ppc64][23]][24]       |\n| FreeBSD 12   | amd64 (cs)         | [![freebsd-amd64][25]][26]   |\n\n_(cs) = community supported architecture_\n\n[1]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-amd64/badge/icon\n[2]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-amd64\n[3]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-i386/badge/icon\n[4]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-i386/\n[5]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-armel/badge/icon\n[6]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-armel/\n[7]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-armhf/badge/icon\n[8]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-armhf/\n[9]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-arm64/badge/icon\n[10]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-9-arm64/\n[11]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-amd64/badge/icon\n[12]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-amd64/\n[13]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-i386/badge/icon\n[14]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-i386/\n[15]: https://jenkins.mono-project.com/job/z/label=w64/badge/icon\n[16]: https://jenkins.mono-project.com/job/z/label=w64/\n[17]: https://jenkins.mono-project.com/job/z/label=w32/badge/icon\n[18]: https://jenkins.mono-project.com/job/z/label=w32/\n[19]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=centos-s390x/badge/icon\n[20]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=centos-s390x\n[21]: https://jenkins.mono-project.com/job/test-mono-mainline-community-chroot/label=debian-9-ppc64el/badge/icon\n[22]: https://jenkins.mono-project.com/job/test-mono-mainline-community-chroot/label=debian-9-ppc64el\n[23]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=aix-ppc64/badge/icon\n[24]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=aix-ppc64\n[25]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=freebsd-12-amd64/badge/icon\n[26]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=freebsd-12-amd64\n\nCompilation and Installation\n============================\n\nBuilding the Software\n---------------------\n\nPlease see our guides for building Mono on\n[Mac OS X](https://www.mono-project.com/docs/compiling-mono/mac/),\n[Linux](https://www.mono-project.com/docs/compiling-mono/linux/) and \n[Windows](https://www.mono-project.com/docs/compiling-mono/windows/).\n\nNote that building from Git assumes that you already have Mono installed,\nso please download and [install the latest Mono release](https://www.mono-project.com/download/)\nbefore trying to build from Git. This is required because the Mono build\nrelies on a working Mono C# compiler to compile itself\n(also known as [bootstrapping](https://en.wikipedia.org/wiki/Bootstrapping_(compilers))).\n\nIf you don't have a working Mono installation\n---------------------------------------------\n\nIf you don't have a working Mono installation, you can try a slightly\nmore risky approach: getting the latest version of the 'monolite' distribution,\nwhich contains just enough to run the 'mcs' compiler. You do this with:\n\n    # Run the following line after ./autogen.sh\n    make get-monolite-latest\n\nThis will download and place the files appropriately so that you can then\njust run:\n\n    make\n\nThe build will then use the files downloaded by `make get-monolite-latest`.\n\nTesting and Installation\n------------------------\n\nYou can run the mono and mcs test suites with the command: `make check`.\n\nExpect to find a few test suite failures. As a sanity check, you\ncan compare the failures you got with [https://jenkins.mono-project.com/](https://jenkins.mono-project.com/).\n\nYou can now install mono with: `make install`\n\nYou can verify your installation by using the mono-test-install\nscript, it can diagnose some common problems with Mono's install.\nFailure to follow these steps may result in a broken installation. \n\nUsing Mono\n==========\n\nOnce you have installed the software, you can run a few programs:\n\n* `mono program.exe` runtime engine\n\n* `mcs program.cs` C# compiler\n\n* `monodis program.exe` CIL Disassembler\n\nSee the man pages for mono(1), mcs(1) and monodis(1) for further details.\n\nDirectory Roadmap\n=================\n\n* `acceptance-tests/` - Optional third party test suites used to validate Mono against a wider range of test cases.\n\n* `data/` - Configuration files installed as part of the Mono runtime.\n\n* `docs/` - Technical documents about the Mono runtime.\n\n* `external/` - Git submodules for external libraries (Newtonsoft.Json, ikvm, etc).\n\n* `ikvm-native/` - Glue code for ikvm.\n\n* `libgc/` - The (deprecated) Boehm GC implementation.\n\n* `llvm/` - Utility Makefiles for integrating the Mono LLVM fork.\n\n* `m4/` - General utility Makefiles.\n\n* `man/` - Manual pages for the various Mono commands and programs.\n\n* `mcs/` - The class libraries, compiler and tools\n\n  * `class/` - The class libraries (like System.*, Microsoft.Build, etc.)\n\n  * `mcs/` - The Mono C# compiler written in C#\n\n  * `tools/` - Tools like gacutil, ikdasm, mdoc, etc.\n\n* `mono/` - The core of the Mono Runtime.\n\n  * `arch/` - Architecture specific portions.\n\n  * `benchmark/` - A collection of benchmarks.\n\n  * `btls/` - Build files for the BTLS library which incorporates BoringSSL.\n\n  * `cil/` - Common Intermediate Representation, XML\ndefinition of the CIL bytecodes.\n\n  * `dis/` - CIL executable Disassembler.\n\n  * `eglib/` - Independent implementation of the glib API.\n\n  * `metadata/` - The object system and metadata reader.\n\n  * `mini/` - The Just in Time Compiler.\n\n  * `profiler/` - The profiler implementation.\n\n  * `sgen/` - The SGen Garbage Collector implementation.\n\n  * `tests/` - The main runtime tests.\n\n  * `unit-tests/` - Additional runtime unit tests.\n\n  * `utils/` - Utility functions used across the runtime codebase.\n\n* `msvc/` - Logic for the MSVC / Visual Studio based runtime and BCL build system.\nThe latter is experimental at the moment.\n\n* `packaging/` - Packaging logic for the OS X and Windows Mono packages.\n\n* `po/` - Translation files.\n\n* `runtime/` - A directory that contains the Makefiles that link the\nmono/ and mcs/ build systems.\n\n* `samples/` - Some simple sample programs on uses of the Mono\nruntime as an embedded library.\n\n* `scripts/` - Scripts used to invoke Mono and the corresponding program.\n\n* `sdks/` - A new way of embedding Mono into Xamarin.iOS, Xamarin.Android and other products.\n\n* `support/` - Various support libraries.\n\n* `tools/` - A collection of tools, mostly used during Mono development.\n\nContributing to Mono\n====================\n\nBefore submitting changes to Mono, please review the [contribution\nguidelines](https://www.mono-project.com/community/contributing/).\nPlease pay particular attention to the [Important\nRules](https://www.mono-project.com/community/contributing/#important-rules)\nsection.\n\nReporting bugs\n==============\n\nTo submit bug reports, please [open an issue on the mono GitHub repo](https://github.com/mono/mono/issues/new).\n\nPlease use the search facility to ensure the same bug hasn't already\nbeen submitted and follow our\n[guidelines](https://www.mono-project.com/community/bugs/make-a-good-bug-report/)\non how to make a good bug report.\n\nConfiguration Options\n=====================\n\nThe following are the configuration options that someone building Mono\nmight want to use:\n\n* `--with-sgen=yes,no` - Generational GC support: Used to enable or\ndisable the compilation of a Mono runtime with the SGen garbage\ncollector.\n\n  * On platforms that support it, after building Mono, you will have\nboth a `mono-boehm` binary and a `mono-sgen` binary. `mono-boehm` uses Boehm,\nwhile `mono-sgen` uses the Simple Generational GC.\n\n* `--with-libgc=[included, none]` - Selects the default Boehm\ngarbage collector engine to use.\n\n  * *included*: (*slightly modified Boehm GC*) This is the default\nvalue for the Boehm GC, and it's the most feature complete, it will\nallow Mono to use typed allocations and support the debugger.\n\n  * *none*:\nDisables the inclusion of a Boehm garbage collector.\n\n  * This defaults to `included`.\n\n* `--enable-cooperative-suspend`\n\n  * If you pass this flag the Mono runtime is configured to only use\n  the cooperative mode of the garbage collector.  If you do not pass\n  this flag, then you can control at runtime the use of the\n  cooperative GC mode by setting the `MONO_ENABLE_COOP_SUSPEND` flag.\n  \n* `--with-tls=__thread,pthread`\n\n  * Controls how Mono should access thread local storage,\npthread forces Mono to use the pthread APIs, while\n__thread uses compiler-optimized access to it.\n\n  * Although __thread is faster, it requires support from\nthe compiler, kernel and libc. Old Linux systems do\nnot support with __thread.\n\n  * This value is typically pre-configured and there is no\nneed to set it, unless you are trying to debug a problem.\n\n* `--with-sigaltstack=yes,no`\n\n  * **Experimental**: Use at your own risk, it is known to\ncause problems with garbage collection and is hard to\nreproduce those bugs.\n\n  * This controls whether Mono will install a special\nsignal handler to handle stack overflows. If set to\n`yes`, it will turn stack overflows into the\nStackOverflowException. Otherwise when a stack\noverflow happens, your program will receive a\nsegmentation fault.\n\n  * The configure script will try to detect if your\noperating system supports this. Some older Linux\nsystems do not support this feature, or you might want\nto override the auto-detection.\n\n* `--with-static_mono=yes,no`\n\n  * This controls whether `mono` should link against a\nstatic library (libmono.a) or a shared library\n(libmono.so). \n\n  * This defaults to `yes`, and will improve the performance\nof the `mono` program. \n\n  * This only affects the `mono' binary, the shared\nlibrary libmono.so will always be produced for\ndevelopers that want to embed the runtime in their\napplication.\n\n* `--with-xen-opt=yes,no` - Optimize code for Xen virtualization.\n\n  * It makes Mono generate code which might be slightly\nslower on average systems, but the resulting executable will run\nfaster under the Xen virtualization system.\n\n  * This defaults to `yes`.\n\n* `--with-large-heap=yes,no` - Enable support for GC heaps larger than 3GB.\n\n  * This only applies only to the Boehm garbage collector, the SGen garbage\ncollector does not use this configuration option.\n\n  * This defaults to `no`.\n\n* `--enable-small-config=yes,no` - Enable some tweaks to reduce memory usage\nand disk footprint at the expense of some capabilities.\n\n  * Typically this means that the number of threads that can be created\nis limited (256), that the maximum heap size is also reduced (256 MB)\nand other such limitations that still make mono useful, but more suitable\nto embedded devices (like mobile phones).\n\n  * This defaults to `no`.\n\n* `--with-ikvm-native=yes,no` - Controls whether the IKVM JNI interface library is\nbuilt or not.\n\n  * This is used if you are planning on\nusing the IKVM Java Virtual machine with Mono.\n\n  * This defaults to `yes`.\n\n* `--with-profile4=yes,no` - Whether you want to build the 4.x profile libraries\nand runtime.\n\n  * This defaults to `yes`.\n\n* `--with-libgdiplus=installed,sibling,<path>` - Configure where Mono\nsearches for libgdiplus when running System.Drawing tests.\n\n  * It defaults to `installed`, which means that the\nlibrary is available to Mono through the regular\nsystem setup.\n\n  * `sibling` can be used to specify that a libgdiplus\nthat resides as a sibling of this directory (mono)\nshould be used.\n\n * Or you can specify a path to a libgdiplus.\n\n* `--enable-minimal=LIST`\n\n  * Use this feature to specify optional runtime\ncomponents that you might not want to include.  This\nis only useful for developers embedding Mono that\nrequire a subset of Mono functionality.\n  * The list is a comma-separated list of components that\nshould be removed, these are:\n\n    * `aot`:\nDisables support for the Ahead of Time compilation.\n\n    * `attach`:\nSupport for the Mono.Management assembly and the\nVMAttach API (allowing code to be injected into\na target VM)\n\n    * `com`:\nDisables COM support.\n\n    * `debug`:\nDrop debugging support.\n\n    * `decimal`:\nDisables support for System.Decimal.\n\n    * `full_messages`:\nBy default Mono comes with a full table\nof messages for error codes. This feature\nturns off uncommon error messages and reduces\nthe runtime size.\n\n    * `generics`:\nGenerics support.  Disabling this will not\nallow Mono to run any 2.0 libraries or\ncode that contains generics.\n\n    * `jit`:\nRemoves the JIT engine from the build, this reduces\nthe executable size, and requires that all code\nexecuted by the virtual machine be compiled with\nFull AOT before execution.\n\n    * `large_code`:\nDisables support for large assemblies.\n\n    * `logging`:\nDisables support for debug logging.\n\n    * `pinvoke`:\nSupport for Platform Invocation services,\ndisabling this will drop support for any\nlibraries using DllImport.\n\n    * `portability`:\nRemoves support for MONO_IOMAP, the environment\nvariables for simplifying porting applications that \nare case-insensitive and that mix the Unix and Windows path separators.\n\n    * `profiler`:\nDisables support for the default profiler.\n\n    * `reflection_emit`:\nDrop System.Reflection.Emit support\n\n    * `reflection_emit_save`:\nDrop support for saving dynamically created\nassemblies (AssemblyBuilderAccess.Save) in\nSystem.Reflection.Emit.\n\n    * `shadow_copy`:\nDisables support for AppDomain's shadow copies\n(you can disable this if you do not plan on \nusing appdomains).\n\n    * `simd`:\nDisables support for the Mono.SIMD intrinsics\nlibrary.\n\n    * `ssa`:\nDisables compilation for the SSA optimization\nframework, and the various SSA-based optimizations.\n\n* `--enable-llvm`\n* `--enable-loadedllvm`\n\n  * This enables the use of LLVM as a code generation engine\nfor Mono.  The LLVM code generator and optimizer will be \nused instead of Mono's built-in code generator for both\nJust in Time and Ahead of Time compilations.\n\n  * See https://www.mono-project.com/docs/advanced/mono-llvm/ for the \nfull details and up-to-date information on this feature.\n\n  * You will need to have an LLVM built that Mono can link\nagainst.\n\n  * The `--enable-loadedllvm` variant will make the LLVM backend\ninto a runtime-loadable module instead of linking it directly\ninto the main mono binary.\n\n* `--enable-big-arrays` - Enable use of arrays with indexes larger\nthan Int32.MaxValue.\n\n  * By default Mono has the same limitation as .NET on\nWin32 and Win64 and limits array indexes to 32-bit\nvalues (even on 64-bit systems).\n\n  * In certain scenarios where large arrays are required,\nyou can pass this flag and Mono will be built to\nsupport 64-bit arrays.\n\n  * This is not the default as it breaks the C embedding\nABI that we have exposed through the Mono development\ncycle.\n\n* `--enable-parallel-mark`\n\n  * Use this option to enable the garbage collector to use\nmultiple CPUs to do its work.  This helps performance\non multi-CPU machines as the work is divided across CPUS.\n\n  * This option is not currently the default on OSX\nas it runs into issues there.\n\n  * This option only applies to the Boehm GC.\n\n* `--enable-dtrace`\n\n  * On Solaris and MacOS X builds a version of the Mono\nruntime that contains DTrace probes and can\nparticipate in the system profiling using DTrace.\n\n* `--disable-dev-random`\n\n  * Mono uses /dev/random to obtain good random data for\nany source that requires random numbers.   If your\nsystem does not support this, you might want to\ndisable it.\n\n  * There are a number of runtime options to control this\nalso, see the man page.\n\n* `--with-csc=roslyn,mcs,default`\n\n  * Use this option to configure which C# compiler to use.  By default\n    the configure script will pick Roslyn, except on platforms where\n    Roslyn does not work (Big Endian systems) where it will pick mcs.\n\n    If you specify \"mcs\", then Mono's C# compiler will be used.  This\n    also allows for a complete bootstrap of Mono's core compiler and\n    core libraries from source.\n\n    If you specify \"roslyn\", then Roslyn's C# compiler will be used.\n    This currently uses Roslyn binaries.\n  \n* `--enable-nacl`\n\n  * This configures the Mono compiler to generate code\nsuitable to be used by Google's Native Client:\nhttps://code.google.com/p/nativeclient/\n\n  * Currently this is used with Mono's AOT engine as\nNative Client does not support JIT engines yet.\n\n* `--enable-wasm`\n\n  * Use this option to configure mono to run on WebAssembly. It will\n    set both host and target to the WebAssembly triplet. This overrides\n    the values passed to `--host` or `--target` and ignored what config.sub guesses.\n\n    This is a workaround to enable usage of old automake versions that don't\n    recognize the wasm triplet.\n\n\nWorking With Submodules\n=======================\n\nMono references several external git submodules, for example\na fork of Microsoft's reference source code that has been altered\nto be suitable for use with the Mono runtime.\n\nThis section describes how to use it.\n\nAn initial clone should be done recursively so all submodules will also be\ncloned in a single pass:\n\n\t$ git clone --recursive git@github.com:mono/mono\n\nOnce cloned, submodules can be updated to pull down the latest changes.\nThis can also be done after an initial non-recursive clone:\n\n\t$ git submodule update --init --recursive\n\nTo pull external changes into a submodule:\n\n\t$ cd <submodule>\n\t$ git pull origin <branch>\n\t$ cd <top-level>\n\t$ git add <submodule>\n\t$ git commit\n\nBy default, submodules are detached because they point to a specific commit.\nUse `git checkout` to move back to a branch before making changes:\n\n\t$ cd <submodule>\n\t$ git checkout <branch>\n\t# work as normal; the submodule is a normal repo\n\t$ git commit/push new changes to the repo (submodule)\n\n\t$ cd <top-level>\n\t$ git add <submodule> # this will record the new commits to the submodule\n\t$ git commit\n\nTo switch the repo of a submodule (this should not be a common or normal thing\nto do at all), first edit `.gitmodules` to point to the new location, then:\n\n\t$ git submodule sync -- <path of the submodule>\n\t$ git submodule update --recursive\n\t$ git checkout <desired new hash or branch>\n\nThe desired output diff is a change in `.gitmodules` to reflect the\nchange in the remote URL, and a change in /<submodule> where you see\nthe desired change in the commit hash.\n\nLicense\n=======\n\nSee the LICENSE file for licensing information, and the PATENTS.TXT\nfile for information about Microsoft's patent grant.\n\nMono Trademark Use Policy\n=========================\n\nThe use of trademarks and logos for Mono can be found [here](https://www.dotnetfoundation.org/legal/mono-tm). \n\nMaintaining the Class Library Solution Files\n============================================\n\nMono now ships with a solution file that can be used to build the\nassemblies from an IDE.  Either by opening the topmost `net_4_x.sln`\nfile, or to by loading one of the individual `csproj` files located in\neach directory.\n\nThese are maintained by extracting the configuration information from\nour Makefiles, which as of May 2016 remain the canonical location for\nconfiguration information.\n\nWhen changes are made to the Makefiles, a user would need to run the\nfollowing command to re-generate the solution files at the top level:\n\n\t$ make update-solution-files\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/jit/jit.h",
    "content": "/**\n * \\file\n * Author:\n *   Dietmar Maurer (dietmar@ximian.com)\n *\n * (C) 2001, 2002, 2003 Ximian, Inc.\n */\n\n#ifndef _MONO_JIT_JIT_H_\n#define _MONO_JIT_JIT_H_\n\n#include <mono/metadata/appdomain.h>\n\nMONO_BEGIN_DECLS\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoDomain * \nmono_jit_init              (const char *file);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoDomain * \nmono_jit_init_version      (const char *root_domain_name, const char *runtime_version);\n\nMONO_API MonoDomain * \nmono_jit_init_version_for_test_only      (const char *root_domain_name, const char *runtime_version);\n\nMONO_API int\nmono_jit_exec              (MonoDomain *domain, MonoAssembly *assembly, \n\t\t\t    int argc, char *argv[]);\nMONO_API void        \nmono_jit_cleanup           (MonoDomain *domain);\n\nMONO_API mono_bool\nmono_jit_set_trace_options (const char* options);\n\nMONO_API void\nmono_set_signal_chaining   (mono_bool chain_signals);\n\nMONO_API void\nmono_set_crash_chaining   (mono_bool chain_signals);\n\n/**\n * This function is deprecated, use mono_jit_set_aot_mode instead.\n */\nMONO_API void\nmono_jit_set_aot_only      (mono_bool aot_only);\n\n/**\n * Allows control over our AOT (Ahead-of-time) compilation mode.\n */\ntypedef enum {\n\t/* Disables AOT mode */\n\tMONO_AOT_MODE_NONE,\n\t/* Enables normal AOT mode, equivalent to mono_jit_set_aot_only (false) */\n\tMONO_AOT_MODE_NORMAL,\n\t/* Enables hybrid AOT mode, JIT can still be used for wrappers */\n\tMONO_AOT_MODE_HYBRID,\n\t/* Enables full AOT mode, JIT is disabled and not allowed,\n\t * equivalent to mono_jit_set_aot_only (true) */\n\tMONO_AOT_MODE_FULL,\n\t/* Same as full, but use only llvm compiled code */\n\tMONO_AOT_MODE_LLVMONLY,\n\t/* Uses Interpreter, JIT is disabled and not allowed,\n\t * equivalent to \"--full-aot --interpreter\" */\n\tMONO_AOT_MODE_INTERP,\n\t/* Same as INTERP, but use only llvm compiled code */\n\tMONO_AOT_MODE_INTERP_LLVMONLY,\n\t/* Use only llvm compiled code, fall back to the interpeter */\n\tMONO_AOT_MODE_LLVMONLY_INTERP,\n\t/* Sentinel value used internally by the runtime. We use a large number to avoid clashing with some internal values. */\n\tMONO_AOT_MODE_LAST = 1000,\n} MonoAotMode;\n\nMONO_API void\nmono_jit_set_aot_mode      (MonoAotMode mode);\n\n/*\n * Returns whether the runtime was invoked for the purpose of AOT-compiling an\n * assembly, i.e. no managed code will run.\n */\nMONO_API mono_bool\nmono_jit_aot_compiling (void);\n\n/* Allow embedders to decide wherther to actually obey breakpoint instructions\n * in specific methods (works for both break IL instructions and Debugger.Break ()\n * method calls).\n */\ntypedef enum {\n\t/* the default is to always obey the breakpoint */\n\tMONO_BREAK_POLICY_ALWAYS,\n\t/* a nop is inserted instead of a breakpoint */\n\tMONO_BREAK_POLICY_NEVER,\n\t/* the breakpoint is executed only if the program has ben started under\n\t * the debugger (that is if a debugger was attached at the time the method\n\t * was compiled).\n\t */\n\tMONO_BREAK_POLICY_ON_DBG\n} MonoBreakPolicy;\n\ntypedef MonoBreakPolicy (*MonoBreakPolicyFunc) (MonoMethod *method);\nMONO_API void mono_set_break_policy (MonoBreakPolicyFunc policy_callback);\n\nMONO_API void\nmono_jit_parse_options     (int argc, char * argv[]);\n\nMONO_API char*       mono_get_runtime_build_info    (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_set_use_llvm (mono_bool use_llvm);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_aot_register_module (void **aot_info);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoDomain* mono_jit_thread_attach (MonoDomain *domain);\n\n\nMONO_END_DECLS\n\n#endif\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/abi-details.h",
    "content": "/**\n * \\file\n * Copyright 2014 Xamarin Inc\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_ABI_DETAILS_H__\n#define __MONO_METADATA_ABI_DETAILS_H__\n\n#include <config.h>\n#include <glib.h>\n\n/*\n * This file defines macros to compute sizes/alignments/field offsets which depend on\n * the ABI. It is needed during cross compiling since the generated code needs to\n * contain offsets which correspond to the ABI of the target, not the host.\n * It defines the following macros:\n * - MONO_ABI_SIZEOF(type) for every basic type\n * - MONO_ABI_ALIGNOF(type) for every basic type\n * - MONO_STRUCT_OFFSET(struct, field) for various runtime structures\n * When not cross compiling, these correspond to the host ABI (i.e. sizeof/offsetof).\n * When cross compiling, these are defined in a generated header file which is\n * generated by the offsets tool in tools/offsets-tool. The name of the file\n * is given by the --with-cross-offsets= configure argument.\n */\n\ntypedef enum {\n\tMONO_ALIGN_gint8,\n\tMONO_ALIGN_gint16,\n\tMONO_ALIGN_gint32,\n\tMONO_ALIGN_gint64,\n\tMONO_ALIGN_float,\n\tMONO_ALIGN_double,\n\tMONO_ALIGN_gpointer,\n\tMONO_ALIGN_COUNT\n} CoreTypeAlign;\n\nint mono_abi_alignment (CoreTypeAlign type);\n\n#define MONO_ABI_ALIGNOF(type) mono_abi_alignment (MONO_ALIGN_ ## type)\n#define MONO_ABI_SIZEOF(type) (MONO_STRUCT_SIZE (type))\n#define MONO_CURRENT_ABI_SIZEOF(type) ((int)sizeof(type))\n\n#undef DECL_OFFSET2\n#define DECL_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field = -1,\n#define DECL_OFFSET2(struct,field,offset) MONO_OFFSET_ ## struct ## _ ## field = offset,\n#define DECL_ALIGN2(type,size)\n#define DECL_SIZE(type) MONO_SIZEOF_ ##type = -1,\n#define DECL_SIZE2(type,size) MONO_SIZEOF_ ##type = size,\n\n\nenum {\n#include \"object-offsets.h\"\n};\n\n#ifdef USED_CROSS_COMPILER_OFFSETS\n#define MONO_STRUCT_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field\n#define MONO_STRUCT_SIZE(struct) MONO_SIZEOF_ ## struct\n#else\n#if defined(HAS_CROSS_COMPILER_OFFSETS) || defined(MONO_CROSS_COMPILE)\n#define MONO_STRUCT_OFFSET(struct,field) (MONO_OFFSET_ ## struct ## _ ## field == -1, G_STRUCT_OFFSET (struct,field))\n#define MONO_STRUCT_SIZE(struct) (MONO_SIZEOF_ ## struct == -1, (int)sizeof(struct))\n#else\n#define MONO_STRUCT_OFFSET(struct,field) G_STRUCT_OFFSET (struct,field)\n#define MONO_STRUCT_SIZE(struct) ((int)sizeof(struct))\n#endif\n#endif\n\n// #define MONO_SIZEOF_MonoObject (2 * MONO_ABI_SIZEOF(gpointer))\n#define MONO_SIZEOF_MonoObject (2 * MONO_SIZEOF_gpointer)\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/appdomain-icalls.h",
    "content": "/**\n * \\file\n * Appdomain-related icalls.\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_METADATA_APPDOMAIN_ICALLS_H__\n#define __MONO_METADATA_APPDOMAIN_ICALLS_H__\n\n#include <mono/metadata/appdomain.h>\n#include <mono/metadata/handle.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/icalls.h>\n#include \"reflection-internals.h\"\n\n#endif /*__MONO_METADATA_APPDOMAIN_ICALLS_H__*/\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/appdomain.h",
    "content": "/**\n * \\file\n * AppDomain functions\n *\n * Author:\n *\tDietmar Maurer (dietmar@ximian.com)\n *\n * (C) 2001 Ximian, Inc.\n */\n\n#ifndef _MONO_METADATA_APPDOMAIN_H_\n#define _MONO_METADATA_APPDOMAIN_H_\n\n#include <mono/utils/mono-publib.h>\n\n#include <mono/utils/mono-forward.h>\n#include <mono/metadata/object.h>\n#include <mono/metadata/reflection.h>\n\nMONO_BEGIN_DECLS\n\ntypedef void (*MonoThreadStartCB) (intptr_t tid, void* stack_start,\n\t\t\t\t   void* func);\ntypedef void (*MonoThreadAttachCB) (intptr_t tid, void* stack_start);\n\ntypedef struct _MonoAppDomain MonoAppDomain;\n\ntypedef void (*MonoDomainFunc) (MonoDomain *domain, void* user_data);\n\nMONO_API MonoDomain*\nmono_init                  (const char *filename);\n\nMONO_API MonoDomain *\nmono_init_from_assembly    (const char *domain_name, const char *filename);\n\nMONO_API MonoDomain *\nmono_init_version          (const char *domain_name, const char *version);\n\nMONO_API MonoDomain*\nmono_get_root_domain       (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_runtime_init          (MonoDomain *domain, MonoThreadStartCB start_cb,\n\t\t\t    MonoThreadAttachCB attach_cb);\n\nMONO_API void\nmono_runtime_cleanup       (MonoDomain *domain);\n\nMONO_API void\nmono_install_runtime_cleanup (MonoDomainFunc func);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_runtime_quit (void);\n\nMONO_API void\nmono_runtime_set_shutting_down (void);\n\nMONO_API mono_bool\nmono_runtime_is_shutting_down (void);\n\nMONO_API const char*\nmono_check_corlib_version (void);\n\nMONO_API MonoDomain *\nmono_domain_create         (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoDomain *\nmono_domain_create_appdomain (char *friendly_name, char *configuration_file);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_domain_set_config (MonoDomain *domain, const char *base_dir, const char *config_file_name);\n\nMONO_API MonoDomain *\nmono_domain_get            (void);\n\nMONO_API MonoDomain *\nmono_domain_get_by_id      (int32_t domainid);\n\nMONO_API int32_t\nmono_domain_get_id         (MonoDomain *domain);\n\nMONO_API const char *\nmono_domain_get_friendly_name (MonoDomain *domain);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_domain_set            (MonoDomain *domain, mono_bool force);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_domain_set_internal   (MonoDomain *domain);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_domain_unload (MonoDomain *domain);\n\nMONO_API void\nmono_domain_try_unload (MonoDomain *domain, MonoObject **exc);\n\nMONO_API mono_bool\nmono_domain_is_unloading   (MonoDomain *domain);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoDomain *\nmono_domain_from_appdomain (MonoAppDomain *appdomain);\n\nMONO_API void\nmono_domain_foreach        (MonoDomainFunc func, void* user_data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoAssembly *\nmono_domain_assembly_open  (MonoDomain *domain, const char *name);\n\nMONO_API mono_bool\nmono_domain_finalize       (MonoDomain *domain, uint32_t timeout);\n\nMONO_API void\nmono_domain_free           (MonoDomain *domain, mono_bool force);\n\nMONO_API mono_bool\nmono_domain_has_type_resolve (MonoDomain *domain);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoReflectionAssembly *\nmono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb);\n\nMONO_API mono_bool\nmono_domain_owns_vtable_slot (MonoDomain *domain, void* vtable_slot);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_context_init \t\t\t\t   (MonoDomain *domain);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_context_set\t\t\t\t   (MonoAppContext *new_context);\n\nMONO_API MonoAppContext * \nmono_context_get\t\t\t\t   (void);\n\nMONO_API int32_t\nmono_context_get_id         (MonoAppContext *context);\n\nMONO_API int32_t\nmono_context_get_domain_id  (MonoAppContext *context);\n\nMONO_API MonoJitInfo *\nmono_jit_info_table_find   (MonoDomain *domain, void* addr);\n\n/* MonoJitInfo accessors */\n\nMONO_API void*\nmono_jit_info_get_code_start (MonoJitInfo* ji);\n\nMONO_API int\nmono_jit_info_get_code_size (MonoJitInfo* ji);\n\nMONO_API MonoMethod*\nmono_jit_info_get_method (MonoJitInfo* ji);\n\n\nMONO_API MonoImage*\nmono_get_corlib            (void);\n\nMONO_API MonoClass*\nmono_get_object_class      (void);\n\nMONO_API MonoClass*\nmono_get_byte_class        (void);\n\nMONO_API MonoClass*\nmono_get_void_class        (void);\n\nMONO_API MonoClass*\nmono_get_boolean_class     (void);\n\nMONO_API MonoClass*\nmono_get_sbyte_class       (void);\n\nMONO_API MonoClass*\nmono_get_int16_class       (void);\n\nMONO_API MonoClass*\nmono_get_uint16_class      (void);\n\nMONO_API MonoClass*\nmono_get_int32_class       (void);\n\nMONO_API MonoClass*\nmono_get_uint32_class      (void);\n\nMONO_API MonoClass*\nmono_get_intptr_class         (void);\n\nMONO_API MonoClass*\nmono_get_uintptr_class        (void);\n\nMONO_API MonoClass*\nmono_get_int64_class       (void);\n\nMONO_API MonoClass*\nmono_get_uint64_class      (void);\n\nMONO_API MonoClass*\nmono_get_single_class      (void);\n\nMONO_API MonoClass*\nmono_get_double_class      (void);\n\nMONO_API MonoClass*\nmono_get_char_class        (void);\n\nMONO_API MonoClass*\nmono_get_string_class      (void);\n\nMONO_API MonoClass*\nmono_get_enum_class        (void);\n\nMONO_API MonoClass*\nmono_get_array_class       (void);\n\nMONO_API MonoClass*\nmono_get_thread_class       (void);\n\nMONO_API MonoClass*\nmono_get_exception_class    (void);\n\nMONO_API void\nmono_security_enable_core_clr (void);\n\ntypedef mono_bool (*MonoCoreClrPlatformCB) (const char *image_name);\n\nMONO_API void\nmono_security_set_core_clr_platform_callback (MonoCoreClrPlatformCB callback);\n\nMONO_END_DECLS\n\n#endif /* _MONO_METADATA_APPDOMAIN_H_ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/assembly-internals.h",
    "content": "/**\n * \\file\n * Copyright 2015 Xamarin Inc\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_ASSEMBLY_INTERNALS_H__\n#define __MONO_METADATA_ASSEMBLY_INTERNALS_H__\n\n#include <glib.h>\n\n#include <mono/metadata/assembly.h>\n#include <mono/metadata/metadata-internals.h>\n\n#ifndef ENABLE_NETCORE\n#define MONO_ASSEMBLY_CORLIB_NAME \"mscorlib\"\n#else\n#define MONO_ASSEMBLY_CORLIB_NAME \"System.Private.CoreLib\"\n#endif\n\n/* Flag bits for mono_assembly_names_equal_flags (). */\ntypedef enum {\n\t/* Default comparison: all fields must match */\n\tMONO_ANAME_EQ_NONE = 0x0,\n\t/* Don't compare public key token */\n\tMONO_ANAME_EQ_IGNORE_PUBKEY = 0x1,\n\t/* Don't compare the versions */\n\tMONO_ANAME_EQ_IGNORE_VERSION = 0x2,\n\t/* When comparing simple names, ignore case differences */\n\tMONO_ANAME_EQ_IGNORE_CASE = 0x4,\n\n\tMONO_ANAME_EQ_MASK = 0x7\n} MonoAssemblyNameEqFlags;\n\nG_ENUM_FUNCTIONS (MonoAssemblyNameEqFlags)\n\nvoid\nmono_assembly_name_free_internal (MonoAssemblyName *aname);\n\ngboolean\nmono_assembly_name_culture_is_neutral (const MonoAssemblyName *aname);\n\ngboolean\nmono_assembly_names_equal_flags (MonoAssemblyName *l, MonoAssemblyName *r, MonoAssemblyNameEqFlags flags);\n\ngboolean\nmono_assembly_get_assemblyref_checked (MonoImage *image, int index, MonoAssemblyName *aname, MonoError *error);\n\nMONO_API MonoImage*    mono_assembly_load_module_checked (MonoAssembly *assembly, uint32_t idx, MonoError *error);\n\nMonoAssembly* mono_assembly_load_with_partial_name_internal (const char *name, MonoAssemblyLoadContext *alc, MonoImageOpenStatus *status);\n\n\ntypedef gboolean (*MonoAssemblyAsmCtxFromPathFunc) (const char *absfname, MonoAssembly *requesting_assembly, gpointer user_data, MonoAssemblyContextKind *out_asmctx);\n\nvoid mono_install_assembly_asmctx_from_path_hook (MonoAssemblyAsmCtxFromPathFunc func, gpointer user_data);\n\ntypedef MonoAssembly * (*MonoAssemblyPreLoadFuncV2) (MonoAssemblyLoadContext *alc, MonoAssemblyName *aname, char **assemblies_path, gboolean refonly, gpointer user_data, MonoError *error);\n\nvoid mono_install_assembly_preload_hook_v2 (MonoAssemblyPreLoadFuncV2 func, gpointer user_data, gboolean refonly);\n\ntypedef MonoAssembly * (*MonoAssemblySearchFuncV2) (MonoAssemblyLoadContext *alc, MonoAssembly *requesting, MonoAssemblyName *aname, gboolean refonly, gboolean postload, gpointer user_data, MonoError *error);\n\nvoid\nmono_install_assembly_search_hook_v2 (MonoAssemblySearchFuncV2 func, gpointer user_data, gboolean refonly, gboolean postload);\n\ntypedef void (*MonoAssemblyLoadFuncV2) (MonoAssemblyLoadContext *alc, MonoAssembly *assembly, gpointer user_data, MonoError *error);\n\nvoid\nmono_install_assembly_load_hook_v2 (MonoAssemblyLoadFuncV2 func, gpointer user_data);\n\nvoid\nmono_assembly_invoke_load_hook_internal (MonoAssemblyLoadContext *alc, MonoAssembly *ass);\n\n/* If predicate returns true assembly should be loaded, if false ignore it. */\ntypedef gboolean (*MonoAssemblyCandidatePredicate)(MonoAssembly *, gpointer);\n\ntypedef struct MonoAssemblyLoadRequest {\n\t/* Assembly Load context that is requesting an assembly. */\n\tMonoAssemblyContextKind asmctx;\n\tMonoAssemblyLoadContext *alc;\n\t/* Predicate to apply to candidate assemblies. Optional. */\n\tMonoAssemblyCandidatePredicate predicate;\n\t/* user_data for predicate. Optional. */\n\tgpointer predicate_ud;\n} MonoAssemblyLoadRequest;\n\ntypedef struct MonoAssemblyOpenRequest {\n\tMonoAssemblyLoadRequest request;\n\t/* Assembly that is requesting the wanted assembly. Optional. */\n\tMonoAssembly *requesting_assembly;\n} MonoAssemblyOpenRequest;\n\ntypedef struct MonoAssemblyByNameRequest {\n\tMonoAssemblyLoadRequest request;\n\t/* Assembly that is requesting the wanted assembly name. Optional.\n\t * If no_postload_search is TRUE, requesting_assembly is not used.\n\t */\n\tMonoAssembly *requesting_assembly;\n\t/* basedir to probe for the wanted assembly name.  Optional. */\n\tconst char *basedir;\n\tgboolean no_postload_search; /* FALSE is usual */\n\t/* FIXME: predicate unused? */\n} MonoAssemblyByNameRequest;\n\nvoid                   mono_assembly_request_prepare_load (MonoAssemblyLoadRequest *req,\n\t\t\t\t\t\t\t   MonoAssemblyContextKind asmctx,\n\t\t\t\t\t\t\t   MonoAssemblyLoadContext *alc);\n\nvoid                   mono_assembly_request_prepare_open (MonoAssemblyOpenRequest *req,\n\t\t\t\t\t\t\t   MonoAssemblyContextKind asmctx,\n\t\t\t\t\t\t\t   MonoAssemblyLoadContext *alc);\n\nvoid                   mono_assembly_request_prepare_byname (MonoAssemblyByNameRequest *req,\n\t\t\t\t\t\t\t     MonoAssemblyContextKind asmctx,\n\t\t\t\t\t\t\t     MonoAssemblyLoadContext *alc);\n\nMonoAssembly*          mono_assembly_request_open (const char *filename,\n\t\t\t\t\t\t     const MonoAssemblyOpenRequest *req,\n\t\t\t\t\t\t     MonoImageOpenStatus *status);\n\nMonoAssembly*          mono_assembly_request_load_from (MonoImage *image, const char *fname,\n\t\t\t\t\t\t\tconst MonoAssemblyLoadRequest *req,\n\t\t\t\t\t\t\tMonoImageOpenStatus *status);\n\nMonoAssembly*          mono_assembly_request_byname (MonoAssemblyName *aname,\n\t\t\t\t\t\t     const MonoAssemblyByNameRequest *req,\n\t\t\t\t\t\t     MonoImageOpenStatus *status);\n\n/* MonoAssemblyCandidatePredicate that compares the assembly name (name, version,\n * culture, public key token) of the candidate with the wanted name, if the\n * wanted name has a public key token (if not present, always return true).\n * Pass the wanted MonoAssemblyName* as the user_data.\n */\ngboolean\nmono_assembly_candidate_predicate_sn_same_name (MonoAssembly *candidate, gpointer wanted_name);\n\ngboolean\nmono_assembly_check_name_match (MonoAssemblyName *wanted_name, MonoAssemblyName *candidate_name);\n\nMonoAssembly*\nmono_assembly_binding_applies_to_image (MonoAssemblyLoadContext *alc, MonoImage* image, MonoImageOpenStatus *status);\n\nMonoAssembly*\nmono_assembly_load_from_assemblies_path (gchar **assemblies_path, MonoAssemblyName *aname, MonoAssemblyContextKind asmctx);\n\nMonoAssembly *\nmono_assembly_loaded_internal (MonoAssemblyLoadContext *alc, MonoAssemblyName *aname, gboolean refonly);\n\nMONO_PROFILER_API MonoAssemblyName*\nmono_assembly_get_name_internal (MonoAssembly *assembly);\n\nMONO_PROFILER_API MonoImage*\nmono_assembly_get_image_internal (MonoAssembly *assembly);\n\n#endif /* __MONO_METADATA_ASSEMBLY_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/assembly.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONONET_METADATA_ASSEMBLY_H_ \n#define _MONONET_METADATA_ASSEMBLY_H_\n\n#include <mono/utils/mono-error.h>\n#include <mono/metadata/image.h>\n\nMONO_BEGIN_DECLS\n\nMONO_API void          mono_assemblies_init     (void);\nMONO_API void          mono_assemblies_cleanup  (void);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly *mono_assembly_open       (const char *filename,\n\t\t\t\t       \tMonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly *mono_assembly_open_full (const char *filename,\n\t\t\t\t       \tMonoImageOpenStatus *status,\n\t\t\t\t\tmono_bool refonly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_load       (MonoAssemblyName *aname, \n                                       \tconst char       *basedir, \n\t\t\t\t     \tMonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_load_full (MonoAssemblyName *aname,\n                                       \tconst char       *basedir, \n\t\t\t\t     \tMonoImageOpenStatus *status,\n\t\t\t\t\tmono_bool refonly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_load_from  (MonoImage *image, const char *fname,\n\t\t\t\t\tMonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_load_from_full  (MonoImage *image, const char *fname,\n\t\t\t\t\tMonoImageOpenStatus *status,\n\t\t\t\t\tmono_bool refonly);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_load_with_partial_name (const char *name, MonoImageOpenStatus *status);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_loaded     (MonoAssemblyName *aname);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_loaded_full (MonoAssemblyName *aname, mono_bool refonly);\nMONO_API void          mono_assembly_get_assemblyref (MonoImage *image, int index, MonoAssemblyName *aname);\nMONO_API void          mono_assembly_load_reference (MonoImage *image, int index);\nMONO_API void          mono_assembly_load_references (MonoImage *image, MonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY MonoImage*    mono_assembly_load_module (MonoAssembly *assembly, uint32_t idx);\nMONO_API void          mono_assembly_close      (MonoAssembly *assembly);\nMONO_API void          mono_assembly_setrootdir (const char *root_dir);\nMONO_API MONO_CONST_RETURN char *mono_assembly_getrootdir (void);\nMONO_API char         *mono_native_getrootdir (void);\nMONO_API void\t       mono_assembly_foreach    (MonoFunc func, void* user_data);\nMONO_API void          mono_assembly_set_main   (MonoAssembly *assembly);\nMONO_API MonoAssembly *mono_assembly_get_main   (void);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage    *mono_assembly_get_image  (MonoAssembly *assembly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssemblyName *mono_assembly_get_name (MonoAssembly *assembly);\nMONO_API mono_bool      mono_assembly_fill_assembly_name (MonoImage *image, MonoAssemblyName *aname);\nMONO_API mono_bool      mono_assembly_names_equal (MonoAssemblyName *l, MonoAssemblyName *r);\nMONO_API char*         mono_stringify_assembly_name (MonoAssemblyName *aname);\n\n/* Installs a function which is called each time a new assembly is loaded. */\ntypedef void  (*MonoAssemblyLoadFunc)         (MonoAssembly *assembly, void* user_data);\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_install_assembly_load_hook (MonoAssemblyLoadFunc func, void* user_data);\n\n/* \n * Installs a new function which is used to search the list of loaded \n * assemblies for a given assembly name.\n */\ntypedef MonoAssembly *(*MonoAssemblySearchFunc)         (MonoAssemblyName *aname, void* user_data);\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid          mono_install_assembly_search_hook (MonoAssemblySearchFunc func, void* user_data);\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid \t      mono_install_assembly_refonly_search_hook (MonoAssemblySearchFunc func, void* user_data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoAssembly* mono_assembly_invoke_search_hook (MonoAssemblyName *aname);\n\n/*\n * Installs a new search function which is used as a last resort when loading \n * an assembly fails. This could invoke AssemblyResolve events.\n */\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid\nmono_install_assembly_postload_search_hook (MonoAssemblySearchFunc func, void* user_data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid\nmono_install_assembly_postload_refonly_search_hook (MonoAssemblySearchFunc func, void* user_data);\n\n\n/* Installs a function which is called before a new assembly is loaded\n * The hook are invoked from last hooked to first. If any of them returns\n * a non-null value, that will be the value returned in mono_assembly_load */\ntypedef MonoAssembly * (*MonoAssemblyPreLoadFunc) (MonoAssemblyName *aname,\n\t\t\t\t\t\t   char **assemblies_path,\n\t\t\t\t\t\t   void* user_data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid          mono_install_assembly_preload_hook (MonoAssemblyPreLoadFunc func, void* user_data);\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid          mono_install_assembly_refonly_preload_hook (MonoAssemblyPreLoadFunc func, void* user_data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_assembly_invoke_load_hook (MonoAssembly *ass);\n\nMONO_API MonoAssemblyName* mono_assembly_name_new             (const char *name);\nMONO_API const char*       mono_assembly_name_get_name        (MonoAssemblyName *aname);\nMONO_API const char*       mono_assembly_name_get_culture     (MonoAssemblyName *aname);\nMONO_API uint16_t          mono_assembly_name_get_version     (MonoAssemblyName *aname,\n\t\t\t\t\t\t      uint16_t *minor, uint16_t *build, uint16_t *revision);\nMONO_API mono_byte*        mono_assembly_name_get_pubkeytoken (MonoAssemblyName *aname);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_assembly_name_free   (MonoAssemblyName *aname);\n\ntypedef struct {\n\tconst char *name;\n\tconst unsigned char *data;\n\tunsigned int size;\n} MonoBundledAssembly;\n\nMONO_API void          mono_register_bundled_assemblies (const MonoBundledAssembly **assemblies);\nMONO_API void          mono_register_config_for_assembly (const char* assembly_name, const char* config_xml);\nMONO_API void          mono_register_symfile_for_assembly (const char* assembly_name, const mono_byte *raw_contents, int size);\nMONO_API void\t      mono_register_machine_config (const char *config_xml);\n\nMONO_API void          mono_set_rootdir (void);\nMONO_API void          mono_set_dirs (const char *assembly_dir, const char *config_dir);\nMONO_API void          mono_set_assemblies_path (const char* path);\nMONO_END_DECLS\n\n#endif\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/attach.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_ATTACH_H__\n#define __MONO_ATTACH_H__\n\n#include <glib.h>\n#include <mono/utils/mono-compiler.h>\n\nvoid\nmono_attach_parse_options (char *options);\n\nvoid\nmono_attach_init (void);\n\ngboolean\nmono_attach_start (void);\n\nvoid\nmono_attach_maybe_start (void);\n\nvoid\nmono_attach_cleanup (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/attrdefs.h",
    "content": "/**\n * \\file\n * This file contains the various definitions for constants\n * found on the metadata tables\n *\n * Author:\n *   Miguel de Icaza (miguel@ximian.com)\n *   Paolo Molaro (lupus@ximian.com)\n *\n * (C) 2001 Ximian, Inc.\n * (C) 2006 Novell, Inc.\n *\n * From the ECMA documentation\n */\n \n#ifndef _MONO_METADATA_ATTRDEFS_H_\n#define\t_MONO_METADATA_ATTRDEFS_H_\n\n/*\n * 23.1.1  Values for AssemblyHashAlgorithm \n */\nenum {\n\tMONO_ASSEMBLY_HASH_NONE,\n\tMONO_ASSEMBLY_HASH_MD5  = 0x8003,\n\tMONO_ASSEMBLY_HASH_SHA1 = 0x8004\n};\n\n/*\n * 23.1.2 AssemblyRefs\n */\nenum {\n\tMONO_ASSEMBLYREF_FULL_PUBLIC_KEY = 0x0001,\n\tMONO_ASSEMBLYREF_RETARGETABLE    = 0x0100,\n\tMONO_ASSEMBLYREF_JIT_TRACKING    = 0x8000,\n\tMONO_ASSEMBLYREF_NO_JIT_OPT      = 0x4000\n};\n\n/*\n * 23.1.4 Flags for Event.EventAttributes\n */\nenum {\n\tMONO_EVENT_SPECIALNAME   = 0x0200,\n\tMONO_EVENT_RTSPECIALNAME = 0x0400\n};\n\n/*\n * Field Attributes (23.1.5).\n */\nenum {\n\tMONO_FIELD_ATTR_FIELD_ACCESS_MASK     = 0x0007,\n\tMONO_FIELD_ATTR_COMPILER_CONTROLLED   = 0x0000,\n\tMONO_FIELD_ATTR_PRIVATE               = 0x0001,\n\tMONO_FIELD_ATTR_FAM_AND_ASSEM         = 0x0002,\n\tMONO_FIELD_ATTR_ASSEMBLY              = 0x0003,\n\tMONO_FIELD_ATTR_FAMILY                = 0x0004,\n\tMONO_FIELD_ATTR_FAM_OR_ASSEM          = 0x0005,\n\tMONO_FIELD_ATTR_PUBLIC                = 0x0006,\n\n\tMONO_FIELD_ATTR_STATIC                = 0x0010,\n\tMONO_FIELD_ATTR_INIT_ONLY             = 0x0020,\n\tMONO_FIELD_ATTR_LITERAL               = 0x0040,\n\tMONO_FIELD_ATTR_NOT_SERIALIZED        = 0x0080,\n\tMONO_FIELD_ATTR_SPECIAL_NAME          = 0x0200,\n\tMONO_FIELD_ATTR_PINVOKE_IMPL          = 0x2000,\n\n/* For runtime use only */\n\tMONO_FIELD_ATTR_RESERVED_MASK         = 0x9500,\n\tMONO_FIELD_ATTR_RT_SPECIAL_NAME       = 0x0400,\n\tMONO_FIELD_ATTR_HAS_MARSHAL           = 0x1000,\n\tMONO_FIELD_ATTR_HAS_DEFAULT           = 0x8000,\n\tMONO_FIELD_ATTR_HAS_RVA               = 0x0100\n};\n\n/*\n * 23.1.6 Flags for FileAttributes\n */\nenum {\n\tMONO_FILE_HAS_METADATA      = 0,\n\tMONO_FILE_HAS_NO_METADATA   = 1\n};\n\n/*\n * 23.1.7 Flags for generic parameters\n */\nenum {\n\tMONO_GEN_PARAM_VARIANCE_MASK    = 0x0003,\n\tMONO_GEN_PARAM_NON_VARIANT      = 0x0000,\n\tMONO_GEN_PARAM_VARIANT          = 0x0001,\n\tMONO_GEN_PARAM_COVARIANT        = 0x0002,\n\tMONO_GEN_PARAM_CONSTRAINT_MASK  = 0x001c,\n\tMONO_GEN_PARAM_CONSTRAINT_CLASS = 0x0004,\n\tMONO_GEN_PARAM_CONSTRAINT_VTYPE = 0x0008,\n\tMONO_GEN_PARAM_CONSTRAINT_DCTOR = 0x0010\n};\n\n/*\n * 23.1.8 Flags for ImplMap [PInvokeAttributes]\n */\nenum {\n\tMONO_PINVOKE_NO_MANGLE           = 0x0001,\n\tMONO_PINVOKE_CHAR_SET_MASK       = 0x0006,\n\tMONO_PINVOKE_CHAR_SET_NOT_SPEC   = 0x0000,\n\tMONO_PINVOKE_CHAR_SET_ANSI       = 0x0002,\n\tMONO_PINVOKE_CHAR_SET_UNICODE    = 0x0004,\n\tMONO_PINVOKE_CHAR_SET_AUTO       = 0x0006,\n\tMONO_PINVOKE_BEST_FIT_ENABLED    = 0x0010,\n\tMONO_PINVOKE_BEST_FIT_DISABLED   = 0x0020,\n\tMONO_PINVOKE_BEST_FIT_MASK       = 0x0030,\n\tMONO_PINVOKE_SUPPORTS_LAST_ERROR = 0x0040,\n\tMONO_PINVOKE_CALL_CONV_MASK      = 0x0700,\n\tMONO_PINVOKE_CALL_CONV_WINAPI    = 0x0100,\n\tMONO_PINVOKE_CALL_CONV_CDECL     = 0x0200,\n\tMONO_PINVOKE_CALL_CONV_STDCALL   = 0x0300,\n\tMONO_PINVOKE_CALL_CONV_THISCALL  = 0x0400,\n\tMONO_PINVOKE_CALL_CONV_FASTCALL  = 0x0500,\n\tMONO_PINVOKE_THROW_ON_UNMAPPABLE_ENABLED    = 0x1000,\n\tMONO_PINVOKE_THROW_ON_UNMAPPABLE_DISABLED   = 0x2000,\n\tMONO_PINVOKE_THROW_ON_UNMAPPABLE_MASK       = 0x3000,\n\tMONO_PINVOKE_CALL_CONV_GENERIC     = 0x0010,\n\tMONO_PINVOKE_CALL_CONV_GENERICINST = 0x000a\n};\n\n/*\n * 23.1.9 Flags for ManifestResource\n */\nenum {\n\tMONO_MANIFEST_RESOURCE_VISIBILITY_MASK    = 0x00000007,\n\tMONO_MANIFEST_RESOURCE_PUBLIC             = 0x00000001,\n\tMONO_MANIFEST_RESOURCE_PRIVATE            = 0x00000002\n};\n\n/*\n * Method Attributes (23.1.10)\n */\nenum {\n\tMONO_METHOD_ATTR_ACCESS_MASK               = 0x0007,\n\tMONO_METHOD_ATTR_COMPILER_CONTROLLED       = 0x0000,\n\tMONO_METHOD_ATTR_PRIVATE                   = 0x0001,\n\tMONO_METHOD_ATTR_FAM_AND_ASSEM             = 0x0002,\n\tMONO_METHOD_ATTR_ASSEM                     = 0x0003,\n\tMONO_METHOD_ATTR_FAMILY                    = 0x0004,\n\tMONO_METHOD_ATTR_FAM_OR_ASSEM              = 0x0005,\n\tMONO_METHOD_ATTR_PUBLIC                    = 0x0006,\n\n\tMONO_METHOD_ATTR_STATIC                    = 0x0010,\n\tMONO_METHOD_ATTR_FINAL                     = 0x0020,\n\tMONO_METHOD_ATTR_VIRTUAL                   = 0x0040,\n\tMONO_METHOD_ATTR_HIDE_BY_SIG               = 0x0080,\n\n\tMONO_METHOD_ATTR_VTABLE_LAYOUT_MASK        = 0x0100,\n\tMONO_METHOD_ATTR_REUSE_SLOT                = 0x0000,\n\tMONO_METHOD_ATTR_NEW_SLOT                  = 0x0100,\n\tMONO_METHOD_ATTR_STRICT                    = 0x0200,\n\tMONO_METHOD_ATTR_ABSTRACT                  = 0x0400,\n\n\tMONO_METHOD_ATTR_SPECIAL_NAME              = 0x0800,\n\n\tMONO_METHOD_ATTR_PINVOKE_IMPL              = 0x2000,\n\tMONO_METHOD_ATTR_UNMANAGED_EXPORT          = 0x0008,\n\n/*\n * For runtime use only\n */\n\tMONO_METHOD_ATTR_RESERVED_MASK             = 0xd000,\n\tMONO_METHOD_ATTR_RT_SPECIAL_NAME           = 0x1000,\n\tMONO_METHOD_ATTR_HAS_SECURITY              = 0x4000,\n\tMONO_METHOD_ATTR_REQUIRE_SEC_OBJECT        = 0x8000\n};\n\n/*\n * Method Impl Attributes (23.1.11)\n */\nenum {\n\tMONO_METHOD_IMPL_ATTR_CODE_TYPE_MASK       = 0x0003,\n\tMONO_METHOD_IMPL_ATTR_IL                   = 0x0000,\n\tMONO_METHOD_IMPL_ATTR_NATIVE               = 0x0001,\n\tMONO_METHOD_IMPL_ATTR_OPTIL                = 0x0002,\n\tMONO_METHOD_IMPL_ATTR_RUNTIME              = 0x0003,\n\n\tMONO_METHOD_IMPL_ATTR_MANAGED_MASK         = 0x0004,\n\tMONO_METHOD_IMPL_ATTR_UNMANAGED            = 0x0004,\n\tMONO_METHOD_IMPL_ATTR_MANAGED              = 0x0000,\n\n\tMONO_METHOD_IMPL_ATTR_FORWARD_REF          = 0x0010,\n\tMONO_METHOD_IMPL_ATTR_PRESERVE_SIG         = 0x0080,\n\tMONO_METHOD_IMPL_ATTR_INTERNAL_CALL        = 0x1000,\n\tMONO_METHOD_IMPL_ATTR_SYNCHRONIZED         = 0x0020,\n\tMONO_METHOD_IMPL_ATTR_NOINLINING           = 0x0008,\n\tMONO_METHOD_IMPL_ATTR_NOOPTIMIZATION       = 0x0040,\t\n\tMONO_METHOD_IMPL_ATTR_MAX_METHOD_IMPL_VAL  = 0xffff\n};\n\n/*\n * Method Semantics ([MethodSemanticAttributes]) 23.1.12,\n */\nenum {\n\tMONO_METHOD_SEMANTIC_SETTER    = 0x0001,\n\tMONO_METHOD_SEMANTIC_GETTER    = 0x0002,\n\tMONO_METHOD_SEMANTIC_OTHER     = 0x0004,\n\tMONO_METHOD_SEMANTIC_ADD_ON    = 0x0008,\n\tMONO_METHOD_SEMANTIC_REMOVE_ON = 0x0010,\n\tMONO_METHOD_SEMANTIC_FIRE      = 0x0020\n};\n\n/*\n * Flags for Params (23.1.13)\n */\nenum {\n\tMONO_PARAM_ATTR_IN                 = 0x0001,\n\tMONO_PARAM_ATTR_OUT                = 0x0002,\n\tMONO_PARAM_ATTR_OPTIONAL           = 0x0010,\n\tMONO_PARAM_ATTR_RESERVED_MASK      = 0xf000,\n\tMONO_PARAM_ATTR_HAS_DEFAULT        = 0x1000,\n\tMONO_PARAM_ATTR_HAS_MARSHAL        = 0x2000,\n\tMONO_PARAM_ATTR_UNUSED             = 0xcfe0\n};\n\n/*\n * 23.1.14 PropertyAttributes\n */\nenum {\n\tMONO_PROPERTY_ATTR_SPECIAL_NAME    = 0x0200,\n\tMONO_PROPERTY_ATTR_RESERVED_MASK   = 0xf400,\n\tMONO_PROPERTY_ATTR_RT_SPECIAL_NAME = 0x0400,\n\tMONO_PROPERTY_ATTR_HAS_DEFAULT     = 0x1000,\n\tMONO_PROPERTY_ATTR_UNUSED          = 0xe9ff\n};\n\n/*\n * Type Attributes (23.1.15).\n */\nenum {\n\tMONO_TYPE_ATTR_VISIBILITY_MASK       = 0x00000007,\n\tMONO_TYPE_ATTR_NOT_PUBLIC            = 0x00000000,\n\tMONO_TYPE_ATTR_PUBLIC                = 0x00000001,\n\tMONO_TYPE_ATTR_NESTED_PUBLIC         = 0x00000002,\n\tMONO_TYPE_ATTR_NESTED_PRIVATE        = 0x00000003,\n\tMONO_TYPE_ATTR_NESTED_FAMILY         = 0x00000004,\n\tMONO_TYPE_ATTR_NESTED_ASSEMBLY       = 0x00000005,\n\tMONO_TYPE_ATTR_NESTED_FAM_AND_ASSEM  = 0x00000006,\n\tMONO_TYPE_ATTR_NESTED_FAM_OR_ASSEM   = 0x00000007,\n\n\tMONO_TYPE_ATTR_LAYOUT_MASK           = 0x00000018,\n\tMONO_TYPE_ATTR_AUTO_LAYOUT           = 0x00000000,\n\tMONO_TYPE_ATTR_SEQUENTIAL_LAYOUT     = 0x00000008,\n\tMONO_TYPE_ATTR_EXPLICIT_LAYOUT       = 0x00000010,\n\n\tMONO_TYPE_ATTR_CLASS_SEMANTIC_MASK   = 0x00000020,\n\tMONO_TYPE_ATTR_CLASS                 = 0x00000000,\n\tMONO_TYPE_ATTR_INTERFACE             = 0x00000020,\n\n\tMONO_TYPE_ATTR_ABSTRACT              = 0x00000080,\n\tMONO_TYPE_ATTR_SEALED                = 0x00000100,\n\tMONO_TYPE_ATTR_SPECIAL_NAME          = 0x00000400,\n\n\tMONO_TYPE_ATTR_IMPORT                = 0x00001000,\n\tMONO_TYPE_ATTR_SERIALIZABLE          = 0x00002000,\n\n\tMONO_TYPE_ATTR_STRING_FORMAT_MASK    = 0x00030000,\n\tMONO_TYPE_ATTR_ANSI_CLASS            = 0x00000000,\n\tMONO_TYPE_ATTR_UNICODE_CLASS         = 0x00010000,\n\tMONO_TYPE_ATTR_AUTO_CLASS            = 0x00020000,\n\tMONO_TYPE_ATTR_CUSTOM_CLASS          = 0x00030000,\n\tMONO_TYPE_ATTR_CUSTOM_MASK           = 0x00c00000,\n\n\tMONO_TYPE_ATTR_BEFORE_FIELD_INIT     = 0x00100000,\n\tMONO_TYPE_ATTR_FORWARDER             = 0x00200000,\n\n\tMONO_TYPE_ATTR_RESERVED_MASK         = 0x00040800,\n\tMONO_TYPE_ATTR_RT_SPECIAL_NAME       = 0x00000800,\n\tMONO_TYPE_ATTR_HAS_SECURITY          = 0x00040000\n};\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/blob.h",
    "content": "/**\n * \\file\n * Definitions used to pull information out of the Blob\n *\n */\n#ifndef _MONO_METADATA_BLOB_H_\n#define _MONO_METADATA_BLOB_H_\n\n/*\n * Encoding for type signatures used in the Metadata\n */\ntypedef enum {\n\tMONO_TYPE_END        = 0x00,       /* End of List */\n\tMONO_TYPE_VOID       = 0x01,\n\tMONO_TYPE_BOOLEAN    = 0x02,\n\tMONO_TYPE_CHAR       = 0x03,\n\tMONO_TYPE_I1         = 0x04,\n\tMONO_TYPE_U1         = 0x05,\n\tMONO_TYPE_I2         = 0x06,\n\tMONO_TYPE_U2         = 0x07,\n\tMONO_TYPE_I4         = 0x08,\n\tMONO_TYPE_U4         = 0x09,\n\tMONO_TYPE_I8         = 0x0a,\n\tMONO_TYPE_U8         = 0x0b,\n\tMONO_TYPE_R4         = 0x0c,\n\tMONO_TYPE_R8         = 0x0d,\n\tMONO_TYPE_STRING     = 0x0e,\n\tMONO_TYPE_PTR        = 0x0f,       /* arg: <type> token */\n\tMONO_TYPE_BYREF      = 0x10,       /* arg: <type> token */\n\tMONO_TYPE_VALUETYPE  = 0x11,       /* arg: <type> token */\n\tMONO_TYPE_CLASS      = 0x12,       /* arg: <type> token */\n\tMONO_TYPE_VAR\t     = 0x13,\t   /* number */\n\tMONO_TYPE_ARRAY      = 0x14,       /* type, rank, boundsCount, bound1, loCount, lo1 */\n\tMONO_TYPE_GENERICINST= 0x15,\t   /* <type> <type-arg-count> <type-1> \\x{2026} <type-n> */\n\tMONO_TYPE_TYPEDBYREF = 0x16,\n\tMONO_TYPE_I          = 0x18,\n\tMONO_TYPE_U          = 0x19,\n\tMONO_TYPE_FNPTR      = 0x1b,\t      /* arg: full method signature */\n\tMONO_TYPE_OBJECT     = 0x1c,\n\tMONO_TYPE_SZARRAY    = 0x1d,       /* 0-based one-dim-array */\n\tMONO_TYPE_MVAR\t     = 0x1e,       /* number */\n\tMONO_TYPE_CMOD_REQD  = 0x1f,       /* arg: typedef or typeref token */\n\tMONO_TYPE_CMOD_OPT   = 0x20,       /* optional arg: typedef or typref token */\n\tMONO_TYPE_INTERNAL   = 0x21,       /* CLR internal type */\n\n\tMONO_TYPE_MODIFIER   = 0x40,       /* Or with the following types */\n\tMONO_TYPE_SENTINEL   = 0x41,       /* Sentinel for varargs method signature */\n\tMONO_TYPE_PINNED     = 0x45,       /* Local var that points to pinned object */\n\n\tMONO_TYPE_ENUM       = 0x55        /* an enumeration */\n} MonoTypeEnum;\n\ntypedef enum {\n\tMONO_TABLE_MODULE,\n\tMONO_TABLE_TYPEREF,\n\tMONO_TABLE_TYPEDEF,\n\tMONO_TABLE_FIELD_POINTER,\n\tMONO_TABLE_FIELD,\n\tMONO_TABLE_METHOD_POINTER,\n\tMONO_TABLE_METHOD,\n\tMONO_TABLE_PARAM_POINTER,\n\tMONO_TABLE_PARAM,\n\tMONO_TABLE_INTERFACEIMPL,\n\tMONO_TABLE_MEMBERREF, /* 0xa */\n\tMONO_TABLE_CONSTANT,\n\tMONO_TABLE_CUSTOMATTRIBUTE,\n\tMONO_TABLE_FIELDMARSHAL,\n\tMONO_TABLE_DECLSECURITY,\n\tMONO_TABLE_CLASSLAYOUT,\n\tMONO_TABLE_FIELDLAYOUT, /* 0x10 */\n\tMONO_TABLE_STANDALONESIG,\n\tMONO_TABLE_EVENTMAP,\n\tMONO_TABLE_EVENT_POINTER,\n\tMONO_TABLE_EVENT,\n\tMONO_TABLE_PROPERTYMAP,\n\tMONO_TABLE_PROPERTY_POINTER,\n\tMONO_TABLE_PROPERTY,\n\tMONO_TABLE_METHODSEMANTICS,\n\tMONO_TABLE_METHODIMPL,\n\tMONO_TABLE_MODULEREF, /* 0x1a */\n\tMONO_TABLE_TYPESPEC,\n\tMONO_TABLE_IMPLMAP,\n\tMONO_TABLE_FIELDRVA,\n\tMONO_TABLE_UNUSED6,\n\tMONO_TABLE_UNUSED7,\n\tMONO_TABLE_ASSEMBLY, /* 0x20 */\n\tMONO_TABLE_ASSEMBLYPROCESSOR,\n\tMONO_TABLE_ASSEMBLYOS,\n\tMONO_TABLE_ASSEMBLYREF,\n\tMONO_TABLE_ASSEMBLYREFPROCESSOR,\n\tMONO_TABLE_ASSEMBLYREFOS,\n\tMONO_TABLE_FILE,\n\tMONO_TABLE_EXPORTEDTYPE,\n\tMONO_TABLE_MANIFESTRESOURCE,\n\tMONO_TABLE_NESTEDCLASS,\n\tMONO_TABLE_GENERICPARAM, /* 0x2a */\n\tMONO_TABLE_METHODSPEC,\n\tMONO_TABLE_GENERICPARAMCONSTRAINT,\n\tMONO_TABLE_UNUSED8,\n\tMONO_TABLE_UNUSED9,\n\tMONO_TABLE_UNUSED10,\n\t/* Portable PDB tables */\n\tMONO_TABLE_DOCUMENT, /* 0x30 */\n\tMONO_TABLE_METHODBODY,\n\tMONO_TABLE_LOCALSCOPE,\n\tMONO_TABLE_LOCALVARIABLE,\n\tMONO_TABLE_LOCALCONSTANT,\n\tMONO_TABLE_IMPORTSCOPE,\n\tMONO_TABLE_STATEMACHINEMETHOD,\n\tMONO_TABLE_CUSTOMDEBUGINFORMATION\n\n#define MONO_TABLE_LAST MONO_TABLE_CUSTOMDEBUGINFORMATION\n#define MONO_TABLE_NUM (MONO_TABLE_LAST + 1)\n\n} MonoMetaTableEnum;\n\n#endif\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/callspec.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_CALLSPEC_H__\n#define __MONO_CALLSPEC_H__\n#include <glib.h>\n#include <mono/utils/mono-compiler.h>\n\ntypedef enum {\n\tMONO_TRACEOP_ALL,\n\tMONO_TRACEOP_PROGRAM,\n\tMONO_TRACEOP_METHOD,\n\tMONO_TRACEOP_ASSEMBLY,\n\tMONO_TRACEOP_CLASS,\n\tMONO_TRACEOP_NAMESPACE,\n\tMONO_TRACEOP_EXCEPTION,\n\tMONO_TRACEOP_WRAPPER,\n} MonoTraceOpcode;\n\ntypedef struct {\n\tMonoTraceOpcode op;\n\tint exclude;\n\tvoid *data, *data2;\n} MonoTraceOperation;\n\ntypedef struct {\n\tint len;\n\tgboolean enabled;\n\tMonoTraceOperation *ops;\n} MonoCallSpec;\n\nMONO_PROFILER_API gboolean mono_callspec_parse\t\t(const char *options,\n\t\t\t\t\t\t\t MonoCallSpec *spec,\n\t\t\t\t\t\t\t char **errstr);\nMONO_PROFILER_API void     mono_callspec_cleanup\t(MonoCallSpec *spec);\nMONO_PROFILER_API gboolean mono_callspec_eval_exception\t(MonoClass *klass,\n\t\t\t\t\t\t\t MonoCallSpec *spec);\nMONO_PROFILER_API gboolean mono_callspec_eval\t\t(MonoMethod *method,\n\t\t\t\t\t\t\t const MonoCallSpec *spec);\nvoid\t\t\t   mono_callspec_set_assembly\t(MonoAssembly *assembly);\n\n#endif /* __MONO_CALLSPEC_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/cil-coff.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_CIL_COFF_H__\n#define __MONO_CIL_COFF_H__\n\n#include <mono/metadata/metadata.h>\n#include <glib.h>\n\n/*\n * 25.2.1: Method header type values\n */\n#define METHOD_HEADER_FORMAT_MASK   3\n#define METHOD_HEADER_TINY_FORMAT   2\n#define METHOD_HEADER_FAT_FORMAT    3\n\n/*\n * 25.2.3.1: Flags for method headers\n */\n#define METHOD_HEADER_INIT_LOCALS   0x10\n#define METHOD_HEADER_MORE_SECTS    0x08\n\n/*\n * For section data (25.3)\n */\n#define METHOD_HEADER_SECTION_RESERVED    0\n#define METHOD_HEADER_SECTION_EHTABLE     1\n#define METHOD_HEADER_SECTION_OPTIL_TABLE 2\n#define METHOD_HEADER_SECTION_FAT_FORMAT  0x40\n#define METHOD_HEADER_SECTION_MORE_SECTS  0x80\n\n/* 128 bytes */\ntypedef struct {\n\tchar    msdos_sig [2];\n\tguint16 nlast_page;\n\tguint16 npages;\n\tchar    msdos_header [54];\n\tguint32 pe_offset;\n\tchar    msdos_header2 [64];\n} MonoMSDOSHeader;\n\n/* Possible values for coff_machine */\n#define COFF_MACHINE_I386 332\n#define COFF_MACHINE_IA64 512\n#define COFF_MACHINE_AMD64 34404\n#define COFF_MACHINE_ARM 452\n\n/* 20 bytes */\ntypedef struct {\n\tguint16  coff_machine;\n\tguint16  coff_sections;\n\tguint32  coff_time;\n\tguint32  coff_symptr;\n\tguint32  coff_symcount;\n\tguint16  coff_opt_header_size;\n\tguint16  coff_attributes;\n} MonoCOFFHeader;\n\n#define COFF_ATTRIBUTE_EXECUTABLE_IMAGE 0x0002\n#define COFF_ATTRIBUTE_LIBRARY_IMAGE    0x2000\n\n/* 28 bytes */\ntypedef struct {\n\tguint16 pe_magic;\n\tguchar  pe_major;\n\tguchar  pe_minor;\n\tguint32 pe_code_size;\n\tguint32 pe_data_size;\n\tguint32 pe_uninit_data_size;\n\tguint32 pe_rva_entry_point;\n\tguint32 pe_rva_code_base;\n\tguint32 pe_rva_data_base;\n} MonoPEHeader;\n\n/* 24 bytes */\ntypedef struct {\n\tguint16 pe_magic;\n\tguchar  pe_major;\n\tguchar  pe_minor;\n\tguint32 pe_code_size;\n\tguint32 pe_data_size;\n\tguint32 pe_uninit_data_size;\n\tguint32 pe_rva_entry_point;\n\tguint32 pe_rva_code_base;\n} MonoPEHeader64;\n\n/* 68 bytes */\ntypedef struct {\n\tguint32 pe_image_base;\t\t/* must be 0x400000 */\n\tguint32 pe_section_align;       /* must be 8192 */\n\tguint32 pe_file_alignment;      /* must be 512 or 4096 */\n\tguint16 pe_os_major;            /* must be 4 */\n\tguint16 pe_os_minor;            /* must be 0 */\n\tguint16 pe_user_major;\n\tguint16 pe_user_minor;\n\tguint16 pe_subsys_major;\n\tguint16 pe_subsys_minor;\n\tguint32 pe_reserved_1;\n\tguint32 pe_image_size;\n\tguint32 pe_header_size;\n\tguint32 pe_checksum;\n\tguint16 pe_subsys_required;\n\tguint16 pe_dll_flags;\n\tguint32 pe_stack_reserve;\n\tguint32 pe_stack_commit;\n\tguint32 pe_heap_reserve;\n\tguint32 pe_heap_commit;\n\tguint32 pe_loader_flags;\n\tguint32 pe_data_dir_count;\n} MonoPEHeaderNT;\n\n/* 88 bytes */\ntypedef struct {\n\tguint64 pe_image_base;\n\tguint32 pe_section_align;       /* must be 8192 */\n\tguint32 pe_file_alignment;      /* must be 512 or 4096 */\n\tguint16 pe_os_major;            /* must be 4 */\n\tguint16 pe_os_minor;            /* must be 0 */\n\tguint16 pe_user_major;\n\tguint16 pe_user_minor;\n\tguint16 pe_subsys_major;\n\tguint16 pe_subsys_minor;\n\tguint32 pe_reserved_1;\n\tguint32 pe_image_size;\n\tguint32 pe_header_size;\n\tguint32 pe_checksum;\n\tguint16 pe_subsys_required;\n\tguint16 pe_dll_flags;\n\tguint64 pe_stack_reserve;\n\tguint64 pe_stack_commit;\n\tguint64 pe_heap_reserve;\n\tguint64 pe_heap_commit;\n\tguint32 pe_loader_flags;\n\tguint32 pe_data_dir_count;\n} MonoPEHeaderNT64;\n\ntypedef struct {\n\tguint32 rde_data_offset;\n\tguint32 rde_size;\n\tguint32 rde_codepage;\n\tguint32 rde_reserved;\n} MonoPEResourceDataEntry;\n\n#define MONO_PE_RESOURCE_ID_CURSOR\t0x01\n#define MONO_PE_RESOURCE_ID_BITMAP\t0x02\n#define MONO_PE_RESOURCE_ID_ICON\t0x03\n#define MONO_PE_RESOURCE_ID_MENU\t0x04\n#define MONO_PE_RESOURCE_ID_DIALOG\t0x05\n#define MONO_PE_RESOURCE_ID_STRING\t0x06\n#define MONO_PE_RESOURCE_ID_FONTDIR\t0x07\n#define MONO_PE_RESOURCE_ID_FONT\t0x08\n#define MONO_PE_RESOURCE_ID_ACCEL\t0x09\n#define MONO_PE_RESOURCE_ID_RCDATA\t0x0a\n#define MONO_PE_RESOURCE_ID_MESSAGETABLE\t0x0b\n#define MONO_PE_RESOURCE_ID_GROUP_CURSOR\t0x0c\n#define MONO_PE_RESOURCE_ID_GROUP_ICON\t0x0d\n#define MONO_PE_RESOURCE_ID_VERSION\t0x10\n#define MONO_PE_RESOURCE_ID_DLGINCLUDE\t0x11\n#define MONO_PE_RESOURCE_ID_PLUGPLAY\t0x13\n#define MONO_PE_RESOURCE_ID_VXD\t\t0x14\n#define MONO_PE_RESOURCE_ID_ANICURSOR\t0x15\n#define MONO_PE_RESOURCE_ID_ANIICON\t0x16\n#define MONO_PE_RESOURCE_ID_HTML\t0x17\n#define MONO_PE_RESOURCE_ID_ASPNET_STRING\t0x65\n\ntypedef struct {\n\t/* If the MSB is set, then the other 31 bits store the RVA of\n\t * the unicode string containing the name.  Otherwise, the\n\t * other 31 bits contain the ID of this entry.\n\t */\n\tguint32 name;\n\n\t/* If the MSB is set, then the other 31 bits store the RVA of\n\t * another subdirectory.  Otherwise, the other 31 bits store\n\t * the RVA of the resource data entry leaf node.\n\t */\n\tguint32 dir;\n} MonoPEResourceDirEntry;\n\n#define MONO_PE_RES_DIR_ENTRY_NAME_IS_STRING(d)\t(GUINT32_FROM_LE((d).name) >> 31)\n#define MONO_PE_RES_DIR_ENTRY_NAME_OFFSET(d)\t(GUINT32_FROM_LE((d).name) & 0x7fffffff)\n#define MONO_PE_RES_DIR_ENTRY_SET_NAME(d,i,o)\t((d).name = GUINT32_TO_LE(((guint32)((i)?1:0) << 31) | ((o) & 0x7fffffff)))\n\n#define MONO_PE_RES_DIR_ENTRY_IS_DIR(d)\t\t(GUINT32_FROM_LE((d).dir) >> 31)\n#define MONO_PE_RES_DIR_ENTRY_DIR_OFFSET(d)\t(GUINT32_FROM_LE((d).dir) & 0x7fffffff)\n#define MONO_PE_RES_DIR_ENTRY_SET_DIR(d,i,o)\t((d).dir = GUINT32_TO_LE(((guint32)((i)?1:0) << 31) | ((o) & 0x7fffffff)))\n\ntypedef struct \n{\n\tguint32 res_characteristics;\n\tguint32 res_date_stamp;\n\tguint16 res_major;\n\tguint16 res_minor;\n\tguint16 res_named_entries;\n\tguint16 res_id_entries;\n\t/* Directory entries follow on here.  The array is\n\t * res_named_entries + res_id_entries long, containing all\n\t * named entries first.\n\t */\n} MonoPEResourceDir;\n\ntypedef struct {\n\tguint32 rva;\n\tguint32 size;\n} MonoPEDirEntry;\n\n/* 128 bytes */\ntypedef struct {\n\tMonoPEDirEntry pe_export_table;\n\tMonoPEDirEntry pe_import_table;\n\tMonoPEDirEntry pe_resource_table;\n\tMonoPEDirEntry pe_exception_table;\n\tMonoPEDirEntry pe_certificate_table;\n\tMonoPEDirEntry pe_reloc_table;\n\tMonoPEDirEntry pe_debug;\n\tMonoPEDirEntry pe_copyright;\n\tMonoPEDirEntry pe_global_ptr;\n\tMonoPEDirEntry pe_tls_table;\n\tMonoPEDirEntry pe_load_config_table;\n\tMonoPEDirEntry pe_bound_import;\n\tMonoPEDirEntry pe_iat;\n\tMonoPEDirEntry pe_delay_import_desc;\n\tMonoPEDirEntry pe_cli_header;\n\tMonoPEDirEntry pe_reserved;\n} MonoPEDatadir;\n\n/* 248 bytes */\ntypedef struct {\n\tchar            pesig [4];\n\tMonoCOFFHeader  coff;\n\tMonoPEHeader    pe;\n\tMonoPEHeaderNT  nt;\n\tMonoPEDatadir   datadir;\n} MonoDotNetHeader32;\n\n/* 248 bytes */\ntypedef struct {\n\tchar            pesig [4];\n\tMonoCOFFHeader  coff;\n\tMonoPEHeader    pe;\n\tMonoPEHeaderNT  nt;\n\tMonoPEDatadir   datadir;\n} MonoDotNetHeader;\n\n/* XX248 bytes */\ntypedef struct {\n\tchar              pesig [4];\n\tMonoCOFFHeader    coff;\n\tMonoPEHeader64    pe;\n\tMonoPEHeaderNT64  nt;\n\tMonoPEDatadir     datadir;\n} MonoDotNetHeader64;\n\n#define VTFIXUP_TYPE_32BIT                            0x01\n#define VTFIXUP_TYPE_64BIT                            0x02\n#define VTFIXUP_TYPE_FROM_UNMANAGED                   0x04\n#define VTFIXUP_TYPE_FROM_UNMANAGED_RETAIN_APPDOMAIN  0x08\n#define VTFIXUP_TYPE_CALL_MOST_DERIVED                0x10\n\ntypedef struct {\n\tguint32 rva;\n\tguint16 count;\n\tguint16 type;\n} MonoVTableFixup;\n\ntypedef struct {\n\tchar    st_name [8];\n\tguint32 st_virtual_size;\n\tguint32 st_virtual_address;\n\tguint32 st_raw_data_size;\n\tguint32 st_raw_data_ptr;\n\tguint32 st_reloc_ptr;\n\tguint32 st_lineno_ptr;\n\tguint16 st_reloc_count;\n\tguint16 st_line_count;\n\n#define SECT_FLAGS_HAS_CODE               0x20\n#define SECT_FLAGS_HAS_INITIALIZED_DATA   0x40\n#define SECT_FLAGS_HAS_UNINITIALIZED_DATA 0x80\n#define SECT_FLAGS_MEM_DISCARDABLE        0x02000000\n#define SECT_FLAGS_MEM_NOT_CACHED         0x04000000\n#define SECT_FLAGS_MEM_NOT_PAGED          0x08000000\n#define SECT_FLAGS_MEM_SHARED             0x10000000\n#define SECT_FLAGS_MEM_EXECUTE            0x20000000\n#define SECT_FLAGS_MEM_READ               0x40000000\n#define SECT_FLAGS_MEM_WRITE              0x80000000\n\tguint32 st_flags;\n\n} MonoSectionTable;\n\ntypedef struct {\n\tguint32        ch_size;\n\tguint16        ch_runtime_major;\n\tguint16        ch_runtime_minor;\n\tMonoPEDirEntry ch_metadata;\n\n#define CLI_FLAGS_ILONLY         0x01\n#define CLI_FLAGS_32BITREQUIRED  0x02\n#define CLI_FLAGS_STRONGNAMESIGNED 0x8\n#define CLI_FLAGS_TRACKDEBUGDATA 0x00010000\n#define CLI_FLAGS_PREFERRED32BIT 0x00020000\n\tguint32        ch_flags;\n\n\tguint32        ch_entry_point;\n\tMonoPEDirEntry ch_resources;\n\tMonoPEDirEntry ch_strong_name;\n\tMonoPEDirEntry ch_code_manager_table;\n\tMonoPEDirEntry ch_vtable_fixups;\n\tMonoPEDirEntry ch_export_address_table_jumps;\n\n\t/* The following are zero in the current docs */\n\tMonoPEDirEntry ch_eeinfo_table;\n\tMonoPEDirEntry ch_helper_table;\n\tMonoPEDirEntry ch_dynamic_info;\n\tMonoPEDirEntry ch_delay_load_info;\n\tMonoPEDirEntry ch_module_image;\n\tMonoPEDirEntry ch_external_fixups;\n\tMonoPEDirEntry ch_ridmap;\n\tMonoPEDirEntry ch_debug_map;\n\tMonoPEDirEntry ch_ip_map;\n} MonoCLIHeader;\n\n/* This is not an on-disk structure */\ntypedef struct {\n\tMonoDotNetHeader  cli_header;\n\tint               cli_section_count;\n\tMonoSectionTable  *cli_section_tables;\n\tvoid            **cli_sections;\n\tMonoCLIHeader     cli_cli_header;\n} MonoCLIImageInfo;\n\nMONO_API guint32       mono_cli_rva_image_map (MonoImage *image, guint32 rva);\n\n#endif /* __MONO_CIL_COFF_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class-abi-details.h",
    "content": "/**\n * \\file Declarations of MonoClass field offset functions\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_CLASS_ABI_DETAILS_H__\n#define __MONO_METADATA_CLASS_ABI_DETAILS_H__\n\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/abi-details.h>\n\n#define MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname) /*nothing*/\n#ifdef MONO_CLASS_DEF_PRIVATE\n#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) intptr_t funcname (void);\n#else\n#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) static inline intptr_t funcname (void) { return MONO_STRUCT_OFFSET (argtype, fieldname); }\n#endif\n#include \"class-getters.h\"\n#undef MONO_CLASS_GETTER\n#undef MONO_CLASS_OFFSET\n\n#endif /* __MONO_METADATA_CLASS_ABI_DETAILS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class-getters.h",
    "content": "/* \n * \\file Definitions of getters for the fields of struct _MonoClass\n *\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n/* No include guards - this file is meant to be included multiple times.\n * Before including the file define the following macros:\n * MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname)\n * \n * MONO_CLASS_OFFSET(funcname, argtype, fieldname)\n */\n\n/* Accessors for _MonoClass fields. */\nMONO_CLASS_GETTER(m_class_get_element_class, MonoClass *,  , MonoClass, element_class)\nMONO_CLASS_GETTER(m_class_get_cast_class, MonoClass *,  , MonoClass, cast_class)\nMONO_CLASS_GETTER(m_class_get_supertypes, MonoClass **, , MonoClass, supertypes)\nMONO_CLASS_GETTER(m_class_get_idepth, guint16,  , MonoClass, idepth)\nMONO_CLASS_GETTER(m_class_get_rank, guint8,  , MonoClass, rank)\nMONO_CLASS_GETTER(m_class_get_instance_size, int, , MonoClass, instance_size)\nMONO_CLASS_GETTER(m_class_is_inited, gboolean, , MonoClass, inited)\nMONO_CLASS_GETTER(m_class_is_size_inited, gboolean, , MonoClass, size_inited)\nMONO_CLASS_GETTER(m_class_is_valuetype, gboolean, , MonoClass, valuetype)\nMONO_CLASS_GETTER(m_class_is_enumtype, gboolean, , MonoClass, enumtype)\nMONO_CLASS_GETTER(m_class_is_blittable, gboolean, , MonoClass, blittable)\nMONO_CLASS_GETTER(m_class_is_unicode, gboolean, , MonoClass, unicode)\nMONO_CLASS_GETTER(m_class_was_typebuilder, gboolean, , MonoClass, wastypebuilder)\nMONO_CLASS_GETTER(m_class_is_array_special_interface, gboolean, , MonoClass, is_array_special_interface)\nMONO_CLASS_GETTER(m_class_is_byreflike, gboolean, , MonoClass, is_byreflike)\nMONO_CLASS_GETTER(m_class_get_min_align, guint8, , MonoClass, min_align)\nMONO_CLASS_GETTER(m_class_get_packing_size, guint, , MonoClass, packing_size)\nMONO_CLASS_GETTER(m_class_is_ghcimpl, gboolean, , MonoClass, ghcimpl)\nMONO_CLASS_GETTER(m_class_has_finalize, gboolean, , MonoClass, has_finalize)\n#ifndef DISABLE_REMOTING\nMONO_CLASS_GETTER(m_class_get_marshalbyref, guint, , MonoClass, marshalbyref)\nMONO_CLASS_GETTER(m_class_get_contextbound, guint, , MonoClass, contextbound)\n#endif\nMONO_CLASS_GETTER(m_class_is_delegate, gboolean, , MonoClass, delegate)\nMONO_CLASS_GETTER(m_class_is_gc_descr_inited, gboolean, , MonoClass, gc_descr_inited)\nMONO_CLASS_GETTER(m_class_has_cctor, gboolean,  , MonoClass, has_cctor)\nMONO_CLASS_GETTER(m_class_has_references, gboolean, , MonoClass, has_references)\nMONO_CLASS_GETTER(m_class_has_static_refs, gboolean, , MonoClass, has_static_refs)\nMONO_CLASS_GETTER(m_class_has_no_special_static_fields, gboolean, , MonoClass, no_special_static_fields)\nMONO_CLASS_GETTER(m_class_is_com_object, gboolean, , MonoClass, is_com_object)\nMONO_CLASS_GETTER(m_class_is_nested_classes_inited, gboolean, , MonoClass, nested_classes_inited)\nMONO_CLASS_GETTER(m_class_get_class_kind, guint8, , MonoClass, class_kind)\nMONO_CLASS_GETTER(m_class_is_interfaces_inited, gboolean, , MonoClass, interfaces_inited)\nMONO_CLASS_GETTER(m_class_is_simd_type, gboolean, , MonoClass, simd_type)\nMONO_CLASS_GETTER(m_class_is_has_finalize_inited, gboolean, , MonoClass, has_finalize_inited)\nMONO_CLASS_GETTER(m_class_is_fields_inited, gboolean, , MonoClass, fields_inited)\nMONO_CLASS_GETTER(m_class_has_failure, gboolean, , MonoClass, has_failure)\nMONO_CLASS_GETTER(m_class_has_weak_fields, gboolean, , MonoClass, has_weak_fields)\nMONO_CLASS_GETTER(m_class_has_dim_conflicts, gboolean, , MonoClass, has_dim_conflicts)\nMONO_CLASS_GETTER(m_class_get_parent, MonoClass *, , MonoClass, parent)\nMONO_CLASS_GETTER(m_class_get_nested_in, MonoClass *, ,  MonoClass, nested_in)\nMONO_CLASS_GETTER(m_class_get_image, MonoImage *, , MonoClass, image)\nMONO_CLASS_GETTER(m_class_get_name, const char *, , MonoClass, name)\nMONO_CLASS_GETTER(m_class_get_name_space, const char *, , MonoClass, name_space)\nMONO_CLASS_GETTER(m_class_get_type_token, guint32, , MonoClass, type_token)\nMONO_CLASS_GETTER(m_class_get_vtable_size, int, , MonoClass, vtable_size)\nMONO_CLASS_GETTER(m_class_get_interface_count, guint16, , MonoClass, interface_count)\nMONO_CLASS_GETTER(m_class_get_interface_id, guint32, , MonoClass, interface_id)\nMONO_CLASS_GETTER(m_class_get_max_interface_id, guint32, , MonoClass, max_interface_id)\nMONO_CLASS_GETTER(m_class_get_interface_offsets_count, guint16, , MonoClass, interface_offsets_count)\nMONO_CLASS_GETTER(m_class_get_interfaces_packed, MonoClass **, , MonoClass, interfaces_packed)\nMONO_CLASS_GETTER(m_class_get_interface_offsets_packed, guint16 *, , MonoClass, interface_offsets_packed)\nMONO_CLASS_GETTER(m_class_get_interface_bitmap, guint8 *, , MonoClass, interface_bitmap)\nMONO_CLASS_GETTER(m_class_get_interfaces, MonoClass **, , MonoClass, interfaces)\nMONO_CLASS_GETTER(m_class_get_sizes, union _MonoClassSizes, , MonoClass, sizes)\nMONO_CLASS_GETTER(m_class_get_fields, MonoClassField *, , MonoClass, fields)\nMONO_CLASS_GETTER(m_class_get_methods, MonoMethod **, ,  MonoClass, methods)\nMONO_CLASS_GETTER(m_class_get_this_arg, MonoType*, &, MonoClass, this_arg)\nMONO_CLASS_GETTER(m_class_get_byval_arg, MonoType*, &, MonoClass, _byval_arg)\nMONO_CLASS_GETTER(m_class_get_gc_descr, MonoGCDescriptor, , MonoClass, gc_descr)\nMONO_CLASS_GETTER(m_class_get_runtime_info, MonoClassRuntimeInfo *, , MonoClass, runtime_info)\nMONO_CLASS_GETTER(m_class_get_vtable, MonoMethod **, , MonoClass, vtable)\nMONO_CLASS_GETTER(m_class_get_infrequent_data, MonoPropertyBag*, &, MonoClass, infrequent_data)\n\n/* Accessors for _MonoClassDef fields. */\nMONO_CLASS_GETTER(m_classdef_get_klass, MonoClass*, &, MonoClassDef, klass)\nMONO_CLASS_GETTER(m_classdef_get_flags, guint32, , MonoClassDef, flags)\nMONO_CLASS_GETTER(m_classdef_get_first_method_idx, guint32, ,  MonoClassDef, first_method_idx)\nMONO_CLASS_GETTER(m_classdef_get_first_field_idx, guint32, , MonoClassDef, first_field_idx)\nMONO_CLASS_GETTER(m_classdef_get_method_count, guint32, ,  MonoClassDef, method_count)\nMONO_CLASS_GETTER(m_classdef_get_field_count, guint32, ,  MonoClassDef, field_count)\nMONO_CLASS_GETTER(m_classdef_get_next_class_cache, MonoClass **, &, MonoClassDef, next_class_cache)\n\n/* Accessors for _MonoClassGtd fields. */\nMONO_CLASS_GETTER(m_classgtd_get_klass, MonoClassDef*, &, MonoClassGtd, klass)\nMONO_CLASS_GETTER(m_classgtd_get_generic_container, MonoGenericContainer*, , MonoClassGtd, generic_container)\nMONO_CLASS_GETTER(m_classgtd_get_canonical_inst, MonoType*, &, MonoClassGtd, canonical_inst)\n\n/* Accessors for _MonoClassGenericInst fields. */\nMONO_CLASS_GETTER(m_classgenericinst_get_klass, MonoClass*, &, MonoClassGenericInst, klass)\nMONO_CLASS_GETTER(m_classgenericinst_get_generic_class, MonoGenericClass*, , MonoClassGenericInst, generic_class)\n\n/* Accessors for _MonoClassGenericParam fields. */\nMONO_CLASS_GETTER(m_classgenericparam_get_klass, MonoClass*, &, MonoClassGenericParam, klass)\n\n/* Accessors for _MonoClassArray fields. */\nMONO_CLASS_GETTER(m_classarray_get_klass, MonoClass*, &, MonoClassArray, klass)\nMONO_CLASS_GETTER(m_classarray_get_method_count, guint32, , MonoClassArray, method_count)\n\n/* Accessors for _MonoClassPointer fields. */\nMONO_CLASS_GETTER(m_classpointer_get_klass, MonoClass*, &, MonoClassPointer, klass)\n\nMONO_CLASS_OFFSET(m_class_offsetof_interface_bitmap, MonoClass, interface_bitmap)\nMONO_CLASS_OFFSET(m_class_offsetof_byval_arg, MonoClass, _byval_arg)\nMONO_CLASS_OFFSET(m_class_offsetof_cast_class, MonoClass, cast_class)\nMONO_CLASS_OFFSET(m_class_offsetof_element_class, MonoClass, element_class)\nMONO_CLASS_OFFSET(m_class_offsetof_idepth, MonoClass, idepth)\nMONO_CLASS_OFFSET(m_class_offsetof_instance_size, MonoClass, instance_size)\nMONO_CLASS_OFFSET(m_class_offsetof_interface_id, MonoClass, interface_id)\nMONO_CLASS_OFFSET(m_class_offsetof_max_interface_id, MonoClass, max_interface_id)\nMONO_CLASS_OFFSET(m_class_offsetof_parent, MonoClass, parent)\nMONO_CLASS_OFFSET(m_class_offsetof_rank, MonoClass, rank)\nMONO_CLASS_OFFSET(m_class_offsetof_sizes, MonoClass, sizes)\nMONO_CLASS_OFFSET(m_class_offsetof_supertypes, MonoClass, supertypes)\nMONO_CLASS_OFFSET(m_class_offsetof_class_kind, MonoClass, class_kind)\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class-init.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_CLASS_INIT_H__\n#define __MONO_METADATA_CLASS_INIT_H__\n\n#include <glib.h>\n#include <mono/metadata/metadata.h>\n#include <mono/metadata/class-internals.h>\n\ngboolean\nmono_class_init_internal (MonoClass *klass);\n\nvoid\nmono_classes_init (void);\n\nvoid\nmono_classes_cleanup (void);\n\nMonoClass *\nmono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError *error);\n\nMonoClass*\nmono_class_create_generic_inst (MonoGenericClass *gclass);\n\nMonoClass *\nmono_class_create_bounded_array (MonoClass *element_class, uint32_t rank, mono_bool bounded);\n\nMonoClass *\nmono_class_create_array (MonoClass *element_class, uint32_t rank);\n\nMonoClass *\nmono_class_create_generic_parameter (MonoGenericParam *param);\n\nMonoClass *\nmono_class_create_ptr (MonoType *type);\n\nMonoClass *\nmono_class_create_fnptr (MonoMethodSignature *sig);\n\nvoid\nmono_class_setup_vtable_general (MonoClass *klass, MonoMethod **overrides, int onum, GList *in_setup);\n\nvoid\nmono_class_init_sizes (MonoClass *klass);\n\nvoid\nmono_class_setup_basic_field_info (MonoClass *klass);\n\nvoid\nmono_class_setup_fields (MonoClass *klass);\n\nvoid\nmono_class_setup_methods (MonoClass *klass);\n\nvoid\nmono_class_setup_properties (MonoClass *klass);\n\nvoid\nmono_class_setup_events (MonoClass *klass);\n\nvoid\nmono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_size, int real_size, gboolean sre);\n\nvoid\nmono_class_setup_interface_offsets (MonoClass *klass);\n\nvoid\nmono_class_setup_vtable (MonoClass *klass);\n\nvoid\nmono_class_setup_parent    (MonoClass *klass, MonoClass *parent);\n\nvoid\nmono_class_setup_mono_type (MonoClass *klass);\n\nvoid\nmono_class_setup_has_finalizer (MonoClass *klass);\n\nvoid\nmono_class_setup_nested_types (MonoClass *klass);\n\nvoid\nmono_class_setup_runtime_info (MonoClass *klass, MonoDomain *domain, MonoVTable *vtable);\n\nMonoClass *\nmono_class_create_array_fill_type (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class-inlines.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_CLASS_INLINES_H__\n#define __MONO_METADATA_CLASS_INLINES_H__\n\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/tabledefs.h>\n\nstatic inline MonoType*\nmono_get_void_type (void)\n{\n\treturn m_class_get_byval_arg (mono_defaults.void_class);\n}\n\nstatic inline MonoType*\nmono_get_int32_type (void)\n{\n\treturn m_class_get_byval_arg (mono_defaults.int32_class);\n}\n\nstatic inline MonoType*\nmono_get_int_type (void)\n{\n\treturn m_class_get_byval_arg (mono_defaults.int_class);\n}\n\nstatic inline MonoType*\nmono_get_object_type (void)\n{\n\treturn m_class_get_byval_arg (mono_defaults.object_class);\n}\n\n\nstatic inline gboolean\nmono_class_is_def (MonoClass *klass)\n{\n\treturn m_class_get_class_kind (klass) == MONO_CLASS_DEF;\n}\n\nstatic inline gboolean\nmono_class_is_gtd (MonoClass *klass)\n{\n\treturn m_class_get_class_kind (klass) == MONO_CLASS_GTD;\n}\n\nstatic inline gboolean\nmono_class_is_ginst (MonoClass *klass)\n{\n\treturn m_class_get_class_kind (klass) == MONO_CLASS_GINST;\n}\n\nstatic inline gboolean\nmono_class_is_gparam (MonoClass *klass)\n{\n\treturn m_class_get_class_kind (klass) == MONO_CLASS_GPARAM;\n}\n\nstatic inline gboolean\nmono_class_is_array (MonoClass *klass)\n{\n\treturn m_class_get_class_kind (klass) == MONO_CLASS_ARRAY;\n}\n\nstatic inline gboolean\nmono_class_is_pointer (MonoClass *klass)\n{\n\treturn m_class_get_class_kind (klass) == MONO_CLASS_POINTER;\n}\n\nstatic inline gboolean\nmono_class_is_abstract (MonoClass *klass)\n{\n\treturn mono_class_get_flags (klass) & TYPE_ATTRIBUTE_ABSTRACT;\n}\n\nstatic inline gboolean\nmono_class_is_interface (MonoClass *klass)\n{\n\treturn mono_class_get_flags (klass) & TYPE_ATTRIBUTE_INTERFACE;\n}\n\nstatic inline gboolean\nmono_class_is_sealed (MonoClass *klass)\n{\n\treturn mono_class_get_flags (klass) & TYPE_ATTRIBUTE_SEALED;\n}\n\nstatic inline gboolean\nmono_class_is_before_field_init (MonoClass *klass)\n{\n\treturn mono_class_get_flags (klass) & TYPE_ATTRIBUTE_BEFORE_FIELD_INIT;\n}\n\nstatic inline gboolean\nmono_class_is_auto_layout (MonoClass *klass)\n{\n\treturn (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_AUTO_LAYOUT;\n}\n\nstatic inline gboolean\nmono_class_is_explicit_layout (MonoClass *klass)\n{\n\treturn (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT;\n}\n\nstatic inline gboolean\nmono_class_is_public (MonoClass *klass)\n{\n\treturn mono_class_get_flags (klass) & TYPE_ATTRIBUTE_PUBLIC;\n}\n\nstatic inline gboolean\nmono_class_has_static_metadata (MonoClass *klass)\n{\n\treturn m_class_get_type_token (klass) && !m_class_get_image (klass)->dynamic && !mono_class_is_ginst (klass);\n}\n\nstatic inline gboolean\nm_class_is_abstract (MonoClass *klass)\n{\n\treturn (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_ABSTRACT) != 0;\n}\n\nstatic inline gboolean\nm_class_is_interface (MonoClass *klass)\n{\n\treturn MONO_CLASS_IS_INTERFACE_INTERNAL (klass);\n}\n\nstatic inline gboolean\nm_class_is_gtd (MonoClass *klass)\n{\n\treturn mono_class_is_gtd (klass);\n}\n\nstatic inline gboolean\nm_class_is_string (MonoClass *klass)\n{\n\treturn klass == mono_defaults.string_class;\n}\n\nstatic inline gboolean\nm_class_is_primitive (MonoClass *klass)\n{\n\treturn mono_type_is_primitive (m_class_get_byval_arg (klass));\n}\n\nstatic inline gboolean\nm_class_is_native_pointer (MonoClass *klass)\n{\n\tMonoType *t = m_class_get_byval_arg (klass);\n\n\treturn t->type == MONO_TYPE_PTR || t->type == MONO_TYPE_FNPTR;\n}\n\nstatic inline gboolean\nm_class_is_nullable (MonoClass *klass)\n{\n\treturn mono_class_is_nullable (klass);\n}\n\nstatic inline MonoClass*\nm_class_get_nullable_elem_class (MonoClass *klass)\n{\n\treturn m_class_get_cast_class (klass);\n}\n\nstatic inline gboolean\nm_class_is_runtime_type (MonoClass *klass)\n{\n\treturn klass == mono_defaults.runtimetype_class;\n}\n\nstatic inline gboolean\nm_class_is_auto_layout (MonoClass *klass)\n{\n\tguint32 layout = (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_LAYOUT_MASK);\n\n\treturn layout == TYPE_ATTRIBUTE_AUTO_LAYOUT;\n}\n\nstatic inline gboolean\nm_class_is_ginst (MonoClass *klass)\n{\n\treturn mono_class_is_ginst (klass);\n}\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class-internals.h",
    "content": "/**\n * \\file\n * Copyright 2012 Xamarin Inc\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_CLASS_INTERNALS_H__\n#define __MONO_METADATA_CLASS_INTERNALS_H__\n\n#include <mono/metadata/class.h>\n#include <mono/metadata/object.h>\n#include <mono/metadata/mempool.h>\n#include <mono/metadata/metadata-internals.h>\n#include <mono/metadata/property-bag.h>\n#include \"mono/utils/mono-compiler.h\"\n#include \"mono/utils/mono-error.h\"\n#include \"mono/sgen/gc-internal-agnostic.h\"\n#include \"mono/utils/mono-error-internals.h\"\n#include \"mono/utils/mono-memory-model.h\"\n\n#define MONO_CLASS_IS_ARRAY(c) (m_class_get_rank (c))\n\n#define MONO_CLASS_HAS_STATIC_METADATA(klass) (m_class_get_type_token (klass) && !m_class_get_image (klass)->dynamic && !mono_class_is_ginst (klass))\n\n#define MONO_DEFAULT_SUPERTABLE_SIZE 6\n\nextern gboolean mono_print_vtable;\nextern gboolean mono_align_small_structs;\nextern gint32 mono_simd_register_size;\n\ntypedef struct _MonoMethodWrapper MonoMethodWrapper;\ntypedef struct _MonoMethodInflated MonoMethodInflated;\ntypedef struct _MonoMethodPInvoke MonoMethodPInvoke;\ntypedef struct _MonoDynamicMethod MonoDynamicMethod;\n\n/* Properties that applies to a group of structs should better use a higher number\n * to avoid colision with type specific properties.\n * \n * This prop applies to class, method, property, event, assembly and image.\n */\n#define MONO_PROP_DYNAMIC_CATTR 0x1000\n\ntypedef enum {\n#define WRAPPER(e,n) MONO_WRAPPER_ ## e,\n#include \"wrapper-types.h\"\n#undef WRAPPER\n\tMONO_WRAPPER_NUM\n} MonoWrapperType;\n\ntypedef enum {\n\tMONO_REMOTING_TARGET_UNKNOWN,\n\tMONO_REMOTING_TARGET_APPDOMAIN,\n\tMONO_REMOTING_TARGET_COMINTEROP\n} MonoRemotingTarget;\n\n#define MONO_METHOD_PROP_GENERIC_CONTAINER 0\n\nstruct _MonoMethod {\n\tguint16 flags;  /* method flags */\n\tguint16 iflags; /* method implementation flags */\n\tguint32 token;\n\tMonoClass *klass; /* To what class does this method belong */\n\tMonoMethodSignature *signature;\n\t/* name is useful mostly for debugging */\n\tconst char *name;\n\t/* this is used by the inlining algorithm */\n\tunsigned int inline_info:1;\n\tunsigned int inline_failure:1;\n\tunsigned int wrapper_type:5;\n\tunsigned int string_ctor:1;\n\tunsigned int save_lmf:1;\n\tunsigned int dynamic:1; /* created & destroyed during runtime */\n\tunsigned int sre_method:1; /* created at runtime using Reflection.Emit */\n\tunsigned int is_generic:1; /* whenever this is a generic method definition */\n\tunsigned int is_inflated:1; /* whether we're a MonoMethodInflated */\n\tunsigned int skip_visibility:1; /* whenever to skip JIT visibility checks */\n\tunsigned int verification_success:1; /* whether this method has been verified successfully.*/\n\tunsigned int is_reabstracted:1; /* whenever this is a reabstraction of another interface */\n\tsigned int slot : 16;\n\n\t/*\n\t * If is_generic is TRUE, the generic_container is stored in image->property_hash, \n\t * using the key MONO_METHOD_PROP_GENERIC_CONTAINER.\n\t */\n};\n\nstruct _MonoMethodWrapper {\n\tMonoMethod method;\n\tMonoMethodHeader *header;\n\tvoid *method_data;\n};\n\nstruct _MonoDynamicMethod {\n\tMonoMethodWrapper method;\n\tMonoAssembly *assembly;\n};\n\nstruct _MonoMethodPInvoke {\n\tMonoMethod method;\n\tgpointer addr;\n\t/* add marshal info */\n\tguint16 piflags;  /* pinvoke flags */\n\tguint32 implmap_idx;  /* index into IMPLMAP */\n};\n\n/* \n * Stores the default value / RVA of fields.\n * This information is rarely needed, so it is stored separately from \n * MonoClassField.\n */\ntypedef struct MonoFieldDefaultValue {\n\t/*\n\t * If the field is constant, pointer to the metadata constant\n\t * value.\n\t * If the field has an RVA flag, pointer to the data.\n\t * Else, invalid.\n\t */\n\tconst char      *data;\n\n\t/* If the field is constant, the type of the constant. */\n\tMonoTypeEnum     def_type;\n} MonoFieldDefaultValue;\n\n/*\n * MonoClassField is just a runtime representation of the metadata for\n * field, it doesn't contain the data directly.  Static fields are\n * stored in MonoVTable->data.  Instance fields are allocated in the\n * objects after the object header.\n */\nstruct _MonoClassField {\n\t/* Type of the field */\n\tMonoType        *type;\n\n\tconst char      *name;\n\n\t/* Type where the field was defined */\n\tMonoClass       *parent;\n\n\t/*\n\t * Offset where this field is stored; if it is an instance\n\t * field, it's the offset from the start of the object, if\n\t * it's static, it's from the start of the memory chunk\n\t * allocated for statics for the class.\n\t * For special static fields, this is set to -1 during vtable construction.\n\t */\n\tint              offset;\n};\n\n/* a field is ignored if it's named \"_Deleted\" and it has the specialname and rtspecialname flags set */\n#define mono_field_is_deleted(field) (((field)->type->attrs & (FIELD_ATTRIBUTE_SPECIAL_NAME | FIELD_ATTRIBUTE_RT_SPECIAL_NAME)) \\\n\t\t\t\t      && (strcmp (mono_field_get_name (field), \"_Deleted\") == 0))\n\n/* a field is ignored if it's named \"_Deleted\" and it has the specialname and rtspecialname flags set */\n/* Try to avoid loading the field's type */\n#define mono_field_is_deleted_with_flags(field, flags) (((flags) & (FIELD_ATTRIBUTE_SPECIAL_NAME | FIELD_ATTRIBUTE_RT_SPECIAL_NAME)) \\\n\t\t\t\t      && (strcmp (mono_field_get_name (field), \"_Deleted\") == 0))\n\ntypedef struct {\n\tMonoClassField *field;\n\tguint32 offset;\n\tMonoMarshalSpec *mspec;\n} MonoMarshalField;\n\ntypedef struct {\n\tMonoPropertyBagItem head;\n\n\tguint32 native_size, min_align;\n\tguint32 num_fields;\n\tMonoMethod *ptr_to_str;\n\tMonoMethod *str_to_ptr;\n\tMonoMarshalField fields [MONO_ZERO_LEN_ARRAY];\n} MonoMarshalType;\n\n#define MONO_SIZEOF_MARSHAL_TYPE (offsetof (MonoMarshalType, fields))\n\nstruct _MonoProperty {\n\tMonoClass *parent;\n\tconst char *name;\n\tMonoMethod *get;\n\tMonoMethod *set;\n\tguint32 attrs;\n};\n\nstruct _MonoEvent {\n\tMonoClass *parent;\n\tconst char *name;\n\tMonoMethod *add;\n\tMonoMethod *remove;\n\tMonoMethod *raise;\n#ifndef MONO_SMALL_CONFIG\n\tMonoMethod **other;\n#endif\n\tguint32 attrs;\n};\n\n/* type of exception being \"on hold\" for later processing (see exception_type) */\ntypedef enum {\n\tMONO_EXCEPTION_NONE = 0,\n\tMONO_EXCEPTION_INVALID_PROGRAM = 3,\n\tMONO_EXCEPTION_UNVERIFIABLE_IL = 4,\n\tMONO_EXCEPTION_MISSING_METHOD = 5,\n\tMONO_EXCEPTION_MISSING_FIELD = 6,\n\tMONO_EXCEPTION_TYPE_LOAD = 7,\n\tMONO_EXCEPTION_FILE_NOT_FOUND = 8,\n\tMONO_EXCEPTION_METHOD_ACCESS = 9,\n\tMONO_EXCEPTION_FIELD_ACCESS = 10,\n\tMONO_EXCEPTION_GENERIC_SHARING_FAILED = 11,\n\tMONO_EXCEPTION_BAD_IMAGE = 12,\n\tMONO_EXCEPTION_OBJECT_SUPPLIED = 13, /*The exception object is already created.*/\n\tMONO_EXCEPTION_OUT_OF_MEMORY = 14,\n\tMONO_EXCEPTION_INLINE_FAILED = 15,\n\tMONO_EXCEPTION_MONO_ERROR = 16,\n\t/* add other exception type */\n} MonoExceptionType;\n\n/* This struct collects the info needed for the runtime use of a class,\n * like the vtables for a domain, the GC descriptor, etc.\n */\ntypedef struct {\n\tguint16 max_domain;\n\t/* domain_vtables is indexed by the domain id and the size is max_domain + 1 */\n\tMonoVTable *domain_vtables [MONO_ZERO_LEN_ARRAY];\n} MonoClassRuntimeInfo;\n\n#define MONO_SIZEOF_CLASS_RUNTIME_INFO (sizeof (MonoClassRuntimeInfo) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n\ntypedef struct {\n\tMonoPropertyBagItem head;\n\n\tMonoProperty *properties;\n\tguint32 first, count;\n\tMonoFieldDefaultValue *def_values;\n} MonoClassPropertyInfo;\n\ntypedef struct {\n\tMonoPropertyBagItem head;\n\n\t/* Initialized by a call to mono_class_setup_events () */\n\tMonoEvent *events;\n\tguint32 first, count;\n} MonoClassEventInfo;\n\ntypedef enum {\n\tMONO_CLASS_DEF = 1, /* non-generic type */\n\tMONO_CLASS_GTD, /* generic type definition */\n\tMONO_CLASS_GINST, /* generic instantiation */\n\tMONO_CLASS_GPARAM, /* generic parameter */\n\tMONO_CLASS_ARRAY, /* vector or array, bounded or not */\n\tMONO_CLASS_POINTER, /* pointer or function pointer*/\n} MonoTypeKind;\n\ntypedef struct _MonoClassDef MonoClassDef;\ntypedef struct _MonoClassGtd MonoClassGtd;\ntypedef struct _MonoClassGenericInst MonoClassGenericInst;\ntypedef struct _MonoClassGenericParam MonoClassGenericParam;\ntypedef struct _MonoClassArray MonoClassArray;\ntypedef struct _MonoClassPointer MonoClassPointer;\n\nunion _MonoClassSizes {\n\t\tint class_size; /* size of area for static fields */\n\t\tint element_size; /* for array types */\n\t\tint generic_param_token; /* for generic param types, both var and mvar */\n};\n\n/* enabled only with small config for now: we might want to do it unconditionally */\n#ifdef MONO_SMALL_CONFIG\n#define COMPRESSED_INTERFACE_BITMAP 1\n#endif\n\n\n#ifdef ENABLE_CHECKED_BUILD_PRIVATE_TYPES\n#define MONO_CLASS_DEF_PRIVATE 1\n#endif\n\n/* Hide _MonoClass definition in checked build mode to ensure that\n * it is only accessed via getter and setter methods.\n */\n#ifndef MONO_CLASS_DEF_PRIVATE\n#include \"class-private-definition.h\"\n#endif\n\n/* If MonoClass definition is hidden, just declare the getters.\n * Otherwise, define them as static inline functions.\n */\n#ifdef MONO_CLASS_DEF_PRIVATE\n#define MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname) rettype funcname (argtype *klass);\n#else\n#define MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname) static inline rettype funcname (argtype *klass) { return optref klass-> fieldname ; }\n#endif\n#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) /*nothing*/\n#include \"class-getters.h\"\n#undef MONO_CLASS_GETTER\n#undef MONO_CLASS_OFFSET\n\n#ifdef COMPRESSED_INTERFACE_BITMAP\nint mono_compress_bitmap (uint8_t *dest, const uint8_t *bitmap, int size);\nint mono_class_interface_match (const uint8_t *bitmap, int id);\n#else\n#define mono_class_interface_match(bmap,uiid) ((bmap) [(uiid) >> 3] & (1 << ((uiid)&7)))\n#endif\n\n#define MONO_CLASS_IMPLEMENTS_INTERFACE(k,uiid) (((uiid) <= m_class_get_max_interface_id (k)) && mono_class_interface_match (m_class_get_interface_bitmap (k), (uiid)))\n\n#define MONO_VTABLE_AVAILABLE_GC_BITS 4\n\n#ifdef DISABLE_REMOTING\n#define mono_class_is_marshalbyref(klass) (FALSE)\n#define mono_class_is_contextbound(klass) (FALSE)\n#define mono_vtable_is_remote(vtable) (FALSE)\n#define mono_vtable_set_is_remote(vtable,enable) do {} while (0)\n#else\n#define mono_class_is_marshalbyref(klass) (m_class_get_marshalbyref (klass))\n#define mono_class_is_contextbound(klass) (m_class_get_contextbound (klass))\n#define mono_vtable_is_remote(vtable) ((vtable)->remote)\n#define mono_vtable_set_is_remote(vtable,enable) do { (vtable)->remote = enable ? 1 : 0; } while (0)\n#endif\n\n#ifdef DISABLE_COM\n#define mono_class_is_com_object(klass) (FALSE)\n#else\n#define mono_class_is_com_object(klass) (m_class_is_com_object (klass))\n#endif\n\n\nMONO_API int mono_class_interface_offset (MonoClass *klass, MonoClass *itf);\nint mono_class_interface_offset_with_variance (MonoClass *klass, MonoClass *itf, gboolean *non_exact_match);\n\ntypedef gpointer MonoRuntimeGenericContext;\n\ntypedef enum {\n\t/* array or string */\n\tMONO_VT_FLAG_ARRAY_OR_STRING = (1 << 0),\n\tMONO_VT_FLAG_HAS_REFERENCES = (1 << 1),\n\tMONO_VT_FLAG_ARRAY_IS_PRIMITIVE = (1 << 2),\n} MonoVTableFlags;\n\n/* the interface_offsets array is stored in memory before this struct */\nstruct MonoVTable {\n\tMonoClass  *klass;\n\t /*\n\t * According to comments in gc_gcj.h, this should be the second word in\n\t * the vtable.\n\t */\n\tMonoGCDescriptor gc_descr;\n\tMonoDomain *domain;  /* each object/vtable belongs to exactly one domain */\n\tgpointer    type; /* System.Type type for klass */\n\tguint8     *interface_bitmap;\n\tguint32     max_interface_id;\n\tguint8      rank;\n\t/* Keep this a guint8, the jit depends on it */\n\tguint8      initialized; /* cctor has been run */\n\t/* Keep this a guint8, the jit depends on it */\n\tguint8      flags; /* MonoVTableFlags */\n\tguint remote          : 1; /* class is remotely activated */\n\tguint init_failed     : 1; /* cctor execution failed */\n\tguint has_static_fields : 1; /* pointer to the data stored at the end of the vtable array */\n\tguint gc_bits         : MONO_VTABLE_AVAILABLE_GC_BITS; /* Those bits are reserved for the usaged of the GC */\n\n\tguint32     imt_collisions_bitmap;\n\tMonoRuntimeGenericContext *runtime_generic_context;\n\t/* interp virtual method table */\n\tgpointer *interp_vtable;\n\t/* do not add any fields after vtable, the structure is dynamically extended */\n\t/* vtable contains function pointers to methods or their trampolines, at the\n\t end there may be a slot containing the pointer to the static fields */\n\tgpointer    vtable [MONO_ZERO_LEN_ARRAY];\t\n};\n\n#define MONO_SIZEOF_VTABLE (sizeof (MonoVTable) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n\n#define MONO_VTABLE_IMPLEMENTS_INTERFACE(vt,uiid) (((uiid) <= (vt)->max_interface_id) && mono_class_interface_match ((vt)->interface_bitmap, (uiid)))\n\n/*\n * Generic instantiation data type encoding.\n */\n\n/*\n * A particular generic instantiation:\n *\n * All instantiations are cached and we don't distinguish between class and method\n * instantiations here.\n */\nstruct _MonoGenericInst {\n#ifndef MONO_SMALL_CONFIG\n\tgint32 id;\t\t\t/* unique ID for debugging */\n#endif\n\tguint type_argc    : 22;\t/* number of type arguments */\n\tguint is_open      :  1;\t/* if this is an open type */\n\tMonoType *type_argv [MONO_ZERO_LEN_ARRAY];\n};\n\n#define MONO_SIZEOF_GENERIC_INST (sizeof (MonoGenericInst) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n/*\n * The generic context: an instantiation of a set of class and method generic parameters.\n *\n * NOTE: Never allocate this directly on the heap.  It have to be either allocated on the stack,\n *\t or embedded within other objects.  Don't store pointers to this, because it may be on the stack.\n *\t If you really have to, ensure you store a pointer to the embedding object along with it.\n */\nstruct _MonoGenericContext {\n\t/* The instantiation corresponding to the class generic parameters */\n\tMonoGenericInst *class_inst;\n\t/* The instantiation corresponding to the method generic parameters */\n\tMonoGenericInst *method_inst;\n};\n\n/*\n * Inflated generic method.\n */\nstruct _MonoMethodInflated {\n\tunion {\n\t\tMonoMethod method;\n\t\tMonoMethodPInvoke pinvoke;\n\t} method;\n\tMonoMethod *declaring;\t\t/* the generic method definition. */\n\tMonoGenericContext context;\t/* The current instantiation */\n\tMonoImageSet *owner; /* The image set that the inflated method belongs to. */\n};\n\n/*\n * A particular instantiation of a generic type.\n */\nstruct _MonoGenericClass {\n\tMonoClass *container_class;\t/* the generic type definition */\n\tMonoGenericContext context;\t/* a context that contains the type instantiation doesn't contain any method instantiation */ /* FIXME: Only the class_inst member of \"context\" is ever used, so this field could be replaced with just a monogenericinst */\n\tguint is_dynamic  : 1;\t\t/* Contains dynamic types */\n\tguint is_tb_open  : 1;\t\t/* This is the fully open instantiation for a type_builder. Quite ugly, but it's temporary.*/\n\tguint need_sync   : 1;      /* Only if dynamic. Need to be synchronized with its container class after its finished. */\n\tMonoClass *cached_class;\t/* if present, the MonoClass corresponding to the instantiation.  */\n\n\t/* \n\t * The image set which owns this generic class. Memory owned by the generic class\n\t * including cached_class should be allocated from the mempool of the image set,\n\t * so it is easy to free.\n\t */\n\tMonoImageSet *owner;\n};\n\n/* Additional details about a MonoGenericParam */\n/* Keep in sync with managed Mono.RuntimeStructs.GenericParamInfo */\ntypedef struct {\n\tMonoClass *pklass;\t\t/* The corresponding `MonoClass'. */\n\tconst char *name;\n\n\t// See GenericParameterAttributes\n\tguint16 flags;\n\n\tguint32 token;\n\n\t// Constraints on type parameters\n\tMonoClass** constraints; /* NULL means end of list */\n} MonoGenericParamInfo;\n\n/*\n * A type parameter.\n */\nstruct _MonoGenericParam {\n\t/*\n\t * Type or method this parameter was defined in.\n\t */\n\tMonoGenericContainer *owner;\n\tguint16 num;\n\t/*\n\t * If != NULL, this is a generated generic param used by the JIT to implement generic\n\t * sharing.\n\t */\n\tMonoType *gshared_constraint;\n\n\tMonoGenericParamInfo info;\n};\n\ntypedef MonoGenericParam MonoGenericParamFull;\n\n/*\n * The generic container.\n *\n * Stores the type parameters of a generic type definition or a generic method definition.\n */\nstruct _MonoGenericContainer {\n\tMonoGenericContext context;\n\t/* If we're a generic method definition in a generic type definition,\n\t   the generic container of the containing class. */\n\tMonoGenericContainer *parent;\n\t/* the generic type definition or the generic method definition corresponding to this container */\n\t/* Union rules: If is_anonymous, image field is valid; else if is_method, method field is valid; else klass is valid. */\n\tunion {\n\t\tMonoClass *klass;\n\t\tMonoMethod *method;\n\t\tMonoImage *image;\n\t} owner;\n\tint type_argc    : 29; // Per the ECMA spec, this value is capped at 16 bits\n\t/* If true, we're a generic method, otherwise a generic type definition. */\n\t/* Invariant: parent != NULL => is_method */\n\tint is_method     : 1;\n\t/* If true, this container has no associated class/method and only the image is known. This can happen:\n\t   1. For the special anonymous containers kept by MonoImage.\n\t   2. When user code creates a generic parameter via SRE, but has not yet set an owner. */\n\tint is_anonymous : 1;\n\t/* Our type parameters. If this is a special anonymous container (case 1, above), this field is not valid, use mono_metadata_create_anon_gparam ()  */\n\tMonoGenericParamFull *type_params;\n};\n\nstatic inline MonoGenericParam *\nmono_generic_container_get_param (MonoGenericContainer *gc, int i)\n{\n\treturn (MonoGenericParam *) &gc->type_params [i];\n}\n\nstatic inline MonoGenericParamInfo *\nmono_generic_container_get_param_info (MonoGenericContainer *gc, int i)\n{\n\treturn &gc->type_params [i].info;\n}\n\nstatic inline MonoGenericContainer *\nmono_generic_param_owner (MonoGenericParam *p)\n{\n\treturn p->owner;\n}\n\nstatic inline int\nmono_generic_param_num (MonoGenericParam *p)\n{\n\treturn p->num;\n}\n\nstatic inline MonoGenericParamInfo *\nmono_generic_param_info (MonoGenericParam *p)\n{\n\treturn &((MonoGenericParamFull *) p)->info;\n}\n\nstatic inline const char *\nmono_generic_param_name (MonoGenericParam *p)\n{\n\treturn ((MonoGenericParamFull *) p)->info.name;\n}\n\nstatic inline MonoGenericContainer *\nmono_type_get_generic_param_owner (MonoType *t)\n{\n\treturn mono_generic_param_owner (t->data.generic_param);\n}\n\nstatic inline int\nmono_type_get_generic_param_num (MonoType *t)\n{\n\treturn mono_generic_param_num (t->data.generic_param);\n}\n\n/*\n * Class information which might be cached by the runtime in the AOT file for\n * example. Caching this allows us to avoid computing a generic vtable\n * (class->vtable) in most cases, saving time and avoiding creation of lots of\n * MonoMethod structures.\n */\ntypedef struct MonoCachedClassInfo {\n\tguint32 vtable_size;\n\tguint has_finalize : 1;\n\tguint ghcimpl : 1;\n\tguint has_cctor : 1;\n\tguint has_nested_classes : 1;\n\tguint blittable : 1;\n\tguint has_references : 1;\n\tguint has_static_refs : 1;\n\tguint no_special_static_fields : 1;\n\tguint is_generic_container : 1;\n\tguint has_weak_fields : 1;\n\tguint32 cctor_token;\n\tMonoImage *finalize_image;\n\tguint32 finalize_token;\n\tguint32 instance_size;\n\tguint32 class_size;\n\tguint32 packing_size;\n\tguint32 min_align;\n} MonoCachedClassInfo;\n\ntypedef struct {\n\t// Name and func fields double as \"inited\".\n\t// That is, any initialized MonoJitICallInfo must\n\t// have both of them to be non-NULL.\n\tconst char *name;\n\tgconstpointer func;\n\tgconstpointer wrapper;\n\tgconstpointer trampoline;\n\tMonoMethodSignature *sig;\n\tconst char *c_symbol;\n\tMonoMethod *wrapper_method;\n} MonoJitICallInfo;\n\nvoid\nmono_class_setup_supertypes (MonoClass *klass);\n\n/* WARNING\n * Only call this function if you can ensure both @klass and @parent\n * have supertype information initialized.\n * This can be accomplished by mono_class_setup_supertypes or mono_class_init.\n * If unsure, use mono_class_has_parent.\n */\nstatic inline gboolean\nmono_class_has_parent_fast (MonoClass *klass, MonoClass *parent)\n{\n\treturn (m_class_get_idepth (klass) >= m_class_get_idepth (parent)) && (m_class_get_supertypes (klass) [m_class_get_idepth (parent) - 1] == parent);\n}\n\nstatic inline gboolean\nmono_class_has_parent (MonoClass *klass, MonoClass *parent)\n{\n\tif (G_UNLIKELY (!m_class_get_supertypes (klass)))\n\t\tmono_class_setup_supertypes (klass);\n\n\tif (G_UNLIKELY (!m_class_get_supertypes (parent)))\n\t\tmono_class_setup_supertypes (parent);\n\n\treturn mono_class_has_parent_fast (klass, parent);\n}\n\ntypedef struct {\n\tMonoVTable *default_vtable;\n\tMonoVTable *xdomain_vtable;\n\tMonoClass *proxy_class;\n\tchar* proxy_class_name;\n\tuint32_t interface_count;\n\tMonoClass *interfaces [MONO_ZERO_LEN_ARRAY];\n} MonoRemoteClass;\n\n#define MONO_SIZEOF_REMOTE_CLASS (sizeof (MonoRemoteClass) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n\ntypedef struct {\n\tgint32 initialized_class_count;\n\tgint32 generic_vtable_count;\n\tgint32 used_class_count;\n\tgint32 method_count;\n\tgint32 class_vtable_size;\n\tgint32 class_static_data_size;\n\tgint32 generic_class_count;\n\tgint32 inflated_method_count;\n\tgint32 inflated_type_count;\n\tgint32 delegate_creations;\n\tgint32 imt_tables_size;\n\tgint32 imt_number_of_tables;\n\tgint32 imt_number_of_methods;\n\tgint32 imt_used_slots;\n\tgint32 imt_slots_with_collisions;\n\tgint32 imt_max_collisions_in_slot;\n\tgint32 imt_method_count_when_max_collisions;\n\tgint32 imt_trampolines_size;\n\tgint32 jit_info_table_insert_count;\n\tgint32 jit_info_table_remove_count;\n\tgint32 jit_info_table_lookup_count;\n\tgint32 generics_sharable_methods;\n\tgint32 generics_unsharable_methods;\n\tgint32 generics_shared_methods;\n\tgint32 gsharedvt_methods;\n\tgboolean enabled;\n} MonoStats;\n\n/* \n * new structure to hold performace counters values that are exported\n * to managed code.\n * Note: never remove fields from this structure and only add them to the end.\n * Size of fields and type should not be changed as well.\n */\ntypedef struct {\n\t/* JIT category */\n\tgint32 jit_methods;\n\tgint32 jit_bytes;\n\tgint32 jit_time;\n\tgint32 jit_failures;\n\t/* Exceptions category */\n\tgint32 exceptions_thrown;\n\tgint32 exceptions_filters;\n\tgint32 exceptions_finallys;\n\tgint32 exceptions_depth;\n\tgint32 aspnet_requests_queued;\n\tgint32 aspnet_requests;\n\t/* Memory category */\n\tgint32 gc_collections0;\n\tgint32 gc_collections1;\n\tgint32 gc_collections2;\n\tgint32 gc_promotions0;\n\tgint32 gc_promotions1;\n\tgint32 gc_promotion_finalizers;\n\tgint64 gc_gen0size;\n\tgint64 gc_gen1size;\n\tgint64 gc_gen2size;\n\tgint32 gc_lossize;\n\tgint32 gc_fin_survivors;\n\tgint32 gc_num_handles;\n\tgint32 gc_allocated;\n\tgint32 gc_induced;\n\tgint32 gc_time;\n\tgint64 gc_total_bytes;\n\tgint64 gc_committed_bytes;\n\tgint64 gc_reserved_bytes;\n\tgint32 gc_num_pinned;\n\tgint32 gc_sync_blocks;\n\t/* Remoting category */\n\tgint32 remoting_calls;\n\tgint32 remoting_channels;\n\tgint32 remoting_proxies;\n\tgint32 remoting_classes;\n\tgint32 remoting_objects;\n\tgint32 remoting_contexts;\n\t/* Loader category */\n\tgint32 loader_classes;\n\tgint32 loader_total_classes;\n\tgint32 loader_appdomains;\n\tgint32 loader_total_appdomains;\n\tgint32 loader_assemblies;\n\tgint32 loader_total_assemblies;\n\tgint32 loader_failures;\n\tgint32 loader_bytes;\n\tgint32 loader_appdomains_uloaded;\n\t/* Threads and Locks category  */\n\tgint32 thread_contentions;\n\tgint32 thread_queue_len;\n\tgint32 thread_queue_max;\n\tgint32 thread_num_logical;\n\tgint32 thread_num_physical;\n\tgint32 thread_cur_recognized;\n\tgint32 thread_num_recognized;\n\t/* Interop category */\n\tgint32 interop_num_ccw;\n\tgint32 interop_num_stubs;\n\tgint32 interop_num_marshals;\n\t/* Security category */\n\tgint32 security_num_checks;\n\tgint32 security_num_link_checks;\n\tgint32 security_time;\n\tgint32 security_depth;\n\tgint32 unused;\n\t/* Threadpool */\n\tgint32 threadpool_threads;\n\tgint64 threadpool_workitems;\n\tgint64 threadpool_ioworkitems;\n\tgint32 threadpool_iothreads;\n} MonoPerfCounters;\n\nextern MonoPerfCounters *mono_perfcounters;\n\nMONO_API void mono_perfcounters_init (void);\n\n/*\n * The definition of the first field in SafeHandle,\n * Keep in sync with SafeHandle.cs, this is only used\n * to access the `handle' parameter.\n */\ntypedef struct {\n\tMonoObject  base;\n\tvoid       *handle;\n} MonoSafeHandle;\n\n/*\n * Keep in sync with HandleRef.cs\n */\ntypedef struct {\n\tMonoObject *wrapper;\n\tvoid       *handle;\n} MonoHandleRef;\n\nextern MonoStats mono_stats;\n\ntypedef gboolean (*MonoGetCachedClassInfo) (MonoClass *klass, MonoCachedClassInfo *res);\n\ntypedef gboolean (*MonoGetClassFromName) (MonoImage *image, const char *name_space, const char *name, MonoClass **res);\n\nstatic inline gboolean\nmethod_is_dynamic (MonoMethod *method)\n{\n#ifdef DISABLE_REFLECTION_EMIT\n\treturn FALSE;\n#else\n\treturn method->dynamic;\n#endif\n}\n\nMonoMethod*\nmono_class_get_method_by_index (MonoClass *klass, int index);\n\nMonoMethod*\nmono_class_get_inflated_method (MonoClass *klass, MonoMethod *method, MonoError *error);\n\nMonoMethod*\nmono_class_get_vtable_entry (MonoClass *klass, int offset);\n\nGPtrArray*\nmono_class_get_implemented_interfaces (MonoClass *klass, MonoError *error);\n\nint\nmono_class_get_vtable_size (MonoClass *klass);\n\ngboolean\nmono_class_is_open_constructed_type (MonoType *t);\n\nvoid\nmono_class_get_overrides_full (MonoImage *image, guint32 type_token, MonoMethod ***overrides, gint32 *num_overrides, MonoGenericContext *generic_context, MonoError *error);\n\nMONO_LLVM_INTERNAL MonoMethod*\nmono_class_get_cctor (MonoClass *klass);\n\nMonoMethod*\nmono_class_get_finalizer (MonoClass *klass);\n\ngboolean\nmono_class_needs_cctor_run (MonoClass *klass, MonoMethod *caller);\n\ngboolean\nmono_class_field_is_special_static (MonoClassField *field);\n\nguint32\nmono_class_field_get_special_static_type (MonoClassField *field);\n\ngboolean\nmono_class_has_special_static_fields (MonoClass *klass);\n\nconst char*\nmono_class_get_field_default_value (MonoClassField *field, MonoTypeEnum *def_type);\n\nMonoProperty* \nmono_class_get_property_from_name_internal (MonoClass *klass, const char *name);\n\nconst char*\nmono_class_get_property_default_value (MonoProperty *property, MonoTypeEnum *def_type);\n\ngpointer\nmono_lookup_dynamic_token (MonoImage *image, guint32 token, MonoGenericContext *context, MonoError *error);\n\ngpointer\nmono_lookup_dynamic_token_class (MonoImage *image, guint32 token, gboolean check_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);\n\ngpointer\nmono_runtime_create_jump_trampoline (MonoDomain *domain, MonoMethod *method, gboolean add_sync_wrapper, MonoError *error);\n\ngpointer\nmono_runtime_create_delegate_trampoline (MonoClass *klass);\n\nvoid\nmono_install_get_cached_class_info (MonoGetCachedClassInfo func);\n\nvoid\nmono_install_get_class_from_name (MonoGetClassFromName func);\n\nMONO_PROFILER_API MonoGenericContext*\nmono_class_get_context (MonoClass *klass);\n\nMONO_PROFILER_API MonoMethodSignature*\nmono_method_signature_checked_slow (MonoMethod *m, MonoError *err);\n\nMONO_PROFILER_API MonoMethodSignature*\nmono_method_signature_internal_slow (MonoMethod *m);\n\n/**\n * mono_method_signature_checked:\n *\n * Return the signature of the method M. On failure, returns NULL, and ERR is set.\n */\nstatic inline MonoMethodSignature*\nmono_method_signature_checked (MonoMethod *m, MonoError *error)\n{\n\terror_init (error);\n\tMonoMethodSignature* sig = m->signature;\n\treturn sig ? sig : mono_method_signature_checked_slow (m, error);\n}\n\n/**\n * mono_method_signature_internal:\n * \\returns the signature of the method \\p m. On failure, returns NULL.\n */\nstatic inline MonoMethodSignature*\nmono_method_signature_internal (MonoMethod *m)\n{\n\tMonoMethodSignature* sig = m->signature;\n\treturn sig ? sig : mono_method_signature_internal_slow (m);\n}\n\nMonoGenericContext*\nmono_method_get_context_general (MonoMethod *method, gboolean uninflated);\n\nMONO_PROFILER_API MonoGenericContext*\nmono_method_get_context (MonoMethod *method);\n\n/* Used by monodis, thus cannot be MONO_INTERNAL */\nMONO_API MonoGenericContainer*\nmono_method_get_generic_container (MonoMethod *method);\n\nMonoGenericContext*\nmono_generic_class_get_context (MonoGenericClass *gclass);\n\nvoid\nmono_method_set_generic_container (MonoMethod *method, MonoGenericContainer* container);\n\nMonoMethod*\nmono_class_inflate_generic_method_full_checked (MonoMethod *method, MonoClass *klass_hint, MonoGenericContext *context, MonoError *error);\n\nMonoMethod *\nmono_class_inflate_generic_method_checked (MonoMethod *method, MonoGenericContext *context, MonoError *error);\n\nMonoImageSet *\nmono_metadata_get_image_set_for_class (MonoClass *klass);\n\nMonoImageSet *\nmono_metadata_get_image_set_for_method (MonoMethodInflated *method);\n\nMONO_API MonoMethodSignature *\nmono_metadata_get_inflated_signature (MonoMethodSignature *sig, MonoGenericContext *context);\n\nMonoType*\nmono_class_inflate_generic_type_with_mempool (MonoImage *image, MonoType *type, MonoGenericContext *context, MonoError *error);\n\nMonoType*\nmono_class_inflate_generic_type_checked (MonoType *type, MonoGenericContext *context, MonoError *error);\n\nMONO_API void\nmono_metadata_free_inflated_signature (MonoMethodSignature *sig);\n\nMonoMethodSignature*\nmono_inflate_generic_signature (MonoMethodSignature *sig, MonoGenericContext *context, MonoError *error);\n\nMonoClass*\nmono_generic_param_get_base_type (MonoClass *klass);\n\ntypedef struct {\n\tMonoImage *corlib;\n\tMonoClass *object_class;\n\tMonoClass *object_class_array; // used via token pasting in mono_array_class_get_cached\n\tMonoClass *byte_class;\n\tMonoClass *void_class;\n\tMonoClass *boolean_class;\n\tMonoClass *sbyte_class;\n\tMonoClass *int16_class;\n\tMonoClass *uint16_class;\n\tMonoClass *int32_class;\n\tMonoClass *uint32_class;\n\tMonoClass *int_class;\n\tMonoClass *uint_class;\n\tMonoClass *int64_class;\n\tMonoClass *uint64_class;\n\tMonoClass *single_class;\n\tMonoClass *double_class;\n\tMonoClass *char_class;\n\tMonoClass *string_class;\n\tMonoClass *enum_class;\n\tMonoClass *array_class;\n\tMonoClass *delegate_class;\n\tMonoClass *multicastdelegate_class;\n\tMonoClass *manualresetevent_class;\n\tMonoClass *typehandle_class;\n\tMonoClass *fieldhandle_class;\n\tMonoClass *methodhandle_class;\n\tMonoClass *systemtype_class;\n\tMonoClass *runtimetype_class;\n\tMonoClass *runtimetype_class_array; // used via token pasting in mono_array_class_get_cached\n\tMonoClass *exception_class;\n\tMonoClass *threadabortexception_class;\n\tMonoClass *thread_class;\n\tMonoClass *internal_thread_class;\n#ifndef DISABLE_REMOTING\n\tMonoClass *transparent_proxy_class;\n\tMonoClass *real_proxy_class;\n\tMonoClass *marshalbyrefobject_class;\n\tMonoClass *iremotingtypeinfo_class;\n#endif\n\tMonoClass *mono_method_message_class;\n\tMonoClass *appdomain_class;\n\tMonoClass *field_info_class;\n\tMonoClass *method_info_class;\n\tMonoClass *stack_frame_class;\n\tMonoClass *marshal_class;\n\tMonoClass *typed_reference_class;\n\tMonoClass *argumenthandle_class;\n\tMonoClass *monitor_class;\n\tMonoClass *generic_ilist_class;\n\tMonoClass *generic_nullable_class;\n\tMonoClass *attribute_class;\n\tMonoClass *attribute_class_array; // used via token pasting in mono_array_class_get_cached\n\tMonoClass *critical_finalizer_object; /* MAYBE NULL */\n\tMonoClass *generic_ireadonlylist_class;\n\tMonoClass *generic_ienumerator_class;\n#ifndef ENABLE_NETCORE\n\tMonoMethod *threadpool_perform_wait_callback_method;\n#endif\n} MonoDefaults;\n\n#ifdef DISABLE_REMOTING\n#define mono_class_is_transparent_proxy(klass) (FALSE)\n#define mono_class_is_real_proxy(klass) (FALSE)\n#else\n#define mono_class_is_transparent_proxy(klass) ((klass) == mono_defaults.transparent_proxy_class)\n#define mono_class_is_real_proxy(klass) ((klass) == mono_defaults.real_proxy_class)\n#endif\n\n#define mono_object_is_transparent_proxy(object) (mono_class_is_transparent_proxy (mono_object_class (object)))\n\n\n#define GENERATE_GET_CLASS_WITH_CACHE_DECL(shortname) \\\nMonoClass* mono_class_get_##shortname##_class (void);\n\n#define GENERATE_TRY_GET_CLASS_WITH_CACHE_DECL(shortname) \\\nMonoClass* mono_class_try_get_##shortname##_class (void);\n\n// GENERATE_GET_CLASS_WITH_CACHE attempts mono_class_load_from_name whenever\n// its cache is null. i.e. potentially repeatedly, though it is expected to succeed\n// the first time.\n//\n#define GENERATE_GET_CLASS_WITH_CACHE(shortname,name_space,name) \\\nMonoClass*\t\\\nmono_class_get_##shortname##_class (void)\t\\\n{\t\\\n\tstatic MonoClass *tmp_class;\t\\\n\tMonoClass *klass = tmp_class;\t\\\n\tif (!klass) {\t\\\n\t\tklass = mono_class_load_from_name (mono_defaults.corlib, name_space, name);\t\\\n\t\tmono_memory_barrier ();\t/* FIXME excessive? */ \\\n\t\ttmp_class = klass;\t\\\n\t}\t\\\n\treturn klass;\t\\\n}\n\n// GENERATE_TRY_GET_CLASS_WITH_CACHE attempts mono_class_load_from_name approximately\n// only once. i.e. if it fails, it will return null and not retry.\n// In a race it might try a few times, but not indefinitely.\n//\n// FIXME This maybe has excessive volatile/barriers.\n//\n#define GENERATE_TRY_GET_CLASS_WITH_CACHE(shortname,name_space,name) \\\nMonoClass*\t\\\nmono_class_try_get_##shortname##_class (void)\t\\\n{\t\\\n\tstatic volatile MonoClass *tmp_class;\t\\\n\tstatic volatile gboolean inited;\t\\\n\tMonoClass *klass = (MonoClass *)tmp_class;\t\\\n\tmono_memory_barrier ();\t\\\n\tif (!inited) {\t\\\n\t\tklass = mono_class_try_load_from_name (mono_defaults.corlib, name_space, name);\t\\\n\t\ttmp_class = klass;\t\\\n\t\tmono_memory_barrier ();\t\\\n\t\tinited = TRUE;\t\\\n\t}\t\\\n\treturn klass;\t\\\n}\n\nGENERATE_TRY_GET_CLASS_WITH_CACHE_DECL (safehandle)\n\n#ifndef DISABLE_COM\n\nGENERATE_GET_CLASS_WITH_CACHE_DECL (interop_proxy)\nGENERATE_GET_CLASS_WITH_CACHE_DECL (idispatch)\nGENERATE_GET_CLASS_WITH_CACHE_DECL (iunknown)\nGENERATE_GET_CLASS_WITH_CACHE_DECL (com_object)\nGENERATE_GET_CLASS_WITH_CACHE_DECL (variant)\n\n#endif\n\nGENERATE_GET_CLASS_WITH_CACHE_DECL (appdomain)\nGENERATE_GET_CLASS_WITH_CACHE_DECL (appdomain_setup)\n\nGENERATE_GET_CLASS_WITH_CACHE_DECL (appdomain_unloaded_exception)\nGENERATE_TRY_GET_CLASS_WITH_CACHE_DECL (appdomain_unloaded_exception)\n\nGENERATE_GET_CLASS_WITH_CACHE_DECL (valuetype)\n\nGENERATE_TRY_GET_CLASS_WITH_CACHE_DECL(handleref)\n\n#ifdef ENABLE_NETCORE\nGENERATE_GET_CLASS_WITH_CACHE_DECL (assembly_load_context)\nGENERATE_GET_CLASS_WITH_CACHE_DECL (native_library)\n#endif\n\n/* If you need a MonoType, use one of the mono_get_*_type () functions in class-inlines.h */\nextern MonoDefaults mono_defaults;\n\nvoid\nmono_loader_init           (void);\n\nvoid\nmono_loader_cleanup        (void);\n\nMONO_LLVM_INTERNAL void\nmono_loader_lock           (void);\n\nMONO_LLVM_INTERNAL void\nmono_loader_unlock         (void);\n\nvoid\nmono_loader_lock_track_ownership (gboolean track);\n\ngboolean\nmono_loader_lock_is_owned_by_self (void);\n\nvoid\nmono_loader_lock_if_inited (void);\n\nvoid\nmono_loader_unlock_if_inited (void);\n\nvoid\nmono_reflection_init       (void);\n\nvoid\nmono_icall_init            (void);\n\nvoid\nmono_icall_cleanup         (void);\n\ngpointer\nmono_method_get_wrapper_data (MonoMethod *method, guint32 id);\n\ngboolean\nmono_metadata_has_generic_params (MonoImage *image, guint32 token);\n\nMONO_API MonoGenericContainer *\nmono_metadata_load_generic_params (MonoImage *image, guint32 token,\n\t\t\t\t   MonoGenericContainer *parent_container,\n\t\t\t\t   gpointer real_owner);\n\nMONO_API gboolean\nmono_metadata_load_generic_param_constraints_checked (MonoImage *image, guint32 token,\n\t\t\t\t\t      MonoGenericContainer *container, MonoError *error);\n\n// This is the \"real\" function for registering JIT icalls. All others are one line wrappers that call it,\n// i.e. filling in info or c_symbol.\nvoid\nmono_register_jit_icall_info (MonoJitICallInfo *info, gconstpointer func, const char *name,\n\t\t\t      MonoMethodSignature *sig, gboolean no_wrapper, const char *c_symbol);\n\n#ifdef __cplusplus\ntemplate <typename T>\ninline void\nmono_register_jit_icall_info (MonoJitICallInfo *info, T func, const char *name, MonoMethodSignature *sig, gboolean no_wrapper, const char *c_symbol)\n{\n\tmono_register_jit_icall_info (info, (gconstpointer)func, name, sig, no_wrapper, c_symbol);\n}\n#endif // __cplusplus\n\n#define mono_register_jit_icall(func, sig, no_wrapper) (mono_register_jit_icall_info (&mono_get_jit_icall_info ()->func, func, #func, (sig), (no_wrapper), NULL))\n\ngboolean\nmono_class_set_type_load_failure (MonoClass *klass, const char * fmt, ...) MONO_ATTR_FORMAT_PRINTF(2,3);\n\nMonoException*\nmono_class_get_exception_for_failure (MonoClass *klass);\n\nchar*\nmono_identifier_escape_type_name_chars (const char* identifier);\n\nchar*\nmono_type_get_full_name (MonoClass *klass);\n\nchar *\nmono_method_get_name_full (MonoMethod *method, gboolean signature, gboolean ret, MonoTypeNameFormat format);\n\nMONO_PROFILER_API char *\nmono_method_get_full_name (MonoMethod *method);\n\nconst char*\nmono_wrapper_type_to_str (guint32 wrapper_type);\n\nMonoArrayType *mono_dup_array_type (MonoImage *image, MonoArrayType *a);\nMonoMethodSignature *mono_metadata_signature_deep_dup (MonoImage *image, MonoMethodSignature *sig);\n\nMONO_API void\nmono_image_init_name_cache (MonoImage *image);\n\nMonoClass*\nmono_class_get_nullable_param_internal (MonoClass *klass);\n\n/* object debugging functions, for use inside gdb */\nMONO_API void mono_object_describe        (MonoObject *obj);\nMONO_API void mono_object_describe_fields (MonoObject *obj);\nMONO_API void mono_value_describe_fields  (MonoClass* klass, const char* addr);\nMONO_API void mono_class_describe_statics (MonoClass* klass);\n\n/* method debugging functions, for use inside gdb */\nMONO_API void mono_method_print_code (MonoMethod *method);\n\nMONO_PROFILER_API char *mono_signature_full_name (MonoMethodSignature *sig);\n\n/*Enum validation related functions*/\nMONO_API gboolean\nmono_type_is_valid_enum_basetype (MonoType * type);\n\nMONO_API gboolean\nmono_class_is_valid_enum (MonoClass *klass);\n\nMONO_PROFILER_API gboolean\nmono_type_is_primitive (MonoType *type);\n\nMonoType *\nmono_type_get_checked        (MonoImage *image, guint32 type_token, MonoGenericContext *context, MonoError *error);\n\ngboolean\nmono_generic_class_is_generic_type_definition (MonoGenericClass *gklass);\n\nMonoType*\nmono_type_get_basic_type_from_generic (MonoType *type);\n\ngboolean\nmono_method_can_access_method_full (MonoMethod *method, MonoMethod *called, MonoClass *context_klass);\n\ngboolean\nmono_method_can_access_field_full (MonoMethod *method, MonoClassField *field, MonoClass *context_klass);\n\ngboolean\nmono_class_can_access_class (MonoClass *access_class, MonoClass *target_class);\n\nMonoClass *\nmono_class_get_generic_type_definition (MonoClass *klass);\n\ngboolean\nmono_class_has_parent_and_ignore_generics (MonoClass *klass, MonoClass *parent);\n\nint\nmono_method_get_vtable_slot (MonoMethod *method);\n\nint\nmono_method_get_vtable_index (MonoMethod *method);\n\nMonoMethod*\nmono_method_get_base_method (MonoMethod *method, gboolean definition, MonoError *error);\n\nMonoMethod*\nmono_method_search_in_array_class (MonoClass *klass, const char *name, MonoMethodSignature *sig);\n\nvoid\nmono_class_setup_interface_id (MonoClass *klass);\n\nMonoGenericContainer*\nmono_class_get_generic_container (MonoClass *klass);\n\ngpointer\nmono_class_alloc (MonoClass *klass, int size);\n\ngpointer\nmono_class_alloc0 (MonoClass *klass, int size);\n\n#define mono_class_alloc0(klass, size) (g_cast (mono_class_alloc0 ((klass), (size))))\n\nvoid\nmono_class_setup_interfaces (MonoClass *klass, MonoError *error);\n\nMonoClassField*\nmono_class_get_field_from_name_full (MonoClass *klass, const char *name, MonoType *type);\n\nMonoVTable*\nmono_class_vtable_checked (MonoDomain *domain, MonoClass *klass, MonoError *error);\n\nvoid\nmono_class_is_assignable_from_checked (MonoClass *klass, MonoClass *oklass, gboolean *result, MonoError *error);\n\ngboolean\nmono_class_is_assignable_from_slow (MonoClass *target, MonoClass *candidate);\n\ngboolean\nmono_class_has_variant_generic_params (MonoClass *klass);\n\ngboolean\nmono_class_is_variant_compatible (MonoClass *klass, MonoClass *oklass, gboolean check_for_reference_conv);\n\ngboolean \nmono_class_is_subclass_of_internal (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces);\n\nmono_bool\nmono_class_is_assignable_from_internal (MonoClass *klass, MonoClass *oklass);\n\ngboolean mono_is_corlib_image (MonoImage *image);\n\nMonoType*\nmono_field_get_type_checked (MonoClassField *field, MonoError *error);\n\nMonoType*\nmono_field_get_type_internal (MonoClassField *field);\n\nMonoClassField*\nmono_class_get_fields_internal (MonoClass* klass, gpointer *iter);\n\nMonoClassField*\nmono_class_get_fields_lazy (MonoClass* klass, gpointer *iter);\n\ngboolean\nmono_class_check_vtable_constraints (MonoClass *klass, GList *in_setup);\n\ngboolean\nmono_class_has_finalizer (MonoClass *klass);\n\nvoid\nmono_unload_interface_id (MonoClass *klass);\n\nGPtrArray*\nmono_class_get_methods_by_name (MonoClass *klass, const char *name, guint32 bflags, guint32 mlisttype, gboolean allow_ctors, MonoError *error);\n\nchar*\nmono_class_full_name (MonoClass *klass);\n\nMonoClass*\nmono_class_inflate_generic_class_checked (MonoClass *gklass, MonoGenericContext *context, MonoError *error);\n\nMONO_PROFILER_API MonoClass *\nmono_class_get_checked (MonoImage *image, guint32 type_token, MonoError *error);\n\nMonoClass *\nmono_class_get_and_inflate_typespec_checked (MonoImage *image, guint32 type_token, MonoGenericContext *context, MonoError *error);\n\nMonoClass *\nmono_class_from_name_checked (MonoImage *image, const char* name_space, const char *name, MonoError *error);\n\nMonoClass *\nmono_class_from_name_case_checked (MonoImage *image, const char* name_space, const char *name, MonoError *error);\n\nMONO_PROFILER_API MonoClass *\nmono_class_from_mono_type_internal (MonoType *type);\n\nMonoClassField*\nmono_field_from_token_checked (MonoImage *image, uint32_t token, MonoClass **retklass, MonoGenericContext *context, MonoError *error);\n\ngpointer\nmono_ldtoken_checked (MonoImage *image, guint32 token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);\n\nMonoImage *\nmono_get_image_for_generic_param (MonoGenericParam *param);\n\nchar *\nmono_make_generic_name_string (MonoImage *image, int num);\n\nMONO_LLVM_INTERNAL MonoClass *\nmono_class_load_from_name (MonoImage *image, const char* name_space, const char *name);\n\nMonoClass*\nmono_class_try_load_from_name (MonoImage *image, const char* name_space, const char *name);\n\nvoid\nmono_error_set_for_class_failure (MonoError *orerror, const MonoClass *klass);\n\ngboolean\nmono_class_has_failure (const MonoClass *klass);\n\n/* Kind specific accessors */\nMONO_LLVM_INTERNAL MonoGenericClass*\nmono_class_get_generic_class (MonoClass *klass);\n\nMonoGenericClass*\nmono_class_try_get_generic_class (MonoClass *klass);\n\nvoid\nmono_class_set_flags (MonoClass *klass, guint32 flags);\n\nMonoGenericContainer*\nmono_class_try_get_generic_container (MonoClass *klass);\n\nvoid\nmono_class_set_generic_container (MonoClass *klass, MonoGenericContainer *container);\n\nMonoType*\nmono_class_gtd_get_canonical_inst (MonoClass *klass);\n\nguint32\nmono_class_get_first_method_idx (MonoClass *klass);\n\nvoid\nmono_class_set_first_method_idx (MonoClass *klass, guint32 idx);\n\nguint32\nmono_class_get_first_field_idx (MonoClass *klass);\n\nvoid\nmono_class_set_first_field_idx (MonoClass *klass, guint32 idx);\n\nguint32\nmono_class_get_method_count (MonoClass *klass);\n\nvoid\nmono_class_set_method_count (MonoClass *klass, guint32 count);\n\nguint32\nmono_class_get_field_count (MonoClass *klass);\n\nvoid\nmono_class_set_field_count (MonoClass *klass, guint32 count);\n\nMonoMarshalType*\nmono_class_get_marshal_info (MonoClass *klass);\n\nvoid\nmono_class_set_marshal_info (MonoClass *klass, MonoMarshalType *marshal_info);\n\nguint32\nmono_class_get_ref_info_handle (MonoClass *klass);\n\nguint32\nmono_class_set_ref_info_handle (MonoClass *klass, guint32 value);\n\nMonoErrorBoxed*\nmono_class_get_exception_data (MonoClass *klass);\n\nvoid\nmono_class_set_exception_data (MonoClass *klass, MonoErrorBoxed *value);\n\nGList*\nmono_class_get_nested_classes_property (MonoClass *klass);\n\nvoid\nmono_class_set_nested_classes_property (MonoClass *klass, GList *value);\n\nMonoClassPropertyInfo*\nmono_class_get_property_info (MonoClass *klass);\n\nvoid\nmono_class_set_property_info (MonoClass *klass, MonoClassPropertyInfo *info);\n\nMonoClassEventInfo*\nmono_class_get_event_info (MonoClass *klass);\n\nvoid\nmono_class_set_event_info (MonoClass *klass, MonoClassEventInfo *info);\n\nMonoFieldDefaultValue*\nmono_class_get_field_def_values (MonoClass *klass);\n\nvoid\nmono_class_set_field_def_values (MonoClass *klass, MonoFieldDefaultValue *values);\n\nguint32\nmono_class_get_declsec_flags (MonoClass *klass);\n\nvoid\nmono_class_set_declsec_flags (MonoClass *klass, guint32 value);\n\nvoid\nmono_class_set_is_com_object (MonoClass *klass);\n\nvoid\nmono_class_set_weak_bitmap (MonoClass *klass, int nbits, gsize *bits);\n\ngsize*\nmono_class_get_weak_bitmap (MonoClass *klass, int *nbits);\n\ngboolean\nmono_class_has_dim_conflicts (MonoClass *klass);\n\nvoid\nmono_class_set_dim_conflicts (MonoClass *klass, GSList *conflicts);\n\nGSList*\nmono_class_get_dim_conflicts (MonoClass *klass);\n\nMonoMethod *\nmono_class_get_method_from_name_checked (MonoClass *klass, const char *name, int param_count, int flags, MonoError *error);\n\ngboolean\nmono_method_has_no_body (MonoMethod *method);\n\n// FIXME Replace all internal callers of mono_method_get_header_checked with\n// mono_method_get_header_internal; the difference is in error initialization.\n//\n// And then mark mono_method_get_header_checked as MONO_RT_EXTERNAL_ONLY MONO_API.\n//\n// Internal callers expected to use ERROR_DECL. External callers are not.\nMonoMethodHeader*\nmono_method_get_header_internal (MonoMethod *method, MonoError *error);\n\nMonoType*\nmono_class_find_enum_basetype (MonoClass *klass, MonoError *error);\n\ngboolean\nmono_class_set_failure (MonoClass *klass, MonoErrorBoxed *boxed_error);\n\ngboolean\nmono_class_set_type_load_failure_causedby_class (MonoClass *klass, const MonoClass *caused_by, const gchar* msg);\n\ngboolean mono_class_get_cached_class_info (MonoClass *klass, MonoCachedClassInfo *res);\n\nMonoMethod* mono_find_method_in_metadata (MonoClass *klass, const char *name, int param_count, int flags);\n\nint\nmono_class_get_object_finalize_slot (void);\n\nMonoMethod *\nmono_class_get_default_finalize_method (void);\n\nvoid\nmono_field_resolve_type (MonoClassField *field, MonoError *error);\n\ngboolean\nmono_type_has_exceptions (MonoType *type);\n\nvoid\nmono_class_set_nonblittable (MonoClass *klass);\n\ngboolean\nmono_class_publish_gc_descriptor (MonoClass *klass, MonoGCDescriptor gc_descr);\n\nvoid\nmono_class_compute_gc_descriptor (MonoClass *klass);\n\n#ifndef DISABLE_REMOTING\nvoid\nmono_class_contextbound_bit_offset (int* byte_offset_out, guint8* mask_out);\n#endif\n\ngboolean\nmono_class_init_checked (MonoClass *klass, MonoError *error);\n\nMONO_LLVM_INTERNAL MonoType*\nmono_class_enum_basetype_internal (MonoClass *klass);\n\ngboolean\nmono_method_is_constructor (MonoMethod *method);\n\ngboolean\nmono_class_has_default_constructor (MonoClass *klass, gboolean public_only);\n\n// There are many ways to do on-demand initialization.\n//   Some allow multiple concurrent initializations. Some do not.\n//   Some allow multiple concurrent writes to the global. Some do not.\n//\n// Booleans or names capturing these factors would be desirable.\n//\tRacyInit?\n//\n// This form allows both such races, on the understanding that,\n// even if the initialization occurs multiple times, every result is equivalent,\n// and the goal is not to initialize no more than once, but for the steady state\n// to stop rerunning the initialization.\n//\n// It may be desirable to replace this with mono_lazy_initialize, etc.\n//\n// These macros cannot be wrapped in do/while as they inject \"name\" into invoking scope.\n//\n#define MONO_STATIC_POINTER_INIT(type, name)\t\t\t\t\t\\\n\tstatic type *static_ ## name;\t\t\t\t\t\t\\\n\ttype *name; \t\t\t\t\t\t\t\t\\\n\tname = static_ ## name;\t\t\t\t\t\t\t\\\n\tif (!name) {\t\t\t\t\t\t\t\t\\\n\t\t/* Custom code here to initialize name */\n#define MONO_STATIC_POINTER_INIT_END(type, name)\t\t\t\t\\\n\t\tif (name) {\t\t\t\t\t\t\t\\\n\t\t\t/* Success, commit to static. */\t\t\t\\\n\t\t\tmono_atomic_store_seq (&static_ ## name, name);\t\t\\\n\t\t}\t\t\t\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\t\t\\\n\nstatic inline gboolean\nm_field_get_offset (MonoClassField *field)\n{\n\tg_assert (m_class_is_fields_inited (field->parent));\n\treturn field->offset;\n}\n\n// Enum and static storage for JIT icalls.\n#include \"jit-icall-reg.h\"\n\n/*Now that everything has been defined, let's include the inline functions */\n#include <mono/metadata/class-inlines.h>\n\n#endif /* __MONO_METADATA_CLASS_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class-private-definition.h",
    "content": "/**\n * \\file Definitions of struct _MonoClass members\n *\n * NOTE: This file should NOT be included directly.\n */\n\n#if defined(MONO_CLASS_DEF_PRIVATE) && !defined(REALLY_INCLUDE_CLASS_DEF)\n#error struct _MonoClass definition should not be accessed directly\n#endif\n\n#ifndef __MONO_METADATA_CLASS_PRIVATE_DEFINITION_H__\n#define __MONO_METADATA_CLASS_PRIVATE_DEFINITION_H__\n\nstruct _MonoClass {\n\t/* element class for arrays and enum basetype for enums */\n\tMonoClass *element_class; \n\t/* used for subtype checks */\n\tMonoClass *cast_class; \n\n\t/* for fast subtype checks */\n\tMonoClass **supertypes;\n\tguint16     idepth;\n\n\t/* array dimension */\n\tguint8     rank;\n\n\t/* One of the values from MonoTypeKind */\n\tguint8     class_kind;\n\n\tint        instance_size; /* object instance size */\n\n\tguint inited          : 1;\n\n\t/* A class contains static and non static data. Static data can be\n\t * of the same type as the class itselfs, but it does not influence\n\t * the instance size of the class. To avoid cyclic calls to \n\t * mono_class_init_internal (from mono_class_instance_size ()) we first\n\t * initialise all non static fields. After that we set size_inited \n\t * to 1, because we know the instance size now. After that we \n\t * initialise all static fields.\n\t */\n\n\t/* ALL BITFIELDS SHOULD BE WRITTEN WHILE HOLDING THE LOADER LOCK */\n\tguint size_inited     : 1;\n\tguint valuetype       : 1; /* derives from System.ValueType */\n\tguint enumtype        : 1; /* derives from System.Enum */\n\tguint blittable       : 1; /* class is blittable */\n\tguint unicode         : 1; /* class uses unicode char when marshalled */\n\tguint wastypebuilder  : 1; /* class was created at runtime from a TypeBuilder */\n\tguint is_array_special_interface : 1; /* gtd or ginst of once of the magic interfaces that arrays implement */\n\tguint is_byreflike    : 1; /* class is a valuetype and has System.Runtime.CompilerServices.IsByRefLikeAttribute */\n\n\t/* next byte */\n\tguint8 min_align;\n\n\t/* next byte */\n\tguint packing_size    : 4;\n\tguint ghcimpl         : 1; /* class has its own GetHashCode impl */ \n\tguint has_finalize    : 1; /* class has its own Finalize impl */ \n#ifndef DISABLE_REMOTING\n\tguint marshalbyref    : 1; /* class is a MarshalByRefObject */\n\tguint contextbound    : 1; /* class is a ContextBoundObject */\n#endif\n\t/* next byte */\n\tguint delegate        : 1; /* class is a Delegate */\n\tguint gc_descr_inited : 1; /* gc_descr is initialized */\n\tguint has_cctor       : 1; /* class has a cctor */\n\tguint has_references  : 1; /* it has GC-tracked references in the instance */\n\tguint has_static_refs : 1; /* it has static fields that are GC-tracked */\n\tguint no_special_static_fields : 1; /* has no thread/context static fields */\n\t/* directly or indirectly derives from ComImport attributed class.\n\t * this means we need to create a proxy for instances of this class\n\t * for COM Interop. set this flag on loading so all we need is a quick check\n\t * during object creation rather than having to traverse supertypes\n\t */\n\tguint is_com_object : 1; \n\tguint nested_classes_inited : 1; /* Whenever nested_class is initialized */\n\n\t/* next byte*/\n\tguint interfaces_inited : 1; /* interfaces is initialized */\n\tguint simd_type : 1; /* class is a simd intrinsic type */\n\tguint has_finalize_inited    : 1; /* has_finalize is initialized */\n\tguint fields_inited : 1; /* setup_fields () has finished */\n\tguint has_failure : 1; /* See mono_class_get_exception_data () for a MonoErrorBoxed with the details */\n\tguint has_weak_fields : 1; /* class has weak reference fields */\n\tguint has_dim_conflicts : 1; /* Class has conflicting default interface methods */\n\n\tMonoClass  *parent;\n\tMonoClass  *nested_in;\n\n\tMonoImage *image;\n\tconst char *name;\n\tconst char *name_space;\n\n\tguint32    type_token;\n\tint        vtable_size; /* number of slots */\n\n\tguint16     interface_count;\n\tguint32     interface_id;        /* unique inderface id (for interfaces) */\n\tguint32     max_interface_id;\n\t\n\tguint16     interface_offsets_count;\n\tMonoClass **interfaces_packed;\n\tguint16    *interface_offsets_packed;\n\tguint8     *interface_bitmap;\n\n\tMonoClass **interfaces;\n\n\tunion _MonoClassSizes sizes;\n\n\t/*\n\t * Field information: Type and location from object base\n\t */\n\tMonoClassField *fields;\n\n\tMonoMethod **methods;\n\n\t/* used as the type of the this argument and when passing the arg by value */\n\tMonoType this_arg;\n\tMonoType _byval_arg;\n\n\tMonoGCDescriptor gc_descr;\n\n\tMonoClassRuntimeInfo *runtime_info;\n\n\t/* Generic vtable. Initialized by a call to mono_class_setup_vtable () */\n\tMonoMethod **vtable;\n\n\t/* Infrequently used items. See class-accessors.c: InfrequentDataKind for what goes into here. */\n\tMonoPropertyBag infrequent_data;\n};\n\nstruct _MonoClassDef {\n\tMonoClass klass;\n\tguint32\tflags;\n\t/*\n\t * From the TypeDef table\n\t */\n\tguint32 first_method_idx;\n\tguint32 first_field_idx;\n\tguint32 method_count, field_count;\n\t/* next element in the class_cache hash list (in MonoImage) */\n\tMonoClass *next_class_cache;\n};\n\nstruct _MonoClassGtd {\n\tMonoClassDef klass;\n\tMonoGenericContainer *generic_container;\n\t/* The canonical GENERICINST where we instantiate a generic type definition with its own generic parameters.*/\n\t/* Suppose we have class T`2<A,B> {...}.  canonical_inst is the GTD T`2 applied to A and B. */\n\tMonoType canonical_inst;\n};\n\nstruct _MonoClassGenericInst {\n\tMonoClass klass;\n\tMonoGenericClass *generic_class;\n};\n\nstruct _MonoClassGenericParam {\n\tMonoClass klass;\n};\n\nstruct _MonoClassArray {\n\tMonoClass klass;\n\tguint32 method_count;\n};\n\nstruct _MonoClassPointer {\n\tMonoClass klass;\n};\n\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/class.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_CLI_CLASS_H_\n#define _MONO_CLI_CLASS_H_\n\n#include <mono/metadata/metadata.h>\n#include <mono/metadata/image.h>\n#include <mono/metadata/loader.h>\n#include <mono/utils/mono-error.h>\n\nMONO_BEGIN_DECLS\n\ntypedef struct MonoVTable MonoVTable;\n\ntypedef struct _MonoClassField MonoClassField;\ntypedef struct _MonoProperty MonoProperty;\ntypedef struct _MonoEvent MonoEvent;\n\ntypedef enum {\n\tMONO_TYPE_NAME_FORMAT_IL,\n\tMONO_TYPE_NAME_FORMAT_REFLECTION,\n\tMONO_TYPE_NAME_FORMAT_FULL_NAME,\n\tMONO_TYPE_NAME_FORMAT_ASSEMBLY_QUALIFIED\n} MonoTypeNameFormat;\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass *\nmono_class_get             (MonoImage *image, uint32_t type_token);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass *\nmono_class_get_full        (MonoImage *image, uint32_t type_token, MonoGenericContext *context);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_class_init            (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoVTable *\nmono_class_vtable          (MonoDomain *domain, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass *\nmono_class_from_name       (MonoImage *image, const char* name_space, const char *name);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass *\nmono_class_from_name_case  (MonoImage *image, const char* name_space, const char *name);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod *\nmono_class_get_method_from_name_flags (MonoClass *klass, const char *name, int param_count, int flags);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass *\nmono_class_from_typeref    (MonoImage *image, uint32_t type_token);\n\nMONO_API MonoClass *\nmono_class_from_typeref_checked (MonoImage *image, uint32_t type_token, MonoError *error);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass *\nmono_class_from_generic_parameter (MonoGenericParam *param, MonoImage *image, mono_bool is_mvar);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoType*\nmono_class_inflate_generic_type (MonoType *type, MonoGenericContext *context) /* MONO_DEPRECATED */;\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMethod*\nmono_class_inflate_generic_method (MonoMethod *method, MonoGenericContext *context);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMethod *\nmono_get_inflated_method (MonoMethod *method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClassField*\nmono_field_from_token      (MonoImage *image, uint32_t token, MonoClass **retklass, MonoGenericContext *context);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass *\nmono_bounded_array_class_get (MonoClass *element_class, uint32_t rank, mono_bool bounded);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass *\nmono_array_class_get       (MonoClass *element_class, uint32_t rank);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass *\nmono_ptr_class_get         (MonoType *type);\n\nMONO_API MonoClassField *\nmono_class_get_field       (MonoClass *klass, uint32_t field_token);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClassField *\nmono_class_get_field_from_name (MonoClass *klass, const char *name);\n\nMONO_API uint32_t\nmono_class_get_field_token (MonoClassField *field);\n\nMONO_API uint32_t\nmono_class_get_event_token (MonoEvent *event);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoProperty *\nmono_class_get_property_from_name (MonoClass *klass, const char *name);\n\nMONO_API uint32_t\nmono_class_get_property_token (MonoProperty *prop);\n\nMONO_API int32_t\nmono_array_element_size    (MonoClass *ac);\n\nMONO_API int32_t\nmono_class_instance_size   (MonoClass *klass);\n\nMONO_API int32_t\nmono_class_array_element_size (MonoClass *klass);\n\nMONO_API int32_t\nmono_class_data_size       (MonoClass *klass);\n\nMONO_API int32_t\nmono_class_value_size      (MonoClass *klass, uint32_t *align);\n\nMONO_API int32_t\nmono_class_min_align       (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass *\nmono_class_from_mono_type  (MonoType *type);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, \n\t\t\t\t\t\t   mono_bool check_interfaces);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid*\nmono_ldtoken               (MonoImage *image, uint32_t token, MonoClass **retclass, MonoGenericContext *context);\n\nMONO_API char *\nmono_type_get_name_full (MonoType *type, MonoTypeNameFormat format);\n\nMONO_API char*         \nmono_type_get_name         (MonoType *type);\n\nMONO_API MonoType*\nmono_type_get_underlying_type (MonoType *type);\n\n/* MonoClass accessors */\nMONO_API MonoImage*\nmono_class_get_image         (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass*\nmono_class_get_element_class (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nmono_bool\nmono_class_is_valuetype      (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nmono_bool\nmono_class_is_enum          (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoType*\nmono_class_enum_basetype    (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass*\nmono_class_get_parent        (MonoClass *klass);\n\nMONO_API MonoClass*\nmono_class_get_nesting_type  (MonoClass *klass);\n\nMONO_API int\nmono_class_get_rank          (MonoClass *klass);\n\nMONO_API uint32_t\nmono_class_get_flags         (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nconst char*\nmono_class_get_name          (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nconst char*\nmono_class_get_namespace     (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoType*\nmono_class_get_type          (MonoClass *klass);\n\nMONO_API uint32_t\nmono_class_get_type_token    (MonoClass *klass);\n\nMONO_API MonoType*\nmono_class_get_byref_type    (MonoClass *klass);\n\nMONO_API int\nmono_class_num_fields        (MonoClass *klass);\n\nMONO_API int\nmono_class_num_methods       (MonoClass *klass);\n\nMONO_API int\nmono_class_num_properties    (MonoClass *klass);\n\nMONO_API int\nmono_class_num_events        (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClassField*\nmono_class_get_fields        (MonoClass* klass, void **iter);\n\nMONO_API MonoMethod*\nmono_class_get_methods       (MonoClass* klass, void **iter);\n\nMONO_API MonoProperty*\nmono_class_get_properties    (MonoClass* klass, void **iter);\n\nMONO_API MonoEvent*\nmono_class_get_events        (MonoClass* klass, void **iter);\n\nMONO_API MonoClass*\nmono_class_get_interfaces    (MonoClass* klass, void **iter);\n\nMONO_API MonoClass*\nmono_class_get_nested_types  (MonoClass* klass, void **iter);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nmono_bool\nmono_class_is_delegate       (MonoClass* klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_class_implements_interface (MonoClass* klass, MonoClass* iface);\n\n/* MonoClassField accessors */\nMONO_API const char*\nmono_field_get_name   (MonoClassField *field);\n\nMONO_API MonoType*\nmono_field_get_type   (MonoClassField *field);\n\nMONO_API MonoClass*\nmono_field_get_parent (MonoClassField *field);\n\nMONO_API uint32_t\nmono_field_get_flags  (MonoClassField *field);\n\nMONO_API uint32_t\nmono_field_get_offset  (MonoClassField *field);\n\nMONO_API const char *\nmono_field_get_data  (MonoClassField *field);\n\n/* MonoProperty acessors */\nMONO_API const char*\nmono_property_get_name       (MonoProperty *prop);\n\nMONO_API MonoMethod*\nmono_property_get_set_method (MonoProperty *prop);\n\nMONO_API MonoMethod*\nmono_property_get_get_method (MonoProperty *prop);\n\nMONO_API MonoClass*\nmono_property_get_parent     (MonoProperty *prop);\n\nMONO_API uint32_t\nmono_property_get_flags      (MonoProperty *prop);\n\n/* MonoEvent accessors */\nMONO_API const char*\nmono_event_get_name          (MonoEvent *event);\n\nMONO_API MonoMethod*\nmono_event_get_add_method    (MonoEvent *event);\n\nMONO_API MonoMethod*\nmono_event_get_remove_method (MonoEvent *event);\n\nMONO_API MonoMethod*\nmono_event_get_remove_method (MonoEvent *event);\n\nMONO_API MonoMethod*\nmono_event_get_raise_method  (MonoEvent *event);\n\nMONO_API MonoClass*\nmono_event_get_parent        (MonoEvent *event);\n\nMONO_API uint32_t\nmono_event_get_flags         (MonoEvent *event);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod *\nmono_class_get_method_from_name (MonoClass *klass, const char *name, int param_count);\n\nMONO_API char *\nmono_class_name_from_token (MonoImage *image, uint32_t type_token);\n\nMONO_API mono_bool\nmono_method_can_access_field (MonoMethod *method, MonoClassField *field);\n\nMONO_API mono_bool\nmono_method_can_access_method (MonoMethod *method, MonoMethod *called);\n\nMONO_API mono_bool\nmono_class_is_nullable (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass*\nmono_class_get_nullable_param (MonoClass *klass);\n\nMONO_END_DECLS\n\n#endif /* _MONO_CLI_CLASS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/cominterop-win32-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_COMINTEROP_WIN32_INTERNALS_H__\n#define __MONO_METADATA_COMINTEROP_WIN32_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n// On some Windows platforms the implementation of below methods are hosted\n// in separate source files like cominterop-win32-*.c. On other platforms,\n// the implementation is kept in cominterop.c and declared as static and in some\n// cases even inline.\n#if defined(HOST_WIN32) && !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT)\n\nguint32\nmono_marshal_win_safearray_get_dim (gpointer safearray);\n\nint\nmono_marshal_win_safe_array_get_lbound (gpointer psa, guint nDim, glong* plLbound);\n\nint\nmono_marshal_win_safe_array_get_ubound (gpointer psa, guint nDim, glong* plUbound);\n\nint\nmono_marshal_win_safearray_get_value (gpointer safearray, gpointer indices, gpointer *result);\n\nvoid\nmono_marshal_win_safearray_end (gpointer safearray, gpointer indices);\n\ngboolean\nmono_marshal_win_safearray_create_internal (UINT cDims, SAFEARRAYBOUND *rgsabound, gpointer *newsafearray);\n\nint\nmono_marshal_win_safearray_set_value (gpointer safearray, gpointer indices, gpointer value);\n\n#endif /* HOST_WIN32 && !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT) */\n\n#endif /* __MONO_METADATA_COMINTEROP_WIN32_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/cominterop.h",
    "content": "/**\n * \\file\n * COM Interop Support\n * \n *\n * (C) 2002 Ximian, Inc.  http://www.ximian.com\n *\n */\n\n#ifndef __MONO_COMINTEROP_H__\n#define __MONO_COMINTEROP_H__\n\n#include <mono/metadata/method-builder.h>\n#include <mono/metadata/method-builder-ilgen.h>\n#include <mono/metadata/marshal.h>\n\nvoid\nmono_cominterop_init (void);\n\nvoid\nmono_cominterop_cleanup (void);\n\nvoid\nmono_mb_emit_cominterop_get_function_pointer (MonoMethodBuilder *mb, MonoMethod* method);\n\nvoid\nmono_mb_emit_cominterop_call_function_pointer (MonoMethodBuilder *mb, MonoMethodSignature *sig);\n\nvoid\nmono_mb_emit_cominterop_call (MonoMethodBuilder *mb, MonoMethodSignature *sig, MonoMethod* method);\n\nvoid\nmono_cominterop_emit_ptr_to_object_conv (MonoMethodBuilder *mb, MonoType *type, MonoMarshalConv conv, MonoMarshalSpec *mspec);\n\nvoid\nmono_cominterop_emit_object_to_ptr_conv (MonoMethodBuilder *mb, MonoType *type, MonoMarshalConv conv, MonoMarshalSpec *mspec);\n\nMonoMethod *\nmono_cominterop_get_native_wrapper (MonoMethod *method);\n\nMonoMethod *\nmono_cominterop_get_invoke (MonoMethod *method);\n\nint\nmono_cominterop_emit_marshal_com_interface (EmitMarshalContext *m, int argnum, \n\t\t\t\t\t\t\t\t\t\t\tMonoType *t,\n\t\t\t\t\t\t\t\t\t\t\tMonoMarshalSpec *spec, \n\t\t\t\t\t\t\t\t\t\t\tint conv_arg, MonoType **conv_arg_type, \n\t\t\t\t\t\t\t\t\t\t\tMarshalAction action);\n\nint\nmono_cominterop_emit_marshal_safearray (EmitMarshalContext *m, int argnum,\n\t\t\t\t\t\t\t\t\t\tMonoType *t,\n\t\t\t\t\t\t\t\t\t\tMonoMarshalSpec *spec, \n\t\t\t\t\t\t\t\t\t\tint conv_arg, MonoType **conv_arg_type,\n\t\t\t\t\t\t\t\t\t\tMarshalAction action);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoString *\nmono_string_from_bstr (/*mono_bstr*/gpointer bstr);\n\nMONO_API void \nmono_free_bstr (/*mono_bstr_const*/gpointer bstr);\n\nMonoClass*\nmono_class_try_get_com_object_class (void);\n\nvoid*\nmono_cominterop_get_com_interface (MonoObject* object, MonoClass* ic, MonoError *error);\n\ngboolean\nmono_cominterop_is_interface (MonoClass* klass);\n\n#endif /* __MONO_COMINTEROP_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/console-io.h",
    "content": "/**\n * \\file\n * Console IO internal calls\n *\n * Author:\n *\tGonzalo Paniagua Javier (gonzalo@ximian.com)\n *\n * Copyright (c) 2005 Novell, Inc. (http://www.novell.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_METADATA_CONSOLEIO_H\n#define _MONO_METADATA_CONSOLEIO_H\n\n#include <config.h>\n#include <glib.h>\n\n#include <mono/metadata/object.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/metadata/icalls.h>\n\nvoid mono_console_init (void);\nvoid mono_console_handle_async_ops (void);\n\n#endif /* _MONO_METADATA_CONSOLEIO_H */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/console-win32-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_CONSOLE_WIN32_INTERNALS_H__\n#define __MONO_CONSOLE_WIN32_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n#include \"mono/metadata/object.h\"\n#include \"mono/metadata/object-internals.h\"\n#include \"mono/utils/mono-error.h\"\n#include \"mono/utils/mono-error-internals.h\"\n#include <mono/metadata/console-io.h>\n\n#endif /* __MONO_CONSOLE_WIN32_INTERNALS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/coree-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_COREE_INTERNALS_H__\n#define __MONO_COREE_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n#include <windows.h>\n\nBOOL STDMETHODCALLTYPE\n_CorDllMain (HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved);\n\n__int32 STDMETHODCALLTYPE\n_CorExeMain (void);\n\nvoid STDMETHODCALLTYPE\nCorExitProcess (int exitCode);\n\nSTDAPI\n_CorValidateImage (PVOID *ImageBase, LPCWSTR FileName);\n\nSTDAPI_(VOID)\n_CorImageUnloading (PVOID ImageBase);\n\nSTDAPI\nCorBindToRuntimeEx (LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor,\n\t\t    DWORD startupFlags, REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv);\n\nSTDAPI\nCorBindToRuntime (LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor,\n\t\t  REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv);\n\nHMODULE WINAPI\nMonoLoadImage (LPCWSTR FileName);\n\nvoid mono_coree_set_act_ctx (const char *file_name);\n#endif /* HOST_WIN32 */\n\n#endif /* __MONO_COREE_INTERNALS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/coree.h",
    "content": "/**\n * \\file\n * mscoree.dll functions\n *\n * Author:\n *   Kornel Pal <http://www.kornelpal.hu/>\n *\n * Copyright (C) 2008 Kornel Pal\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_COREE_H__\n#define __MONO_COREE_H__\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/w32api.h>\n#include \"image.h\"\n#include \"image-internals.h\"\n\n#define STATUS_SUCCESS 0x00000000L\n#define STATUS_INVALID_IMAGE_FORMAT 0xC000007BL\n\nMONO_API HRESULT STDAPICALLTYPE MonoFixupCorEE(HMODULE ModuleHandle);\n\n/* Defined by the linker. */\n#ifndef _MSC_VER\n#ifdef __MINGW64_VERSION_MAJOR\n#define __ImageBase __MINGW_LSYMBOL(_image_base__)\n#else\n#define __ImageBase _image_base__\n#endif\n#endif\nG_BEGIN_DECLS extern IMAGE_DOS_HEADER __ImageBase; G_END_DECLS\nextern HMODULE coree_module_handle;\n\nHMODULE WINAPI MonoLoadImage(LPCWSTR FileName);\nSTDAPI MonoFixupExe(HMODULE ModuleHandle);\n\ngchar* mono_get_module_file_name (HMODULE module_handle);\nvoid mono_load_coree (const char* file_name);\nvoid mono_fixup_exe_image (MonoImage* image);\n\n/* Declared in image.c. */\nMonoImage* mono_image_open_from_module_handle (MonoAssemblyLoadContext *alc, HMODULE module_handle, char* fname, gboolean has_entry_point, MonoImageOpenStatus* status);\n\n#endif /* HOST_WIN32 */\n\n#endif /* __MONO_COREE_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/culture-info-tables.h",
    "content": "\n/* This is a generated file. Do not edit. See tools/locale-builder. */\n#ifndef MONO_METADATA_CULTURE_INFO_TABLES\n#define MONO_METADATA_CULTURE_INFO_TABLES 1\n\n\n#define NUM_CULTURE_ENTRIES 341\n#define NUM_REGION_ENTRIES 136\n\n\nstatic const DateTimeFormatEntry datetime_format_entries [] = {\n\t{1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, 0, 6, 1, 3, {9,18,0,0,0,0,0,0,0,0,0,0,0,0},{29,42,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 5, 8, {177, 190, 211, 226, 237, 256, 267}, {280, 285, 290, 295, 300, 305, 310}, {315, 318, 321, 324, 327, 318, 324}, {330, 343, 360, 369, 380, 387, 394, 401, 414, 433, 450, 465, 0}, {330, 343, 360, 369, 380, 387, 394, 401, 414, 433, 450, 465, 0}, {482, 489, 360, 496, 380, 387, 394, 503, 510, 517, 524, 531, 0}, {482, 489, 360, 496, 380, 387, 394, 503, 510, 517, 524, 531, 0}, 2, 1, 11, 3, {116,131,147,163,0,0,0,0,0,0,0,0,0,0},{180,199,217,242,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{279,0,0,0,0,0,0,0}},\n\t{109, 13, 19, {538, 547, 555, 563, 572, 579, 589}, {598, 602, 606, 610, 614, 618, 622}, {626, 629, 632, 635, 638, 641, 644}, {647, 653, 660, 666, 672, 677, 682, 689, 695, 704, 712, 721, 0}, {730, 739, 749, 758, 768, 776, 784, 794, 804, 816, 828, 840, 0}, {852, 857, 660, 863, 672, 677, 868, 873, 877, 882, 887, 892, 0}, {852, 857, 660, 863, 672, 677, 868, 873, 877, 882, 887, 892, 0}, 2, 1, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{315,338,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {967, 974, 981, 988, 995, 1002, 1009}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {379,388,397,406,417,428,439,446,453,460,0,0,0,0},{469,491,519,547,562,0,0,0,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {967, 974, 981, 988, 995, 1002, 1009}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {379,388,397,406,417,428,439,446,453,460,0,0,0,0},{469,491,519,547,562,0,0,0,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{673, 39, 44, {1197, 1205, 1215, 1223, 1231, 1240, 1247}, {1254, 1257, 1260, 1264, 1267, 1271, 1275}, {1278, 1280, 1282, 1285, 1287, 1280, 1285}, {1290, 1296, 1302, 1310, 1316, 1324, 1332, 1342, 1348, 1356, 1364, 1373, 0}, {1382, 1388, 1395, 1403, 1409, 1417, 1425, 1435, 1348, 1441, 1449, 1459, 0}, {1468, 1472, 1477, 1482, 1486, 1491, 1496, 1501, 1505, 1511, 1517, 1521, 0}, {1468, 1472, 1477, 1482, 1486, 1491, 1496, 1501, 1505, 1511, 1517, 1521, 0}, 2, 1, 11, 3, {681,692,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {1525, 1533, 1540, 1548, 1555, 1563, 1570}, {1578, 1583, 1587, 1591, 1595, 1599, 1603}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 1633, 1639, 1645, 1649, 1654, 1659, 1666, 1676, 1684, 1693, 0}, {1618, 1625, 1633, 1639, 1645, 1649, 1654, 1659, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {744,755,417,764,0,0,0,0,0,0,0,0,0,0},{721,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 57, 63, {1747, 1755, 1762, 1771, 1780, 1791, 1799}, {1807, 1810, 1813, 1816, 1819, 1822, 1825}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {681,775,417,784,0,0,0,0,0,0,0,0,0,0},{798,721,817,0,0,0,0,0,0,0},{71,830,0,0,0,0,0,0,0,0,0,0},{89,842,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 70, 77, {1959, 1974, 1989, 2000, 2015, 2028, 2047}, {2062, 2069, 2076, 2083, 2090, 2097, 2104}, {2111, 2114, 2117, 2117, 2120, 2120, 2123}, {2126, 2147, 2170, 2185, 2202, 2213, 2228, 2243, 2262, 2285, 2304, 2323, 0}, {2344, 2365, 2388, 2403, 2420, 2431, 2446, 2461, 2480, 2503, 2522, 2541, 0}, {2562, 2569, 2576, 2583, 2590, 2597, 2606, 2615, 2622, 2629, 2636, 2643, 0}, {2562, 2569, 2576, 2583, 2590, 2597, 2606, 2615, 2622, 2629, 2636, 2643, 0}, 2, 1, 1, 3, {295,18,857,9,864,417,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {932,941,948,957,460,417,968,0,0,0,0,0,0,0},{978,997,1010,1029,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1042, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 2890, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, 0, 1, 1, 3, {18,9,1054,857,1062,755,775,417,0,0,0,0,0,0},{1069,1097,1124,0,0,0,0,0,0,0},{266,71,1146,1151,1157,0,0,0,0,0,0,0},{271,89,1165,1173,1182,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{673, 84, 88, {2997, 3009, 3021, 3031, 3045, 3055, 3067}, {3078, 3081, 3084, 3087, 3090, 3093, 3096}, {1285, 1608, 1610, 3099, 1610, 1280, 1616}, {3101, 3110, 3119, 3129, 3138, 3147, 3156, 3166, 3173, 3181, 3189, 3199, 0}, {3208, 3219, 3230, 3242, 3253, 3264, 3275, 3287, 3296, 3306, 3316, 3328, 0}, {3339, 3345, 3351, 3358, 3364, 3370, 3376, 3383, 3387, 3392, 3397, 3404, 0}, {3339, 3345, 3351, 3358, 3364, 3370, 3376, 3383, 3387, 3392, 3397, 3404, 0}, 2, 1, 11, 11, {1208,0,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{1146,0,0,0,0,0,0,0,0,0,0,0},{1165,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 1, 1, 3, {18,9,775,755,417,0,0,0,0,0,0,0,0,0},{1217,894,1234,0,0,0,0,0,0,0},{71,266,1151,1243,1253,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 92, 105, {3596, 3614, 3628, 3646, 3664, 3682, 3698}, {3712, 3724, 3736, 3748, 3760, 3772, 3784}, {3791, 3796, 3801, 3806, 3811, 3816, 3821}, {3826, 3837, 3850, 3857, 3868, 3875, 3884, 3893, 3906, 3919, 3934, 3947, 0}, {3826, 3837, 3850, 3857, 3868, 3875, 3884, 3893, 3906, 3919, 3934, 3947, 0}, {3958, 3967, 3850, 3976, 3868, 3875, 3884, 3985, 3994, 4003, 4012, 4021, 0}, {3958, 3967, 3850, 3976, 3868, 3875, 3884, 3985, 3994, 4003, 4012, 4021, 0}, 0, 0, 1, 3, {18,1261,9,29,755,744,1274,417,1287,1304,0,0,0,0},{1314,1261,1332,1354,1287,0,0,0,0,0},{71,62,0,0,0,0,0,0,0,0,0,0},{89,77,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1375, 116, 120, {4030, 4040, 4048, 4053, 4060, 4073, 4081}, {2894, 4089, 3099, 4091, 4095, 1280, 4098}, {2894, 4089, 3099, 4102, 4095, 1280, 4102}, {4105, 4113, 4122, 4131, 4140, 4147, 4155, 4163, 4173, 4184, 1684, 1693, 0}, {4105, 4113, 4122, 4131, 4140, 4147, 4155, 4163, 4173, 4184, 1684, 1693, 0}, {1702, 857, 4193, 4200, 4206, 4212, 4218, 1727, 4224, 1737, 887, 1742, 0}, {1702, 857, 4193, 4200, 4206, 4212, 4218, 1727, 4224, 1737, 887, 1742, 0}, 2, 1, 124, 3, {1383,1397,0,0,0,0,0,0,0,0,0,0,0,0},{1410,1430,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{1444,0,0,0,0,0,0,0}},\n\t{673, 127, 132, {4231, 4242, 4253, 4267, 4281, 4293, 4305}, {4317, 4322, 4328, 4334, 4340, 4345, 4351}, {1285, 1608, 4356, 1608, 1614, 1614, 1616}, {4359, 4367, 3504, 4376, 4383, 4388, 4395, 4402, 1666, 4184, 4410, 4420, 0}, {4359, 4367, 3504, 4376, 4383, 4388, 4395, 4402, 1666, 4184, 4410, 4420, 0}, {1702, 1707, 1712, 1717, 4383, 4212, 4218, 4429, 1732, 1737, 4436, 892, 0}, {1702, 1707, 1712, 1717, 4383, 4212, 4218, 4429, 1732, 1737, 4436, 892, 0}, 2, 1, 11, 3, {1208,1455,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {4442, 4451, 4459, 4468, 4479, 4488, 4497}, {4504, 4508, 4512, 4516, 4520, 4524, 4528}, {1828, 1616, 1608, 1608, 4532, 2894, 1285}, {4534, 4542, 2910, 4551, 4558, 4565, 4572, 2933, 4579, 4589, 712, 4597, 0}, {4534, 4542, 2910, 4551, 4558, 4565, 4572, 2933, 4579, 4589, 712, 4597, 0}, {4606, 4610, 4512, 4614, 4618, 4622, 4626, 4630, 4634, 4638, 4642, 4646, 0}, {4606, 4610, 4512, 4614, 4618, 4622, 4626, 4630, 4634, 4638, 4642, 4646, 0}, 2, 1, 1, 3, {18,864,9,1467,857,0,0,0,0,0,0,0,0,0},{1217,1475,894,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{370, 137, 144, {4650, 4660, 4670, 4680, 4690, 4700, 4710}, {1016, 4720, 4724, 4728, 4732, 4736, 4740}, {1016, 4720, 4724, 4728, 4732, 4736, 4740}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, 0, 0, 1, 3, {406,460,439,379,417,0,0,0,0,0,0,0,0,0},{469,1484,1508,1535,1564,1588,1617,1637,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{623,1662,652,0,0,0,0,0}},\n\t{1680, 151, 158, {4771, 4781, 4791, 4801, 4811, 4821, 4831}, {4841, 4845, 4849, 4853, 4857, 4861, 4865}, {4841, 4845, 4849, 4853, 4857, 4861, 4865}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, 0, 0, 55, 3, {417,1690,446,388,0,0,0,0,0,0,0,0,0,0},{1699,1728,1752,1779,1801,1832,1858,1889,1915,1942},{583,591,266,71,0,0,0,0,0,0,0,0},{600,611,271,89,0,0,0,0,0},{1964,1981,2000,0,0,0,0,0}},\n\t{109, 165, 170, {4932, 4939, 4947, 4955, 4964, 4974, 4982}, {4991, 3081, 4994, 4997, 5000, 5003, 5006}, {5009, 1608, 1828, 2735, 1828, 2894, 5009}, {5011, 5019, 5028, 1639, 5034, 1649, 1654, 5038, 1666, 1676, 1684, 1693, 0}, {5011, 5019, 5028, 1639, 5034, 1649, 1654, 5038, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 5047, 1717, 5034, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 5047, 1717, 5034, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {2015,1062,755,9,775,2024,417,0,0,0,0,0,0,0},{1217,1475,894,1234,0,0,0,0,0,0},{71,266,1146,2036,2048,0,0,0,0,0,0,0},{89,271,2060,2075,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{2090, 165, 170, {1525, 1533, 1540, 1548, 1555, 1563, 1570}, {5052, 5058, 5063, 5068, 5073, 5078, 5083}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 0, 0, 11, 11, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {5117, 5127, 5141, 5148, 5155, 5164, 1247}, {5172, 5179, 5184, 5188, 5193, 5198, 5202}, {1278, 1280, 2735, 5207, 5210, 1280, 1285}, {5212, 5221, 5226, 5233, 1645, 5243, 5252, 5259, 5269, 5279, 1364, 5292, 0}, {5302, 5311, 5318, 5324, 5333, 5338, 5346, 5352, 5361, 5371, 5385, 5395, 0}, {5403, 5407, 4512, 5411, 1645, 5415, 5419, 5423, 5427, 5431, 1517, 5436, 0}, {5403, 5407, 4512, 5411, 1645, 5415, 5419, 5423, 5427, 5431, 1517, 5436, 0}, 2, 1, 11, 3, {681,0,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1042, 49, 52, {2803, 5440, 5454, 5467, 5480, 5493, 2850}, {4504, 5505, 5509, 5513, 5517, 5521, 5525}, {1828, 1285, 1610, 5530, 5530, 1285, 1285}, {5532, 5540, 5550, 666, 5557, 5562, 5568, 2933, 5574, 5583, 5591, 5600, 0}, {5532, 5540, 5550, 666, 5557, 5562, 5568, 2933, 5574, 5583, 5591, 5600, 0}, {5089, 5609, 4512, 5613, 3515, 5093, 5097, 4630, 4634, 5617, 4642, 5621, 0}, {5089, 5609, 4512, 5613, 3515, 5093, 5097, 4630, 4634, 5617, 4642, 5621, 0}, 0, 0, 1, 3, {18,9,295,857,755,744,1062,2015,775,681,2024,2098,1208,417},{1069,1124,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {5625, 5634, 3425, 5644, 5652, 5660, 5669}, {5675, 5678, 3081, 5682, 5685, 5689, 1275}, {1828, 4532, 1608, 1608, 4532, 2894, 1285}, {5692, 5700, 3504, 5707, 5714, 5719, 5729, 5737, 5743, 5753, 1684, 1693, 0}, {5692, 5700, 3504, 5707, 5714, 5719, 5729, 5737, 5743, 5753, 1684, 1693, 0}, {5761, 5768, 3504, 3579, 5714, 5774, 5781, 5737, 5786, 882, 887, 1742, 0}, {5761, 5768, 3504, 3579, 5714, 5774, 5781, 5737, 5786, 882, 887, 1742, 0}, 2, 1, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{2105,2134,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {5792, 5802, 5807, 5814, 5823, 5827, 5834}, {5845, 2863, 1712, 5850, 5823, 5855, 5860}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {5866, 5875, 5885, 5892, 3515, 5900, 5906, 1659, 5912, 5923, 5933, 5943, 0}, {5866, 5875, 5885, 5892, 3515, 5900, 5906, 1659, 5912, 5923, 5933, 5943, 0}, {5953, 1707, 1712, 1717, 3515, 5958, 5963, 1727, 2986, 882, 887, 1742, 0}, {5953, 1707, 1712, 1717, 3515, 5958, 5963, 1727, 2986, 882, 887, 1742, 0}, 0, 1, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 175, 180, {5968, 5991, 211, 6014, 6025, 6040, 6055}, {6070, 285, 290, 295, 300, 305, 310}, {6075, 6078, 6075, 6081, 6084, 6078, 6081}, {6087, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {6206, 6219, 6234, 6245, 6258, 6265, 6274, 6283, 6298, 6315, 6330, 6343, 0}, {6358, 6366, 360, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, {6358, 6366, 360, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, 0, 1, 11, 3, {681,775,2098,744,9,0,0,0,0,0,0,0,0,0},{199,180,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {6428, 6437, 6449, 6456, 6464, 6474, 6480}, {6487, 6491, 6495, 6499, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {6527, 6537, 6546, 6554, 6562, 6570, 6577, 6584, 6592, 1364, 6598, 6606, 0}, {6615, 6625, 6634, 6642, 6650, 6658, 6665, 6672, 6681, 5385, 6687, 6697, 0}, {6706, 6710, 6715, 6720, 6724, 5419, 1501, 6728, 6732, 1517, 6736, 1521, 0}, {6706, 6710, 6715, 6720, 6724, 5419, 1501, 6728, 6732, 1517, 6736, 1521, 0}, 0, 1, 11, 3, {2151,2161,2169,2181,2193,2203,2213,417,0,0,0,0,0,0},{2225,2239,2254,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {6740, 6748, 6757, 6764, 6771, 6780, 1247}, {1254, 1257, 6787, 1264, 6790, 6794, 1275}, {6516, 6518, 6520, 6522, 6797, 6518, 6522}, {4105, 4113, 6800, 4376, 6806, 6811, 6816, 1659, 1666, 4184, 1684, 1693, 0}, {6821, 6830, 5318, 6840, 6848, 6854, 6860, 6866, 6874, 6884, 6893, 6902, 0}, {5089, 4610, 4512, 4614, 6806, 6811, 6816, 5101, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 6806, 6811, 6816, 5101, 5105, 5109, 4642, 6911, 0}, 2, 1, 11, 3, {681,692,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 185, 197, {6915, 6922, 6931, 6940, 6952, 6960, 6969}, {6979, 6983, 2791, 6988, 6993, 6997, 7001}, {1828, 4089, 1608, 1608, 7005, 1280, 1285}, {7007, 7013, 7020, 7025, 7031, 7035, 7043, 7050, 7056, 7064, 7070, 7078, 0}, {7086, 7092, 3504, 7099, 1645, 7105, 7113, 7120, 7126, 7134, 7140, 7148, 0}, {1914, 7156, 2791, 7160, 7031, 7164, 7168, 7172, 7001, 7176, 7180, 7185, 0}, {1914, 7156, 2791, 7160, 7031, 7164, 7168, 7172, 7001, 7176, 7180, 7185, 0}, 0, 1, 11, 3, {1208,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{2274, 208, 211, {7189, 7197, 7205, 1548, 1555, 1563, 7212}, {7220, 7225, 7230, 1591, 7234, 1599, 7239}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {5011, 5019, 3504, 1639, 1645, 1649, 1654, 7244, 1666, 1676, 1684, 1693, 0}, {5011, 5019, 3504, 1639, 1645, 1649, 1654, 7244, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 3504, 1717, 1645, 1649, 1654, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 3504, 1717, 1645, 1649, 1654, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {417,1690,0,0,0,0,0,0,0,0,0,0,0,0},{2287,2305,0,0,0,0,0,0,0,0},{71,266,2328,0,0,0,0,0,0,0,0,0},{89,271,2338,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, 0, 0, 1, 3, {295,857,9,18,304,2351,417,0,0,0,0,0,0,0},{894,2363,2379,0,0,0,0,0,0,0},{266,71,906,62,0,0,0,0,0,0,0,0},{271,89,914,77,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 214, 219, {7252, 7258, 7268, 7274, 7285, 7295, 7300}, {7310, 7314, 7318, 7322, 7327, 7331, 7335}, {1280, 1280, 1285, 7339, 1280, 5210, 5210}, {7342, 7347, 7354, 7359, 7365, 7372, 7380, 7387, 7396, 7403, 7408, 7415, 0}, {7342, 7347, 7354, 7359, 7365, 7372, 7380, 7387, 7396, 7403, 7408, 7415, 0}, {7423, 7427, 2791, 7432, 2760, 7436, 7440, 7444, 7449, 7453, 7457, 7461, 0}, {7423, 7427, 2791, 7432, 2760, 7436, 7440, 7444, 7449, 7453, 7457, 7461, 0}, 0, 1, 11, 3, {2421,304,0,0,0,0,0,0,0,0,0,0,0,0},{2431,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {7465, 7476, 7489, 7498, 7505, 7518, 7527}, {7465, 7476, 7489, 7498, 7505, 7518, 7527}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, 0, 0, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {7660, 7667, 7673, 7680, 7685, 7691, 7697}, {7703, 7707, 7711, 7715, 7719, 7723, 7727}, {1608, 1285, 1285, 7731, 3099, 2892, 1285}, {7733, 7741, 7750, 1851, 7756, 1861, 1866, 7760, 1878, 1888, 1896, 7768, 0}, {7733, 7741, 7750, 1851, 7756, 1861, 1866, 7760, 1878, 1888, 1896, 7768, 0}, {1914, 1918, 2791, 1927, 7756, 1931, 1935, 7777, 1943, 1947, 1951, 7781, 0}, {1914, 1918, 2791, 1927, 7756, 1931, 1935, 7777, 1943, 1947, 1951, 7781, 0}, 0, 0, 1, 11, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{2462,894,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 223, 228, {7785, 7798, 7817, 7834, 7847, 7860, 7877}, {280, 285, 290, 295, 300, 305, 310}, {7890, 6078, 6075, 6081, 6084, 6078, 6081}, {7893, 7906, 7917, 7934, 7949, 7964, 7979, 7992, 8007, 8024, 8039, 8056, 0}, {8071, 8082, 8095, 8110, 8123, 8136, 8149, 8160, 8173, 8188, 8201, 8220, 0}, {8233, 8240, 8247, 8254, 8261, 8268, 8275, 8282, 8289, 8296, 8303, 8310, 0}, {8233, 8240, 8247, 8254, 8261, 8268, 8275, 8282, 8289, 8296, 8303, 8310, 0}, 0, 1, 11, 3, {681,775,417,0,0,0,0,0,0,0,0,0,0,0},{2481,0,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{2499,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {8317, 8332, 8353, 8368, 8381, 8394, 7877}, {280, 285, 8409, 295, 8414, 305, 310}, {315, 318, 8419, 324, 327, 318, 324}, {8422, 8439, 8448, 8463, 380, 8480, 8495, 8508, 8523, 8540, 8561, 8578, 0}, {8593, 8610, 8623, 8640, 6258, 8659, 8674, 8687, 8700, 8715, 8738, 8757, 0}, {8770, 8240, 8777, 8784, 380, 8791, 8798, 8805, 8289, 8812, 8819, 8826, 0}, {8770, 8240, 8777, 8784, 380, 8791, 8798, 8805, 8289, 8812, 8819, 8826, 0}, 0, 1, 11, 3, {775,0,0,0,0,0,0,0,0,0,0,0,0,0},{894,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{2515,0,0,0,0,0,0,0}},\n\t{673, 39, 233, {8833, 8841, 8852, 8858, 8864, 8873, 1247}, {8879, 5179, 5073, 8884, 8889, 8895, 5202}, {6516, 6518, 8900, 6522, 6524, 6518, 6522}, {1618, 1625, 6800, 1639, 1645, 8902, 8908, 8914, 1666, 1676, 1684, 1693, 0}, {1618, 1625, 6800, 1639, 1645, 8902, 8908, 8914, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 8921, 1732, 1737, 887, 1742, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 8921, 1732, 1737, 887, 1742, 0}, 0, 1, 124, 3, {2529,1455,0,0,0,0,0,0,0,0,0,0,0,0},{2541,2561,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {8926, 8937, 8948, 8959, 8970, 8981, 8987}, {1280, 7005, 1610, 3099, 1278, 7731, 1616}, {1280, 7005, 1610, 3099, 1278, 7731, 1616}, {8996, 9004, 9013, 9020, 3515, 9027, 9033, 1659, 1666, 9039, 1684, 9048, 0}, {8996, 9004, 9013, 9020, 3515, 9027, 9033, 1659, 1666, 9039, 1684, 9048, 0}, {9058, 9063, 9013, 4614, 3515, 9027, 9033, 5101, 9069, 5109, 4642, 9074, 0}, {9058, 9063, 9013, 4614, 3515, 9027, 9033, 5101, 9069, 5109, 4642, 9074, 0}, 2, 1, 11, 3, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{2575,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 238, 248, {9079, 9090, 9100, 9109, 9120, 9132, 9143}, {9153, 9161, 9168, 9174, 9182, 9191, 9199}, {1285, 1280, 1612, 1610, 5210, 1280, 1285}, {9206, 9216, 1633, 9227, 9236, 9242, 9250, 9258, 9266, 9277, 9286, 9296, 0}, {9206, 9216, 1633, 9227, 9236, 9242, 9250, 9258, 9266, 9277, 9286, 9296, 0}, {3566, 857, 1633, 1717, 9236, 9306, 9312, 1727, 2986, 1737, 887, 1742, 0}, {3566, 857, 1633, 1717, 9236, 9306, 9312, 1727, 2986, 1737, 887, 1742, 0}, 0, 1, 11, 3, {681,2583,0,0,0,0,0,0,0,0,0,0,0,0},{2603,2630,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2651,0,0,0,0,0,0,0}},\n\t{925, 255, 266, {9318, 9330, 9342, 9354, 9368, 9383, 9396}, {9410, 9413, 9416, 9419, 9422, 9425, 6790}, {1285, 1280, 9428, 1610, 3099, 1280, 9430}, {9433, 9440, 9448, 9454, 9463, 9472, 9482, 9488, 9499, 9509, 9516, 9526, 0}, {9534, 9541, 9549, 9554, 9565, 9575, 9585, 9592, 9604, 9613, 9620, 9631, 0}, {9641, 9647, 9652, 9657, 9662, 9667, 9674, 9680, 9686, 9692, 9698, 9705, 0}, {9641, 9647, 9652, 9657, 9662, 9667, 9674, 9680, 9686, 9692, 9698, 9705, 0}, 2, 1, 55, 3, {417,0,0,0,0,0,0,0,0,0,0,0,0,0},{2667,2695,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 273, 285, {9712, 9727, 9742, 9757, 9774, 9793, 9804}, {9815, 9822, 9829, 9836, 9843, 9850, 9857}, {0, 0, 0, 0, 0, 0, 0}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 0, 11, 3, {681,775,2098,744,9,0,0,0,0,0,0,0,0,0},{2727,2745,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 297, 304, {10057, 10070, 10083, 10099, 10116, 10131, 10140}, {10057, 10070, 10083, 10099, 10116, 10131, 10140}, {10149, 10152, 10155, 10158, 10161, 10164, 10167}, {10170, 10183, 10194, 10203, 10214, 10219, 10228, 10239, 10246, 10261, 10272, 10285, 0}, {10298, 10313, 10194, 10203, 10326, 10219, 10333, 10239, 10246, 10261, 10272, 10285, 0}, {10170, 10183, 10194, 10203, 10214, 10219, 10228, 10239, 10246, 10261, 10272, 10285, 0}, {10170, 10183, 10194, 10203, 10214, 10219, 10228, 10239, 10246, 10261, 10272, 10285, 0}, 0, 6, 1, 3, {18,9,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 311, 314, {10346, 10359, 10369, 10378, 10388, 10399, 10410}, {10422, 10425, 10430, 10435, 10440, 10445, 10450}, {10422, 10455, 10458, 10461, 10464, 10467, 10470}, {10473, 10482, 10491, 10500, 10509, 10518, 10527, 10536, 10545, 10554, 10564, 10574, 0}, {10584, 10593, 10602, 10611, 10620, 10629, 10638, 10647, 10656, 10665, 10675, 10685, 0}, {10695, 10701, 10707, 10713, 10719, 10725, 10731, 10737, 10743, 10749, 10756, 10763, 0}, {10695, 10701, 10707, 10713, 10719, 10725, 10731, 10737, 10743, 10749, 10756, 10763, 0}, 0, 1, 1, 3, {18,9,755,744,417,0,0,0,0,0,0,0,0,0},{1261,0,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 317, 322, {10770, 10783, 10804, 10823, 10844, 10863, 10876}, {10887, 10894, 10901, 10908, 10915, 10922, 10929}, {10936, 10939, 10939, 10942, 10945, 10948, 10951}, {10954, 10969, 10984, 10993, 11004, 11015, 11028, 11041, 11056, 11075, 11094, 11111, 0}, {11130, 11147, 11164, 11175, 11188, 11201, 11216, 11231, 11248, 11269, 11290, 11309, 0}, {11330, 11337, 11344, 11351, 11358, 11365, 11372, 11379, 11386, 11393, 11400, 11407, 0}, {11330, 11337, 11344, 11351, 11358, 11365, 11372, 11379, 11386, 11393, 11400, 11407, 0}, 0, 1, 11, 3, {681,775,2764,18,2774,864,417,0,0,0,0,0,0,0},{1029,876,2462,1261,2785,2796,2808,2825,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {11414, 11420, 11434, 11457, 11471, 11487, 11494}, {11503, 11506, 11511, 11517, 11521, 11526, 11529}, {4756, 4744, 4746, 4748, 4750, 4752, 4754}, {11533, 11540, 7354, 11547, 2760, 11553, 11559, 11565, 11572, 11581, 11589, 11596, 0}, {11603, 11610, 11617, 11622, 11628, 11632, 11637, 11642, 11649, 11658, 11666, 11673, 0}, {11680, 5609, 4512, 4614, 11628, 11684, 11688, 11692, 11696, 5109, 11700, 11704, 0}, {11680, 5609, 4512, 4614, 11628, 11684, 11688, 11692, 11696, 5109, 11700, 11704, 0}, 0, 0, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{2843,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {11708, 11716, 11727, 11737, 11748, 11757, 11766}, {11776, 11780, 11784, 11788, 11792, 11796, 11800}, {11804, 9428, 9428, 9428, 1612, 1612, 1616}, {11806, 11816, 11824, 11832, 11840, 11848, 11855, 11863, 11871, 11878, 11884, 11891, 0}, {11806, 11899, 11907, 11915, 11923, 11931, 11938, 11946, 11954, 11961, 11967, 11974, 0}, {11982, 11987, 1712, 11992, 11997, 12002, 12007, 12012, 12017, 12022, 12027, 12032, 0}, {11982, 11987, 1712, 11992, 11997, 12002, 12007, 12012, 12017, 12022, 12027, 12032, 0}, 2, 1, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2872,2899,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2920,0,0,0,0,0,0,0}},\n\t{673, 327, 338, {12037, 12047, 12058, 12065, 12072, 12082, 1247}, {12088, 12092, 12097, 12101, 12105, 12110, 12114}, {6516, 6518, 12118, 6522, 6797, 6518, 6522}, {1618, 1625, 12120, 12126, 12132, 8902, 8908, 12137, 1666, 1676, 12144, 1693, 0}, {12153, 12161, 12170, 12177, 12184, 12189, 12196, 12203, 6874, 12211, 12219, 6902, 0}, {5089, 4610, 12228, 4614, 12233, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, {5089, 4610, 12228, 4614, 12233, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, 2, 1, 11, 3, {1208,0,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{2939,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 349, 363, {12245, 190, 211, 6014, 12258, 12275, 12286}, {12299, 12307, 12315, 12323, 12331, 12339, 12347}, {315, 318, 321, 324, 327, 318, 324}, {12355, 343, 360, 369, 12370, 12377, 12386, 401, 414, 433, 450, 465, 0}, {12355, 343, 360, 369, 12370, 12377, 12386, 401, 414, 433, 450, 465, 0}, {12395, 12403, 12411, 6376, 12370, 12419, 12427, 6384, 12435, 6402, 12445, 6420, 0}, {12395, 12403, 12411, 6376, 12370, 12419, 12427, 6384, 12435, 6402, 12445, 6420, 0}, 0, 1, 11, 3, {2953,0,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2963,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12455, 12463, 12472, 12481, 12490, 12497, 12507}, {12516, 12520, 12524, 12528, 12532, 12535, 12539}, {0, 0, 0, 0, 0, 0, 0}, {12543, 12554, 12562, 12572, 12578, 12590, 12599, 12605, 12611, 12619, 12628, 12640, 0}, {12543, 12554, 12562, 12572, 12578, 12590, 12599, 12605, 12611, 12619, 12628, 12640, 0}, {12648, 12652, 12656, 12660, 12664, 1914, 12668, 12672, 12676, 12680, 12684, 12688, 0}, {12648, 12652, 12656, 12660, 12664, 1914, 12668, 12672, 12676, 12680, 12684, 12688, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12692, 12698, 12711, 12722, 12733, 12742, 12754}, {12516, 12764, 12768, 12772, 12532, 12776, 12780}, {0, 0, 0, 0, 0, 0, 0}, {12784, 12792, 12804, 12816, 12828, 12838, 12850, 12859, 12867, 12875, 12885, 12892, 0}, {12784, 12792, 12804, 12816, 12828, 12838, 12850, 12859, 12867, 12875, 12885, 12892, 0}, {2707, 12906, 12910, 12914, 12918, 12922, 12926, 12930, 12934, 12938, 12942, 12946, 0}, {2707, 12906, 12910, 12914, 12918, 12922, 12926, 12930, 12934, 12938, 12942, 12946, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12950, 12957, 12472, 12968, 12490, 12977, 12988}, {12688, 12998, 12524, 12528, 12532, 13002, 13006}, {0, 0, 0, 0, 0, 0, 0}, {13010, 13020, 13029, 13037, 13046, 13059, 13071, 13078, 13085, 13092, 13102, 13114, 0}, {13010, 13020, 13029, 13037, 13046, 13059, 13071, 13078, 13085, 13092, 13102, 13114, 0}, {13127, 12776, 13131, 13135, 12664, 13139, 13143, 12672, 13147, 13151, 13155, 13159, 0}, {13127, 12776, 13131, 13135, 12664, 13139, 13143, 12672, 13147, 13151, 13155, 13159, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {13163, 13168, 13174, 13184, 13196, 13204, 13215}, {13224, 13228, 13232, 13236, 13240, 12535, 13244}, {0, 0, 0, 0, 0, 0, 0}, {13248, 13258, 13268, 13275, 13282, 1861, 13287, 13294, 13301, 13310, 13318, 13326, 0}, {13248, 13258, 13268, 13275, 13282, 1861, 13287, 13294, 13301, 13310, 13318, 13326, 0}, {1914, 1918, 13006, 13334, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 13006, 13334, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {13350, 13357, 13369, 13380, 13393, 13402, 13414}, {12516, 13424, 13428, 13236, 13240, 12535, 13244}, {1285, 1608, 13432, 1610, 1285, 4089, 1608}, {13434, 13258, 13443, 13449, 13282, 1861, 13287, 13294, 13457, 13310, 13318, 13326, 0}, {13467, 13258, 13443, 13449, 13282, 1861, 13287, 13294, 13457, 13310, 13318, 13326, 0}, {1914, 1918, 13478, 13482, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 13478, 13482, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, 0, 0, 1, 3, {932,3009,0,0,0,0,0,0,0,0,0,0,0,0},{978,997,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 373, 377, {13486, 13493, 13501, 13509, 13518, 13528, 13535}, {13544, 13548, 13552, 13556, 13560, 13564, 13568}, {1285, 1608, 1828, 2735, 1828, 2894, 1285}, {13572, 13581, 13591, 1851, 7756, 13597, 13603, 13609, 1878, 1888, 1896, 7768, 0}, {13572, 13581, 13591, 1851, 7756, 13597, 13603, 13609, 1878, 1888, 1896, 7768, 0}, {13618, 13623, 13628, 13633, 7756, 13638, 13643, 13648, 13653, 13658, 13663, 13668, 0}, {13618, 13623, 13628, 13633, 7756, 13638, 13643, 13648, 13653, 13658, 13663, 13668, 0}, 0, 0, 55, 3, {417,2351,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {13673, 13689, 13714, 13742, 13770, 13798, 13826}, {13845, 13855, 13865, 13875, 13885, 13895, 13905}, {13915, 13919, 13923, 13919, 13927, 13931, 13935}, {13939, 13961, 13989, 14005, 14024, 14040, 14059, 14078, 14100, 14131, 14159, 14184, 0}, {13939, 13961, 13989, 14005, 14024, 14040, 14059, 14078, 14100, 14131, 14159, 14184, 0}, {14212, 14222, 14232, 14242, 14252, 14262, 14272, 14282, 14292, 14302, 14312, 14322, 0}, {14212, 14222, 14232, 14242, 14252, 14262, 14272, 14282, 14292, 14302, 14312, 14322, 0}, 0, 1, 11, 3, {681,3021,0,0,0,0,0,0,0,0,0,0,0,0},{42,1029,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {4231, 14332, 14343, 14353, 14363, 14373, 14387}, {14399, 14403, 14408, 14413, 14417, 14422, 14427}, {1285, 1608, 1610, 1608, 4089, 1614, 1616}, {1618, 1625, 3504, 4376, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 4376, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 2, 1, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{1314,1455,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 381, 409, {14431, 14450, 14469, 14491, 14510, 14532, 14557}, {14576, 14586, 14596, 14609, 14619, 14632, 14648}, {14658, 14662, 14669, 14676, 14683, 14690, 14697}, {14701, 14717, 14736, 14752, 14771, 14778, 14788, 14804, 14820, 14839, 14861, 14877, 0}, {14701, 14717, 14736, 14752, 14771, 14778, 14788, 14804, 14820, 14839, 14861, 14877, 0}, {14896, 14906, 14736, 14752, 14771, 14778, 14919, 14932, 14942, 14955, 14974, 14984, 0}, {14896, 14906, 14736, 14752, 14771, 14778, 14919, 14932, 14942, 14955, 14974, 14984, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{3033, 49, 52, {14997, 15006, 15015, 15025, 15035, 15045, 15057}, {15065, 15070, 15074, 15078, 15082, 15087, 15092}, {15096, 15100, 15103, 15106, 15109, 15113, 15117}, {15120, 15127, 15132, 1851, 15138, 15144, 15151, 15157, 15165, 15175, 15183, 15192, 0}, {15120, 15127, 15132, 1851, 15138, 15144, 15151, 15157, 15165, 15175, 15183, 15192, 0}, {1914, 15202, 2791, 1927, 15206, 15210, 15215, 15219, 15223, 15227, 1951, 15231, 0}, {1914, 15202, 2791, 1927, 15206, 15210, 15215, 15219, 15223, 15227, 1951, 15231, 0}, 0, 0, 1, 3, {18,2351,0,0,0,0,0,0,0,0,0,0,0,0},{3048,3074,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{3094,0,0,0,0,0,0,0}},\n\t{925, 431, 436, {15236, 15248, 15259, 15273, 15285, 15295, 15305}, {15316, 15321, 15326, 15331, 15336, 15341, 15346}, {1285, 2894, 1608, 4532, 1828, 13432, 1616}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, 2, 1, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {15579, 15593, 15603, 15614, 15628, 15639, 15650}, {15663, 15668, 15673, 15680, 15686, 15692, 15698}, {1828, 1616, 1608, 5210, 1828, 9428, 1285}, {15703, 15711, 15719, 15726, 15735, 15745, 15755, 15761, 15769, 15784, 15802, 15810, 0}, {15703, 15711, 15719, 15726, 15735, 15745, 15755, 15761, 15769, 15784, 15802, 15810, 0}, {15818, 15822, 15719, 15828, 15832, 15837, 15755, 15843, 15848, 15855, 15862, 15867, 0}, {15818, 15822, 15719, 15828, 15832, 15837, 15755, 15843, 15848, 15855, 15862, 15867, 0}, 2, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 441, 444, {15872, 15877, 7673, 7680, 15883, 15890, 7697}, {15897, 15901, 7711, 7715, 15905, 7723, 7727}, {9428, 11804, 1285, 7731, 3099, 2892, 1285}, {7733, 7741, 15909, 1851, 7756, 1931, 15913, 15919, 1878, 1888, 1896, 15924, 0}, {7733, 7741, 15909, 1851, 7756, 1931, 15913, 15919, 1878, 1888, 1896, 15924, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 15933, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 15933, 1943, 1947, 1951, 13346, 0}, 0, 1, 1, 3, {2764,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {15937, 15954, 15971, 15988, 16005, 16022, 16031}, {16042, 16047, 16052, 16057, 16062, 16067, 16072}, {16077, 16080, 6081, 6081, 16083, 16077, 6081}, {16086, 16099, 16110, 16123, 16134, 16145, 16158, 16169, 16180, 16197, 16208, 16221, 0}, {16240, 16253, 16264, 16277, 16288, 16299, 16312, 16323, 16334, 16351, 16362, 16375, 0}, {16394, 16402, 16410, 16418, 16426, 16434, 16442, 16450, 16458, 16466, 16474, 16482, 0}, {16394, 16402, 16410, 16418, 16426, 16434, 16442, 16450, 16458, 16466, 16474, 16482, 0}, 0, 1, 1, 3, {18,3112,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3125, 448, 453, {16490, 16507, 16524, 16541, 16558, 16575, 16584}, {16597, 16605, 16613, 16623, 16633, 16575, 16643}, {16077, 16080, 16651, 16651, 16083, 16077, 16654}, {16657, 16670, 9888, 16685, 9908, 16698, 16707, 9929, 16716, 16733, 16748, 16761, 0}, {6087, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 1, 55, 3, {3132,0,0,0,0,0,0,0,0,0,0,0,0,0},{3141,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{3160,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {16776, 16785, 16794, 16802, 16811, 16820, 16827}, {16776, 16785, 16794, 16802, 16811, 16820, 16827}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {7733, 7741, 16836, 16842, 7756, 1861, 15913, 16849, 13301, 16856, 13318, 16863, 0}, {7733, 7741, 16836, 16842, 7756, 1861, 15913, 16849, 13301, 16856, 13318, 16863, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 16871, 1943, 1947, 1951, 7781, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 16871, 1943, 1947, 1951, 7781, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 0, 0, {16875, 16886, 16895, 16904, 16915, 16925, 16930}, {16937, 16941, 16944, 16947, 16951, 9416, 16954}, {16958, 1828, 1285, 7339, 1280, 9428, 16961}, {16964, 16972, 11617, 11622, 16979, 16984, 16990, 12137, 16996, 17006, 17015, 11673, 0}, {16964, 16972, 11617, 11622, 16979, 16984, 16990, 12137, 16996, 17006, 17015, 11673, 0}, {17023, 17028, 11617, 4614, 16979, 16984, 16990, 12237, 11696, 5109, 17032, 11704, 0}, {17023, 17028, 11617, 4614, 16979, 16984, 16990, 12237, 11696, 5109, 17032, 11704, 0}, 0, 1, 11, 3, {3176,681,0,0,0,0,0,0,0,0,0,0,0,0},{3191,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{3223,0,0,0,0,0,0,0}},\n\t{925, 458, 461, {17037, 17047, 17056, 17065, 17076, 17086, 17091}, {17098, 17102, 17107, 17112, 17117, 7723, 17121}, {17126, 1828, 1285, 5210, 1280, 2892, 1285}, {11533, 11540, 7354, 11547, 2760, 17128, 17133, 17138, 17145, 17153, 11589, 11596, 0}, {11603, 11610, 11617, 11622, 11628, 11632, 11637, 8914, 17160, 17168, 11666, 11673, 0}, {12906, 17175, 2791, 1927, 2760, 17179, 17183, 17187, 7707, 1947, 17191, 17195, 0}, {12906, 17175, 2791, 1927, 2760, 17179, 17183, 17187, 7707, 1947, 17191, 17195, 0}, 0, 0, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {17199, 17214, 17229, 17244, 17261, 17282, 17293}, {17304, 17312, 17320, 17328, 17336, 17346, 17354}, {17362, 16080, 6081, 6084, 6078, 17365, 16651}, {17368, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {17368, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {17383, 12403, 12411, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, {17383, 12403, 12411, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, 0, 1, 11, 3, {681,775,2098,9,417,3258,0,0,0,0,0,0,0,0},{3258,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,3278,0,0,0,0,0,0}},\n\t{109, 49, 52, {17393, 17412, 17431, 17456, 17475, 17509, 17534}, {17553, 17563, 17573, 17589, 17599, 17624, 17640}, {17650, 17654, 17661, 17665, 17672, 17679, 17686}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, 0, 1, 55, 11, {755,1062,744,755,744,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{1151,1146,3295,3304,0,0,0,0,0,0,0,0},{1173,1165,3312,3324,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 464, 479, {17936, 17952, 17971, 17993, 18015, 18034, 18062}, {18093, 18100, 18110, 18123, 18136, 18146, 18165}, {18187, 18191, 18198, 18205, 18215, 18222, 18235}, {18242, 18258, 18277, 18290, 18309, 18316, 18326, 18342, 18355, 18371, 18390, 18406, 0}, {18242, 18258, 18277, 18290, 18309, 18316, 18326, 18342, 18355, 18371, 18390, 18406, 0}, {18422, 18429, 18277, 18439, 18309, 18316, 18455, 18468, 18475, 18485, 18498, 18508, 0}, {18422, 18429, 18277, 18439, 18309, 18316, 18455, 18468, 18475, 18485, 18498, 18508, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{3335,894,0,0,0,0,0,0,0,0},{591,583,266,71,0,0,0,0,0,0,0,0},{611,600,271,89,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {18518, 18537, 18556, 18578, 18597, 18619, 18644}, {18663, 18673, 18683, 18696, 18706, 18719, 18735}, {18745, 18749, 18756, 18763, 18770, 18777, 18784}, {18788, 18816, 18844, 18860, 18879, 18886, 18896, 18912, 18928, 18956, 18978, 19000, 0}, {18788, 18816, 18844, 18860, 18879, 18886, 18896, 18912, 18928, 18956, 18978, 19000, 0}, {19025, 19044, 18844, 18860, 18879, 18886, 18896, 18912, 19063, 19079, 19095, 19105, 0}, {19025, 19044, 18844, 18860, 18879, 18886, 18896, 18912, 19063, 19079, 19095, 19105, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 5, 8, {19118, 19137, 19156, 19181, 19200, 19222, 19247}, {19266, 19276, 19286, 19302, 19312, 19325, 19341}, {19351, 19355, 19362, 19366, 19373, 19380, 19387}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 494, 519, {19625, 19644, 19666, 19691, 19707, 19729, 19748}, {19758, 19772, 19786, 19800, 19811, 19825, 19748}, {19839, 19846, 19853, 19860, 19867, 19874, 19881}, {19885, 19901, 19926, 19945, 19964, 19971, 19984, 19997, 20016, 20047, 20072, 20094, 0}, {19885, 19901, 19926, 19945, 19964, 19971, 19984, 19997, 20016, 20047, 20072, 20094, 0}, {20119, 20127, 20141, 20155, 19964, 19971, 19984, 20166, 20174, 20188, 20199, 20207, 0}, {20119, 20127, 20141, 20155, 19964, 19971, 19984, 20166, 20174, 20188, 20199, 20207, 0}, 0, 1, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {20218, 20240, 20262, 20287, 20309, 20334, 20362}, {20384, 20394, 20404, 20417, 20427, 20440, 20456}, {20466, 20470, 20477, 20481, 20488, 20495, 20502}, {20506, 20522, 20547, 20566, 20588, 20595, 20608, 20621, 20640, 20671, 20696, 20715, 0}, {20506, 20522, 20547, 20566, 20588, 20595, 20608, 20621, 20640, 20671, 20696, 20715, 0}, {20740, 20747, 20547, 20763, 20588, 20595, 20608, 20621, 20779, 20801, 20817, 20827, 0}, {20740, 20747, 20547, 20763, 20588, 20595, 20608, 20621, 20779, 20801, 20817, 20827, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 544, 572, {20843, 20865, 20884, 20906, 20925, 20947, 20972}, {20991, 21004, 21014, 21027, 21037, 21050, 21066}, {21076, 21083, 21090, 21097, 21104, 21111, 21118}, {21122, 21138, 21163, 21182, 21204, 21211, 21224, 21237, 21256, 21287, 21312, 21334, 0}, {21122, 21138, 21163, 21182, 21204, 21211, 21224, 21237, 21256, 21287, 21312, 21334, 0}, {21359, 21366, 21163, 21382, 21204, 21211, 21224, 21398, 21405, 21427, 21443, 21456, 0}, {21359, 21366, 21163, 21382, 21204, 21211, 21224, 21398, 21405, 21427, 21443, 21456, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{3353, 49, 52, {21472, 21500, 21534, 21562, 21590, 21621, 21658}, {21686, 21699, 21718, 21734, 21747, 21766, 21785}, {21795, 21802, 21809, 21816, 21823, 21836, 21843}, {21847, 21866, 21894, 21916, 21935, 21948, 21958, 21971, 21996, 22027, 22052, 22068, 0}, {21847, 21866, 21894, 21916, 21935, 21948, 21958, 21971, 21996, 22027, 22052, 22068, 0}, {22087, 22097, 22116, 22126, 21935, 21948, 21958, 22142, 22149, 22174, 22190, 22200, 0}, {22087, 22097, 22116, 22126, 21935, 21948, 21958, 22142, 22149, 22174, 22190, 22200, 0}, 0, 0, 55, 11, {755,1062,775,2098,0,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{1151,1146,3295,3304,0,0,0,0,0,0,0,0},{1173,1165,3312,3324,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 594, 622, {22213, 22232, 22251, 22276, 22295, 22329, 22354}, {22373, 17563, 17573, 17589, 22383, 22408, 17640}, {0, 0, 0, 0, 0, 0, 0}, {22424, 22449, 22480, 22496, 17787, 17794, 17804, 22515, 22531, 22562, 22584, 22606, 0}, {22424, 22449, 22480, 22496, 17787, 17794, 17804, 22515, 22531, 22562, 22584, 22606, 0}, {22631, 22644, 22480, 22496, 17787, 17794, 17804, 22663, 22670, 22686, 22702, 22712, 0}, {22631, 22644, 22480, 22496, 17787, 17794, 17804, 22663, 22670, 22686, 22702, 22712, 0}, 0, 0, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{3361,0,0,0,0,0,0,0,0,0},{583,591,266,0,0,0,0,0,0,0,0,0},{600,611,271,0,0,0,0,0,0},{3380,3388,0,0,0,0,0,0}},\n\t{1, 644, 656, {14431, 14450, 22725, 14491, 14510, 14532, 14557}, {14576, 14586, 22747, 14609, 14619, 14632, 14648}, {14658, 14662, 14669, 14676, 14683, 14690, 14697}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 22855, 22871, 22896, 22918, 22946, 0}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 22855, 22871, 22896, 22918, 22946, 0}, {22968, 22981, 14736, 23000, 22835, 14778, 22842, 23016, 23023, 23042, 23058, 23080, 0}, {22968, 22981, 14736, 23000, 22835, 14778, 22842, 23016, 23023, 23042, 23058, 23080, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 665, 670, {23096, 23103, 23114, 23127, 23140, 23151, 23164}, {23175, 23180, 23185, 23190, 23195, 23200, 23205}, {23175, 23180, 23185, 23190, 23195, 23200, 23205}, {23210, 23236, 23264, 23294, 23324, 23350, 23380, 23406, 23434, 23458, 23486, 23523, 0}, {23210, 23236, 23264, 23294, 23324, 23350, 23380, 23406, 23434, 23458, 23486, 23523, 0}, {23562, 23574, 23586, 23598, 23610, 23622, 23634, 23646, 23658, 23670, 23683, 23696, 0}, {23562, 23574, 23586, 23598, 23610, 23622, 23634, 23646, 23658, 23670, 23683, 23696, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3398,3436,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{3468, 675, 697, {23709, 23737, 23765, 23802, 23833, 23867, 23898}, {23932, 23948, 23964, 23989, 24008, 24030, 24049}, {24071, 24078, 24085, 24095, 24105, 24115, 24125}, {24138, 24172, 24209, 24246, 24280, 24311, 24348, 24385, 24425, 24459, 24493, 24542, 0}, {24591, 24622, 24656, 24690, 24721, 24749, 24783, 24817, 24854, 24885, 24916, 24962, 0}, {25008, 25021, 25034, 25047, 25060, 25073, 25086, 25099, 25112, 25125, 25141, 25157, 0}, {25008, 25021, 25034, 25047, 25060, 25073, 25086, 25099, 25112, 25125, 25141, 25157, 0}, 0, 0, 1, 3, {379,388,397,428,417,406,446,439,453,0,0,0,0,0},{3492,3535,3583,3615,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{3652,666,0,0,0,0,0,0}},\n\t{109, 722, 725, {25173, 25182, 25192, 25204, 25217, 25226, 25238}, {25250, 25254, 12926, 25259, 25263, 25267, 25271}, {1285, 25275, 1608, 1608, 11804, 4532, 1285}, {25278, 25285, 25294, 25301, 1857, 25308, 25316, 25327, 25332, 25337, 25344, 25353, 0}, {25278, 25285, 25294, 25301, 1857, 25308, 25316, 25327, 25332, 25337, 25344, 25353, 0}, {25361, 25365, 12926, 25369, 1857, 25373, 25377, 25327, 25332, 25381, 25385, 25390, 0}, {25361, 25365, 12926, 25369, 1857, 25373, 25377, 25327, 25332, 25381, 25385, 25390, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {25395, 25417, 25433, 25452, 25462, 25493, 25509}, {25395, 25417, 25433, 25452, 25462, 25493, 25509}, {25522, 25526, 25522, 25530, 25530, 25534, 25534}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, 0, 0, 1, 3, {9,417,0,0,0,0,0,0,0,0,0,0,0,0},{894,2363,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{3685,0,0,0,0,0,0,0}},\n\t{109, 728, 753, {25727, 25752, 25771, 25799, 25818, 25843, 25862}, {25884, 25900, 25910, 25929, 25939, 25955, 25965}, {25978, 25985, 25989, 25993, 25997, 26004, 26011}, {26015, 26034, 26050, 26063, 26076, 26098, 26117, 26139, 26155, 26171, 26184, 26200, 0}, {26015, 26034, 26050, 26063, 26076, 26098, 26117, 26139, 26155, 26171, 26184, 26200, 0}, {26216, 26225, 26234, 26243, 26252, 26261, 26273, 26282, 26291, 26300, 26309, 26318, 0}, {26216, 26225, 26234, 26243, 26252, 26261, 26273, 26282, 26291, 26300, 26309, 26318, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{3720,894,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 778, 794, {26327, 26355, 26377, 26396, 26421, 26446, 26465}, {26327, 26355, 26377, 26396, 26421, 26446, 26465}, {26475, 26475, 26479, 26483, 26487, 26491, 26495}, {26499, 26524, 26555, 26565, 26578, 26585, 26598, 26620, 26636, 26661, 26692, 26717, 0}, {26499, 26524, 26555, 26565, 26578, 26585, 26598, 26620, 26636, 26661, 26692, 26717, 0}, {26739, 26749, 26555, 26756, 26578, 26585, 26760, 26767, 26771, 26781, 26797, 26807, 0}, {26739, 26749, 26555, 26756, 26578, 26585, 26760, 26767, 26771, 26781, 26797, 26807, 0}, 0, 0, 55, 3, {744,304,0,0,0,0,0,0,0,0,0,0,0,0},{3747,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {2803, 26814, 2817, 26819, 26829, 26835, 2850}, {26842, 26847, 26852, 26857, 26863, 26868, 26873}, {1828, 1616, 1608, 1608, 2890, 2894, 1285}, {26879, 26887, 26896, 26902, 26908, 26913, 26919, 26925, 26932, 26941, 26949, 26958, 0}, {26967, 26975, 2910, 666, 5557, 26984, 26990, 2933, 5574, 5583, 5591, 26996, 0}, {27005, 13623, 26852, 27010, 26908, 26913, 27015, 27020, 27025, 27030, 13663, 27035, 0}, {27005, 13623, 26852, 27010, 26908, 26913, 27015, 27020, 27025, 27030, 13663, 27035, 0}, 2, 1, 1, 3, {18,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1314,1261,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 644, 804, {27040, 14450, 27068, 14491, 14510, 14532, 14557}, {14576, 14586, 22747, 14609, 14619, 14632, 14648}, {0, 0, 0, 0, 0, 0, 0}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 27087, 27103, 27131, 22918, 22946, 0}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 27087, 27103, 27131, 22918, 22946, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 816, 828, {27153, 27169, 27185, 27213, 27229, 27272, 27297}, {27153, 27169, 27325, 27213, 27335, 27357, 27370}, {27380, 27384, 27388, 27392, 27396, 27409, 27416}, {27423, 27442, 27467, 27486, 27511, 27524, 27537, 27550, 27572, 27606, 27631, 27659, 0}, {27423, 27442, 27467, 27486, 27511, 27524, 27537, 27550, 27572, 27606, 27631, 27659, 0}, {27687, 27694, 27704, 27486, 27511, 27524, 27537, 27717, 27727, 27740, 27750, 27763, 0}, {27687, 27694, 27704, 27486, 27511, 27524, 27537, 27717, 27727, 27740, 27750, 27763, 0}, 0, 1, 55, 11, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{3304,71,0,0,0,0,0,0,0,0,0,0},{3324,89,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 837, 847, {27776, 27798, 27820, 27836, 27852, 27868, 27887}, {27909, 27919, 27929, 27939, 27949, 27959, 27969}, {27979, 27983, 27987, 27991, 27995, 27999, 28003}, {28007, 28023, 28033, 28043, 28053, 28069, 28082, 28095, 28105, 28118, 28131, 28144, 0}, {28007, 28023, 28033, 28043, 28053, 28069, 28082, 28095, 28105, 28118, 28131, 28144, 0}, {28157, 28164, 28171, 28178, 28185, 28192, 28199, 28206, 28213, 28220, 28227, 28234, 0}, {28157, 28164, 28171, 28178, 28185, 28192, 28199, 28206, 28213, 28220, 28227, 28234, 0}, 0, 0, 1, 3, {932,941,948,957,460,417,968,0,0,0,0,0,0,0},{3768,3787,42,2448,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 866, 876, {28241, 28251, 28258, 28271, 28281, 28291, 28301}, {28241, 28251, 28311, 28271, 28281, 28291, 28301}, {28321, 28325, 28329, 28333, 28337, 28341, 28345}, {28349, 28365, 28381, 28391, 28404, 28411, 28418, 28428, 28441, 28460, 28476, 28492, 0}, {28349, 28365, 28381, 28391, 28404, 28411, 28418, 28428, 28441, 28460, 28476, 28492, 0}, {28508, 28518, 28381, 28528, 28404, 28411, 28418, 28538, 28548, 28558, 28568, 28578, 0}, {28508, 28518, 28381, 28528, 28404, 28411, 28418, 28538, 28548, 28558, 28568, 28578, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 889, 899, {28588, 28595, 28601, 28608, 28614, 28620, 28628}, {28638, 28642, 28646, 28650, 28654, 28658, 28662}, {9428, 9428, 9428, 9428, 9428, 9428, 9428}, {28668, 28677, 7020, 28686, 28692, 28698, 28704, 28711, 28717, 28726, 28735, 28743, 0}, {28668, 28677, 7020, 28686, 28692, 28698, 28704, 28711, 28717, 28726, 28735, 28743, 0}, {28752, 28756, 2791, 28760, 2760, 28764, 28768, 28772, 28777, 28781, 28787, 28791, 0}, {28752, 28756, 2791, 28760, 2760, 28764, 28768, 28772, 28777, 28781, 28787, 28791, 0}, 0, 0, 55, 3, {744,755,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 381, 409, {28795, 28814, 28833, 28858, 28877, 28899, 28924}, {28943, 14586, 28953, 14609, 28969, 14632, 14648}, {28982, 14662, 28986, 14676, 28990, 14690, 14697}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 14771, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, 0, 0, 1, 3, {932,941,948,957,460,417,968,0,0,0,0,0,0,0},{3800,3820,42,2448,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{3388,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {29173, 29179, 29187, 29195, 29204, 29215, 29221}, {29227, 29230, 3084, 4997, 3090, 29233, 1275}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {29236, 29247, 13591, 1851, 29258, 29264, 2769, 13609, 29269, 1888, 29279, 29288, 0}, {29236, 29247, 13591, 1851, 29258, 29264, 2769, 13609, 29269, 1888, 29279, 29288, 0}, {1914, 1918, 29297, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 7781, 0}, {1914, 1918, 29297, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 7781, 0}, 2, 1, 55, 3, {744,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, 0, 6, 1, 3, {379,417,0,0,0,0,0,0,0,0,0,0,0,0},{894,1217,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {29415, 29422, 29428, 29435, 29446, 29454, 29463}, {29470, 29474, 2791, 29478, 29482, 29486, 7727}, {29470, 29474, 2791, 29478, 29482, 29486, 7727}, {29490, 29496, 29504, 26902, 29510, 29515, 29521, 26925, 29527, 29537, 29545, 29555, 0}, {29490, 29496, 29504, 26902, 29510, 29515, 29521, 26925, 29527, 29537, 29545, 29555, 0}, {29565, 29569, 2791, 29573, 2760, 29577, 29581, 16871, 15223, 1947, 29585, 13346, 0}, {29565, 29569, 2791, 29573, 2760, 29577, 29581, 16871, 15223, 1947, 29585, 13346, 0}, 0, 0, 1, 3, {932,3009,0,0,0,0,0,0,0,0,0,0,0,0},{978,997,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 912, 919, {29589, 29594, 29602, 29611, 29621, 29631, 29638}, {29649, 29653, 29658, 12088, 29662, 29666, 29670}, {29674, 29676, 29678, 6516, 6516, 29678, 29680}, {29682, 29688, 29694, 29700, 29708, 29715, 29721, 29727, 29732, 29739, 29748, 29754, 0}, {29682, 29688, 29694, 29700, 29708, 29715, 29721, 29727, 29732, 29739, 29748, 29754, 0}, {29760, 29764, 29768, 29772, 29776, 29780, 29784, 29788, 29792, 29796, 29800, 29804, 0}, {29760, 29764, 29768, 29772, 29776, 29780, 29784, 29788, 29792, 29796, 29800, 29804, 0}, 0, 0, 1, 3, {18,9,775,755,417,0,0,0,0,0,0,0,0,0},{1217,1234,894,0,0,0,0,0,0,0},{71,266,1151,1243,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {29808, 29815, 29823, 29830, 29837, 29845, 29854}, {29861, 29865, 29869, 29873, 29877, 7723, 28638}, {1616, 1616, 1610, 1616, 9428, 2892, 9428}, {29881, 29889, 29899, 29905, 29913, 29918, 29923, 29928, 29935, 16856, 29943, 29951, 0}, {29881, 29889, 29899, 29905, 29913, 29918, 29923, 29928, 29935, 16856, 29943, 29951, 0}, {1914, 29959, 2791, 29963, 2760, 28764, 28768, 29967, 2731, 1947, 29971, 13346, 0}, {1914, 29959, 2791, 29963, 2760, 28764, 28768, 29967, 2731, 1947, 29971, 13346, 0}, 0, 0, 1, 3, {295,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1010,1029,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 928, 939, {29975, 29993, 30008, 30030, 30043, 30057, 30074}, {30098, 30106, 30111, 30030, 30043, 30123, 30130}, {0, 0, 0, 0, 0, 0, 0}, {30144, 30166, 30182, 30202, 30216, 30233, 30248, 30265, 30279, 30292, 30311, 30325, 0}, {30144, 30166, 30182, 30202, 30216, 30233, 30248, 30265, 30279, 30292, 30311, 30325, 0}, {30344, 30359, 30368, 30381, 30388, 30398, 30406, 30416, 30423, 30429, 30441, 30448, 0}, {30344, 30359, 30368, 30381, 30388, 30398, 30406, 30416, 30423, 30429, 30441, 30448, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {30460, 30468, 12472, 12968, 12490, 30479, 30489}, {12516, 12998, 12524, 12528, 12532, 12535, 30498}, {0, 0, 0, 0, 0, 0, 0}, {30502, 30511, 30521, 30529, 7756, 2764, 30537, 30543, 30552, 30561, 30570, 30579, 0}, {30502, 30511, 30521, 30529, 7756, 2764, 30537, 30543, 30552, 30561, 30570, 30579, 0}, {1914, 1918, 13006, 30588, 7756, 1931, 1935, 16871, 15223, 1947, 30592, 13346, 0}, {1914, 1918, 13006, 30588, 7756, 1931, 1935, 16871, 15223, 1947, 30592, 13346, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{3834, 949, 955, {30596, 30604, 30613, 30624, 30634, 30646, 30654}, {12516, 30664, 30669, 30674, 30679, 30683, 30687}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 30691, 30698, 30706, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 30691, 30698, 30706, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 30710, 29573, 30706, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 30710, 29573, 30706, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {775,9,755,0,0,0,0,0,0,0,0,0,0,0},{721,3843,798,2541,3856,3881,0,0,0,0},{71,266,1146,3907,0,0,0,0,0,0,0,0},{89,3919,3934,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3950, 965, 970, {30715, 30722, 30737, 30751, 30767, 30782, 30798}, {4528, 30813, 4512, 30817, 30821, 30825, 30829}, {1285, 9428, 1608, 1280, 1285, 1610, 9428}, {5011, 5019, 30833, 30840, 30847, 1649, 1654, 30852, 30862, 30873, 30882, 30892, 0}, {5011, 5019, 30833, 30840, 30847, 1649, 1654, 30852, 30862, 30873, 30882, 30892, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 5101, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 5101, 5105, 5109, 4642, 6911, 0}, 0, 0, 55, 3, {744,755,417,764,0,0,0,0,0,0,0,0,0,0},{3963,721,2561,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 975, 980, {30902, 30918, 30926, 30934, 30943, 30955, 30965}, {30975, 30981, 30987, 30991, 30995, 31003, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {31010, 31023, 31037, 31046, 30706, 31052, 31057, 31065, 13301, 31078, 13318, 13326, 0}, {31010, 31023, 31037, 31046, 30706, 31052, 31057, 31065, 13301, 31078, 13318, 13326, 0}, {31087, 1918, 31091, 13334, 30706, 31095, 1935, 31099, 1943, 31107, 1951, 13346, 0}, {31087, 1918, 31091, 13334, 30706, 31095, 1935, 31099, 1943, 31107, 1951, 13346, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 985, 988, {31113, 31121, 31129, 31137, 31144, 31152, 31160}, {31168, 31172, 31176, 31180, 7719, 31184, 31188}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {31192, 31200, 31212, 31224, 31229, 31236, 31247, 31258, 31266, 31275, 31288, 31296, 0}, {31192, 31200, 31212, 31224, 31229, 31236, 31247, 31258, 31266, 31275, 31288, 31296, 0}, {31303, 31307, 31311, 31315, 31319, 31323, 31327, 31331, 31335, 31339, 25271, 12918, 0}, {31303, 31307, 31311, 31315, 31319, 31323, 31327, 31331, 31335, 31339, 25271, 12918, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{978,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 991, 1011, {31343, 31356, 31366, 28271, 31376, 31386, 31396}, {31406, 31413, 31420, 31427, 31434, 31441, 31448}, {28325, 28325, 31455, 28333, 31459, 28341, 31463}, {31467, 31474, 31487, 31500, 31513, 31526, 31533, 31543, 31553, 31569, 31582, 31592, 0}, {31467, 31474, 31487, 31500, 31513, 31526, 31533, 31543, 31553, 31569, 31582, 31592, 0}, {31467, 31605, 31612, 31619, 31626, 31526, 31633, 31640, 31647, 31654, 31661, 31668, 0}, {31467, 31605, 31612, 31619, 31626, 31526, 31633, 31640, 31647, 31654, 31661, 31668, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{3982,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {31675, 31683, 31693, 31702, 31712, 31721, 31731}, {31740, 31743, 31746, 31749, 31752, 31755, 31758}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {31761, 31769, 31779, 31786, 7756, 31796, 31801, 31807, 31816, 31827, 31837, 31846, 0}, {31761, 31769, 31779, 31786, 7756, 31796, 31801, 31807, 31816, 31827, 31837, 31846, 0}, {31855, 31860, 31865, 31870, 7756, 31876, 31881, 31886, 31892, 31897, 31903, 31908, 0}, {31855, 31860, 31865, 31870, 7756, 31876, 31881, 31886, 31892, 31897, 31903, 31908, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 1031, 1035, {31913, 31918, 31925, 31933, 31940, 31948, 31954}, {31960, 15901, 29869, 31964, 15905, 31184, 7727}, {9428, 11804, 1610, 9428, 31968, 2892, 1285}, {31971, 31985, 31998, 32014, 32027, 32041, 32054, 32069, 32085, 32101, 32115, 32137, 0}, {31971, 31985, 31998, 32014, 32027, 32041, 32054, 32069, 32085, 32101, 32115, 32137, 0}, {32160, 32164, 25271, 32168, 32172, 32176, 32180, 32184, 32188, 32192, 32196, 32200, 0}, {32160, 32164, 25271, 32168, 32172, 32176, 32180, 32184, 32188, 32192, 32196, 32200, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{3800,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{4019, 1039, 1046, {32204, 32214, 32224, 32234, 32244, 32254, 32264}, {32274, 32281, 32288, 32295, 32302, 32309, 32316}, {32323, 32327, 32331, 32335, 32339, 32343, 32347}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, 0, 0, 1, 3, {379,388,397,428,417,406,0,0,0,0,0,0,0,0},{4042,4066,4096,4126,4143,0,0,0,0,0},{583,266,71,0,0,0,0,0,0,0,0,0},{600,271,89,0,0,0,0,0,0},{4166,666,0,0,0,0,0,0}},\n\t{109, 975, 1053, {25250, 29474, 32441, 32448, 32458, 32463, 32470}, {25250, 29474, 32477, 32482, 32458, 32487, 32492}, {32497, 1616, 32500, 32503, 17126, 4532, 1825}, {32506, 32513, 32441, 32524, 32530, 32534, 32543, 32550, 32555, 32564, 32569, 32572, 0}, {32506, 32513, 32441, 32524, 32530, 32534, 32543, 32550, 32555, 32564, 32569, 32572, 0}, {32578, 32583, 32591, 32597, 32530, 32602, 32608, 32550, 32614, 32564, 32569, 32620, 0}, {32578, 32583, 32591, 32597, 32530, 32602, 32608, 32550, 32614, 32564, 32569, 32620, 0}, 2, 1, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3125, 1058, 1064, {32625, 32642, 32657, 32674, 32691, 32708, 32717}, {32728, 32733, 32738, 32743, 32748, 32753, 32758}, {32763, 10152, 10155, 10158, 10161, 10164, 10167}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, 0, 0, 55, 3, {388,397,417,428,0,0,0,0,0,0,0,0,0,0},{4183,4204,4230,4271,4317,0,0,0,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{4331,2717,666,0,0,0,0,0}},\n\t{673, 1070, 1075, {32922, 32930, 32940, 32950, 32959, 32969, 32977}, {32987, 32991, 32996, 33000, 33004, 33008, 13568}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 33012, 33021, 33032, 33041, 33051, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 33012, 33021, 33032, 33041, 33051, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 1, 3, {18,9,775,755,417,0,0,0,0,0,0,0,0,0},{1217,1234,894,0,0,0,0,0,0,0},{71,266,1151,1243,1253,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{4352, 1080, 1085, {33061, 33086, 33111, 33136, 33149, 33164, 33181}, {33196, 33201, 33206, 33211, 33216, 33221, 310}, {16083, 16083, 33226, 6081, 6084, 16083, 6081}, {33229, 33248, 33263, 33285, 33305, 33319, 33333, 33345, 33369, 33391, 33408, 33425, 0}, {33442, 33461, 33476, 33498, 33518, 33534, 33550, 33564, 33590, 33614, 33631, 33425, 0}, {33648, 33657, 33666, 33673, 33680, 33687, 33694, 33701, 33708, 33715, 33722, 33729, 0}, {33648, 33657, 33666, 33673, 33680, 33687, 33694, 33701, 33708, 33715, 33722, 33729, 0}, 0, 1, 11, 3, {681,1208,417,4368,4378,0,0,0,0,0,0,0,0,0},{4391,4426,4455,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{4490,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {33736, 33748, 33759, 33771, 33783, 33793, 33805}, {33820, 33825, 33830, 33835, 33840, 33845, 33850}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {33855, 33864, 33876, 33884, 33889, 33899, 33906, 33915, 33922, 33928, 33937, 33948, 0}, {33855, 33864, 33876, 33884, 33889, 33899, 33906, 33915, 33922, 33928, 33937, 33948, 0}, {33956, 33961, 33966, 33971, 33976, 33981, 33986, 33840, 33991, 33996, 34001, 34006, 0}, {33956, 33961, 33966, 33971, 33976, 33981, 33986, 33840, 33991, 33996, 34001, 34006, 0}, 0, 0, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{4506, 1090, 1092, {34011, 34024, 34032, 34041, 34051, 34061, 34070}, {34082, 34086, 34090, 34094, 34098, 34102, 34106}, {1828, 1616, 1608, 5210, 9428, 4089, 1285}, {34110, 34124, 34135, 34144, 34155, 34167, 34181, 34193, 34206, 34219, 34231, 34244, 0}, {34258, 34275, 34289, 34301, 34315, 34330, 34344, 34356, 34371, 34386, 34400, 34415, 0}, {34431, 34436, 34442, 34448, 34453, 34459, 34465, 34470, 34476, 34481, 15862, 34487, 0}, {34431, 34436, 34442, 34448, 34453, 34459, 34465, 34470, 34476, 34481, 15862, 34487, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{4517,4539,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, {1, 10, 17, 37, 57, 81, 105, 112, 123, 134, 143, 161, 0}, 0, 0, 1, 3, {9,18,0,0,0,0,0,0,0,0,0,0,0,0},{29,42,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 5, 8, {177, 190, 211, 226, 237, 256, 267}, {280, 285, 290, 295, 300, 305, 310}, {315, 318, 321, 324, 327, 318, 324}, {330, 343, 360, 369, 380, 387, 394, 401, 414, 433, 450, 465, 0}, {330, 343, 360, 369, 380, 387, 394, 401, 414, 433, 450, 465, 0}, {482, 489, 360, 496, 380, 387, 394, 503, 510, 517, 524, 531, 0}, {482, 489, 360, 496, 380, 387, 394, 503, 510, 517, 524, 531, 0}, 2, 1, 11, 3, {116,131,147,163,0,0,0,0,0,0,0,0,0,0},{180,199,217,242,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{279,0,0,0,0,0,0,0}},\n\t{109, 13, 19, {538, 547, 555, 563, 572, 579, 589}, {598, 602, 606, 610, 614, 618, 622}, {626, 629, 632, 635, 638, 641, 644}, {647, 653, 660, 666, 672, 677, 682, 689, 695, 704, 712, 721, 0}, {730, 739, 749, 758, 768, 776, 784, 794, 804, 816, 828, 840, 0}, {852, 857, 660, 863, 672, 677, 868, 873, 877, 882, 887, 892, 0}, {852, 857, 660, 863, 672, 677, 868, 873, 877, 882, 887, 892, 0}, 2, 1, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{315,338,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {34493, 34500, 34507, 34514, 34521, 34528, 34535}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {379,406,417,0,0,0,0,0,0,0,0,0,0,0},{469,1484,547,4555,0,0,0,0,0,0},{591,583,71,266,0,0,0,0,0,0,0,0},{611,600,89,271,0,0,0,0,0},{623,639,652,0,0,0,0,0}},\n\t{673, 39, 44, {1197, 1205, 1215, 1223, 1231, 1240, 1247}, {1254, 1257, 1260, 1264, 1267, 1271, 1275}, {1278, 1280, 1282, 1285, 1287, 1280, 1285}, {1290, 1296, 1302, 1310, 1316, 1324, 1332, 1342, 1348, 1356, 1364, 1373, 0}, {1382, 1388, 1395, 1403, 1409, 1417, 1425, 1435, 1348, 1441, 1449, 1459, 0}, {1468, 1472, 1477, 1482, 1486, 1491, 1496, 1501, 1505, 1511, 1517, 1521, 0}, {1468, 1472, 1477, 1482, 1486, 1491, 1496, 1501, 1505, 1511, 1517, 1521, 0}, 2, 1, 11, 3, {681,692,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {1525, 1533, 1540, 1548, 1555, 1563, 1570}, {1578, 1583, 1587, 1591, 1595, 1599, 1603}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 1633, 1639, 1645, 1649, 1654, 1659, 1666, 1676, 1684, 1693, 0}, {1618, 1625, 1633, 1639, 1645, 1649, 1654, 1659, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {744,755,417,764,0,0,0,0,0,0,0,0,0,0},{721,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 57, 63, {1747, 1755, 1762, 1771, 1780, 1791, 1799}, {1807, 1810, 1813, 1816, 1819, 1822, 1825}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {681,775,417,784,0,0,0,0,0,0,0,0,0,0},{798,721,817,0,0,0,0,0,0,0},{71,830,0,0,0,0,0,0,0,0,0,0},{89,842,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 70, 77, {1959, 1974, 1989, 2000, 2015, 2028, 2047}, {2062, 2069, 2076, 2083, 2090, 2097, 2104}, {2111, 2114, 2117, 2117, 2120, 2120, 2123}, {2126, 2147, 2170, 2185, 2202, 2213, 2228, 2243, 2262, 2285, 2304, 2323, 0}, {2344, 2365, 2388, 2403, 2420, 2431, 2446, 2461, 2480, 2503, 2522, 2541, 0}, {2562, 2569, 2576, 2583, 2590, 2597, 2606, 2615, 2622, 2629, 2636, 2643, 0}, {2562, 2569, 2576, 2583, 2590, 2597, 2606, 2615, 2622, 2629, 2636, 2643, 0}, 2, 1, 1, 3, {295,18,857,9,864,417,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {932,941,948,957,460,417,968,0,0,0,0,0,0,0},{978,997,1010,1029,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 84, 88, {2997, 3009, 3021, 3031, 3045, 3055, 3067}, {3078, 3081, 3084, 3087, 3090, 3093, 3096}, {1285, 1608, 1610, 3099, 1610, 1280, 1616}, {3101, 3110, 3119, 3129, 3138, 3147, 3156, 3166, 3173, 3181, 3189, 3199, 0}, {3208, 3219, 3230, 3242, 3253, 3264, 3275, 3287, 3296, 3306, 3316, 3328, 0}, {3339, 3345, 3351, 3358, 3364, 3370, 3376, 3383, 3387, 3392, 3397, 3404, 0}, {3339, 3345, 3351, 3358, 3364, 3370, 3376, 3383, 3387, 3392, 3397, 3404, 0}, 2, 1, 11, 11, {1208,0,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{1146,0,0,0,0,0,0,0,0,0,0,0},{1165,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 2, 1, 1, 3, {18,9,775,755,417,0,0,0,0,0,0,0,0,0},{1217,894,1234,0,0,0,0,0,0,0},{71,266,1151,1243,1253,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 92, 105, {3596, 3614, 3628, 3646, 3664, 3682, 3698}, {3712, 3724, 3736, 3748, 3760, 3772, 3784}, {3791, 3796, 3801, 3806, 3811, 3816, 3821}, {3826, 3837, 3850, 3857, 3868, 3875, 3884, 3893, 3906, 3919, 3934, 3947, 0}, {3826, 3837, 3850, 3857, 3868, 3875, 3884, 3893, 3906, 3919, 3934, 3947, 0}, {3958, 3967, 3850, 3976, 3868, 3875, 3884, 3985, 3994, 4003, 4012, 4021, 0}, {3958, 3967, 3850, 3976, 3868, 3875, 3884, 3985, 3994, 4003, 4012, 4021, 0}, 0, 0, 1, 3, {18,1261,9,29,755,744,1274,417,1287,1304,0,0,0,0},{1314,1261,1332,1354,1287,0,0,0,0,0},{71,62,0,0,0,0,0,0,0,0,0,0},{89,77,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1375, 116, 120, {4030, 4040, 4048, 4053, 4060, 4073, 4081}, {2894, 4089, 3099, 4091, 4095, 1280, 4098}, {2894, 4089, 3099, 4102, 4095, 1280, 4102}, {4105, 4113, 4122, 4131, 4140, 4147, 4155, 4163, 4173, 4184, 1684, 1693, 0}, {4105, 4113, 4122, 4131, 4140, 4147, 4155, 4163, 4173, 4184, 1684, 1693, 0}, {1702, 857, 4193, 4200, 4206, 4212, 4218, 1727, 4224, 1737, 887, 1742, 0}, {1702, 857, 4193, 4200, 4206, 4212, 4218, 1727, 4224, 1737, 887, 1742, 0}, 2, 1, 124, 3, {1383,1397,0,0,0,0,0,0,0,0,0,0,0,0},{1410,1430,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{1444,0,0,0,0,0,0,0}},\n\t{673, 127, 132, {4231, 4242, 4253, 4267, 4281, 4293, 4305}, {4317, 4322, 4328, 4334, 4340, 4345, 4351}, {1285, 1608, 4356, 1608, 1614, 1614, 1616}, {4359, 4367, 3504, 4376, 4383, 4388, 4395, 4402, 1666, 4184, 4410, 4420, 0}, {4359, 4367, 3504, 4376, 4383, 4388, 4395, 4402, 1666, 4184, 4410, 4420, 0}, {1702, 1707, 1712, 1717, 4383, 4212, 4218, 4429, 1732, 1737, 4436, 892, 0}, {1702, 1707, 1712, 1717, 4383, 4212, 4218, 4429, 1732, 1737, 4436, 892, 0}, 2, 1, 11, 3, {1208,1455,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {4442, 4451, 4459, 4468, 4479, 4488, 4497}, {4504, 4508, 4512, 4516, 4520, 4524, 4528}, {1828, 1616, 1608, 1608, 4532, 2894, 1285}, {4534, 4542, 2910, 4551, 4558, 4565, 4572, 2933, 4579, 4589, 712, 4597, 0}, {4534, 4542, 2910, 4551, 4558, 4565, 4572, 2933, 4579, 4589, 712, 4597, 0}, {4606, 4610, 4512, 4614, 4618, 4622, 4626, 4630, 4634, 4638, 4642, 4646, 0}, {4606, 4610, 4512, 4614, 4618, 4622, 4626, 4630, 4634, 4638, 4642, 4646, 0}, 2, 1, 1, 3, {18,864,9,1467,857,0,0,0,0,0,0,0,0,0},{1217,1475,894,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{370, 137, 144, {4650, 4660, 4670, 4680, 4690, 4700, 4710}, {1016, 4720, 4724, 4728, 4732, 4736, 4740}, {1016, 4720, 4724, 4728, 4732, 4736, 4740}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, 0, 0, 1, 3, {406,460,439,379,417,0,0,0,0,0,0,0,0,0},{469,1484,1508,1535,1564,1588,1617,1637,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{623,1662,652,0,0,0,0,0}},\n\t{1680, 151, 158, {4771, 4781, 4791, 4801, 4811, 4821, 4831}, {4841, 4845, 4849, 4853, 4857, 4861, 4865}, {4841, 4845, 4849, 4853, 4857, 4861, 4865}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, {4869, 4874, 4879, 4884, 4889, 4894, 4899, 4904, 4909, 4914, 4920, 4926, 0}, 0, 0, 55, 3, {417,1690,446,388,0,0,0,0,0,0,0,0,0,0},{1699,1728,1752,1779,1801,1832,1858,1889,1915,1942},{583,591,266,71,0,0,0,0,0,0,0,0},{600,611,271,89,0,0,0,0,0},{1964,1981,2000,0,0,0,0,0}},\n\t{109, 165, 170, {4932, 4939, 4947, 4955, 4964, 4974, 4982}, {4991, 3081, 4994, 4997, 5000, 5003, 5006}, {5009, 1608, 1828, 2735, 1828, 2894, 5009}, {5011, 5019, 5028, 1639, 5034, 1649, 1654, 5038, 1666, 1676, 1684, 1693, 0}, {5011, 5019, 5028, 1639, 5034, 1649, 1654, 5038, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 5047, 1717, 5034, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 5047, 1717, 5034, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {2015,1062,755,9,775,2024,417,0,0,0,0,0,0,0},{1217,1475,894,1234,0,0,0,0,0,0},{71,266,1146,2036,2048,0,0,0,0,0,0,0},{89,271,2060,2075,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{2090, 165, 170, {1525, 1533, 1540, 1548, 1555, 1563, 1570}, {5052, 5058, 5063, 5068, 5073, 5078, 5083}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 2, 1, 11, 11, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {5117, 5127, 5141, 5148, 5155, 5164, 1247}, {5172, 5179, 5184, 5188, 5193, 5198, 5202}, {1278, 1280, 2735, 5207, 5210, 1280, 1285}, {5212, 5221, 5226, 5233, 1645, 5243, 5252, 5259, 5269, 5279, 1364, 5292, 0}, {5302, 5311, 5318, 5324, 5333, 5338, 5346, 5352, 5361, 5371, 5385, 5395, 0}, {5403, 5407, 4512, 5411, 1645, 5415, 5419, 5423, 5427, 5431, 1517, 5436, 0}, {5403, 5407, 4512, 5411, 1645, 5415, 5419, 5423, 5427, 5431, 1517, 5436, 0}, 2, 1, 11, 3, {681,0,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1042, 49, 52, {2803, 5440, 5454, 5467, 5480, 5493, 2850}, {4504, 5505, 5509, 5513, 5517, 5521, 5525}, {1828, 1285, 1610, 5530, 5530, 1285, 1285}, {5532, 5540, 5550, 666, 5557, 5562, 5568, 2933, 5574, 5583, 5591, 5600, 0}, {5532, 5540, 5550, 666, 5557, 5562, 5568, 2933, 5574, 5583, 5591, 5600, 0}, {5089, 5609, 4512, 5613, 3515, 5093, 5097, 4630, 4634, 5617, 4642, 5621, 0}, {5089, 5609, 4512, 5613, 3515, 5093, 5097, 4630, 4634, 5617, 4642, 5621, 0}, 0, 0, 1, 3, {18,9,295,857,755,744,1062,2015,775,681,2024,2098,1208,417},{1069,1124,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {5625, 5634, 3425, 5644, 5652, 5660, 5669}, {5675, 5678, 3081, 5682, 5685, 5689, 1275}, {1828, 4532, 1608, 1608, 4532, 2894, 1285}, {5692, 5700, 3504, 5707, 5714, 5719, 5729, 5737, 5743, 5753, 1684, 1693, 0}, {5692, 5700, 3504, 5707, 5714, 5719, 5729, 5737, 5743, 5753, 1684, 1693, 0}, {5761, 5768, 3504, 3579, 5714, 5774, 5781, 5737, 5786, 882, 887, 1742, 0}, {5761, 5768, 3504, 3579, 5714, 5774, 5781, 5737, 5786, 882, 887, 1742, 0}, 2, 1, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{2105,2134,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {5792, 5802, 5807, 5814, 5823, 5827, 5834}, {5845, 2863, 1712, 5850, 5823, 5855, 5860}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {5866, 5875, 5885, 5892, 3515, 5900, 5906, 1659, 5912, 5923, 5933, 5943, 0}, {5866, 5875, 5885, 5892, 3515, 5900, 5906, 1659, 5912, 5923, 5933, 5943, 0}, {5953, 1707, 1712, 1717, 3515, 5958, 5963, 1727, 2986, 882, 887, 1742, 0}, {5953, 1707, 1712, 1717, 3515, 5958, 5963, 1727, 2986, 882, 887, 1742, 0}, 0, 1, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 175, 180, {5968, 5991, 211, 6014, 6025, 6040, 6055}, {6070, 285, 290, 295, 300, 305, 310}, {6075, 6078, 6075, 6081, 6084, 6078, 6081}, {6087, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {6206, 6219, 6234, 6245, 6258, 6265, 6274, 6283, 6298, 6315, 6330, 6343, 0}, {6358, 6366, 360, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, {6358, 6366, 360, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, 0, 1, 11, 3, {681,775,2098,744,9,0,0,0,0,0,0,0,0,0},{199,180,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {6428, 6437, 6449, 6456, 6464, 6474, 6480}, {6487, 6491, 6495, 6499, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {6527, 6537, 6546, 6554, 6562, 6570, 6577, 6584, 6592, 1364, 6598, 6606, 0}, {6615, 6625, 6634, 6642, 6650, 6658, 6665, 6672, 6681, 5385, 6687, 6697, 0}, {6706, 6710, 6715, 6720, 6724, 5419, 1501, 6728, 6732, 1517, 6736, 1521, 0}, {6706, 6710, 6715, 6720, 6724, 5419, 1501, 6728, 6732, 1517, 6736, 1521, 0}, 0, 1, 11, 3, {2151,2161,2169,2181,2193,2203,2213,417,0,0,0,0,0,0},{2225,2239,2254,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {6740, 6748, 6757, 6764, 6771, 6780, 1247}, {1254, 1257, 6787, 1264, 6790, 6794, 1275}, {6516, 6518, 6520, 6522, 6797, 6518, 6522}, {4105, 4113, 6800, 4376, 6806, 6811, 6816, 1659, 1666, 4184, 1684, 1693, 0}, {6821, 6830, 5318, 6840, 6848, 6854, 6860, 6866, 6874, 6884, 6893, 6902, 0}, {5089, 4610, 4512, 4614, 6806, 6811, 6816, 5101, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 6806, 6811, 6816, 5101, 5105, 5109, 4642, 6911, 0}, 2, 1, 11, 3, {681,692,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 185, 197, {6915, 6922, 6931, 6940, 6952, 6960, 6969}, {6979, 6983, 2791, 6988, 6993, 6997, 7001}, {1828, 4089, 1608, 1608, 7005, 1280, 1285}, {7007, 7013, 7020, 7025, 7031, 7035, 7043, 7050, 7056, 7064, 7070, 7078, 0}, {7086, 7092, 3504, 7099, 1645, 7105, 7113, 7120, 7126, 7134, 7140, 7148, 0}, {1914, 7156, 2791, 7160, 7031, 7164, 7168, 7172, 7001, 7176, 7180, 7185, 0}, {1914, 7156, 2791, 7160, 7031, 7164, 7168, 7172, 7001, 7176, 7180, 7185, 0}, 0, 1, 11, 3, {1208,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{2274, 208, 211, {7189, 7197, 7205, 1548, 1555, 1563, 7212}, {7220, 7225, 7230, 1591, 7234, 1599, 7239}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {5011, 5019, 3504, 1639, 1645, 1649, 1654, 7244, 1666, 1676, 1684, 1693, 0}, {5011, 5019, 3504, 1639, 1645, 1649, 1654, 7244, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 3504, 1717, 1645, 1649, 1654, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 3504, 1717, 1645, 1649, 1654, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {417,1690,0,0,0,0,0,0,0,0,0,0,0,0},{2287,2305,0,0,0,0,0,0,0,0},{71,266,2328,0,0,0,0,0,0,0,0,0},{89,271,2338,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, 0, 0, 1, 3, {295,857,9,18,304,2351,417,0,0,0,0,0,0,0},{894,2363,2379,0,0,0,0,0,0,0},{266,71,906,62,0,0,0,0,0,0,0,0},{271,89,914,77,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 214, 219, {7252, 7258, 7268, 7274, 7285, 7295, 7300}, {7310, 7314, 7318, 7322, 7327, 7331, 7335}, {1280, 1280, 1285, 7339, 1280, 5210, 5210}, {7342, 7347, 7354, 7359, 7365, 7372, 7380, 7387, 7396, 7403, 7408, 7415, 0}, {7342, 7347, 7354, 7359, 7365, 7372, 7380, 7387, 7396, 7403, 7408, 7415, 0}, {7423, 7427, 2791, 7432, 2760, 7436, 7440, 7444, 7449, 7453, 7457, 7461, 0}, {7423, 7427, 2791, 7432, 2760, 7436, 7440, 7444, 7449, 7453, 7457, 7461, 0}, 0, 1, 11, 3, {2421,304,0,0,0,0,0,0,0,0,0,0,0,0},{2431,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {7465, 7476, 7489, 7498, 7505, 7518, 7527}, {7465, 7476, 7489, 7498, 7505, 7518, 7527}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, 0, 0, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {7660, 7667, 7673, 7680, 7685, 7691, 7697}, {7703, 7707, 7711, 7715, 7719, 7723, 7727}, {1608, 1285, 1285, 7731, 3099, 2892, 1285}, {7733, 7741, 7750, 1851, 7756, 1861, 1866, 7760, 1878, 1888, 1896, 7768, 0}, {7733, 7741, 7750, 1851, 7756, 1861, 1866, 7760, 1878, 1888, 1896, 7768, 0}, {1914, 1918, 2791, 1927, 7756, 1931, 1935, 7777, 1943, 1947, 1951, 7781, 0}, {1914, 1918, 2791, 1927, 7756, 1931, 1935, 7777, 1943, 1947, 1951, 7781, 0}, 0, 0, 1, 11, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{2462,894,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 223, 228, {7785, 7798, 7817, 7834, 7847, 7860, 7877}, {280, 285, 290, 295, 300, 305, 310}, {7890, 6078, 6075, 6081, 6084, 6078, 6081}, {7893, 7906, 7917, 7934, 7949, 7964, 7979, 7992, 8007, 8024, 8039, 8056, 0}, {8071, 8082, 8095, 8110, 8123, 8136, 8149, 8160, 8173, 8188, 8201, 8220, 0}, {8233, 8240, 8247, 8254, 8261, 8268, 8275, 8282, 8289, 8296, 8303, 8310, 0}, {8233, 8240, 8247, 8254, 8261, 8268, 8275, 8282, 8289, 8296, 8303, 8310, 0}, 0, 1, 11, 3, {681,775,417,0,0,0,0,0,0,0,0,0,0,0},{2481,0,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{2499,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {8317, 8332, 8353, 8368, 8381, 8394, 7877}, {280, 285, 8409, 295, 8414, 305, 310}, {315, 318, 8419, 324, 327, 318, 324}, {8422, 8439, 8448, 8463, 380, 8480, 8495, 8508, 8523, 8540, 8561, 8578, 0}, {8593, 8610, 8623, 8640, 6258, 8659, 8674, 8687, 8700, 8715, 8738, 8757, 0}, {8770, 8240, 8777, 8784, 380, 8791, 8798, 8805, 8289, 8812, 8819, 8826, 0}, {8770, 8240, 8777, 8784, 380, 8791, 8798, 8805, 8289, 8812, 8819, 8826, 0}, 0, 1, 11, 3, {775,0,0,0,0,0,0,0,0,0,0,0,0,0},{894,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{2515,0,0,0,0,0,0,0}},\n\t{673, 39, 233, {8833, 8841, 8852, 8858, 8864, 8873, 1247}, {8879, 5179, 5073, 8884, 8889, 8895, 5202}, {6516, 6518, 8900, 6522, 6524, 6518, 6522}, {1618, 1625, 6800, 1639, 1645, 8902, 8908, 8914, 1666, 1676, 1684, 1693, 0}, {1618, 1625, 6800, 1639, 1645, 8902, 8908, 8914, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 8921, 1732, 1737, 887, 1742, 0}, {1702, 1707, 1712, 1717, 1645, 1722, 868, 8921, 1732, 1737, 887, 1742, 0}, 0, 1, 124, 3, {2529,1455,0,0,0,0,0,0,0,0,0,0,0,0},{2541,2561,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {8926, 8937, 8948, 8959, 8970, 8981, 8987}, {1280, 7005, 1610, 3099, 1278, 7731, 1616}, {1280, 7005, 1610, 3099, 1278, 7731, 1616}, {8996, 9004, 9013, 9020, 3515, 9027, 9033, 1659, 1666, 9039, 1684, 9048, 0}, {8996, 9004, 9013, 9020, 3515, 9027, 9033, 1659, 1666, 9039, 1684, 9048, 0}, {9058, 9063, 9013, 4614, 3515, 9027, 9033, 5101, 9069, 5109, 4642, 9074, 0}, {9058, 9063, 9013, 4614, 3515, 9027, 9033, 5101, 9069, 5109, 4642, 9074, 0}, 2, 1, 11, 3, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{2575,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 238, 248, {9079, 9090, 9100, 9109, 9120, 9132, 9143}, {9153, 9161, 9168, 9174, 9182, 9191, 9199}, {1285, 1280, 1612, 1610, 5210, 1280, 1285}, {9206, 9216, 1633, 9227, 9236, 9242, 9250, 9258, 9266, 9277, 9286, 9296, 0}, {9206, 9216, 1633, 9227, 9236, 9242, 9250, 9258, 9266, 9277, 9286, 9296, 0}, {3566, 857, 1633, 1717, 9236, 9306, 9312, 1727, 2986, 1737, 887, 1742, 0}, {3566, 857, 1633, 1717, 9236, 9306, 9312, 1727, 2986, 1737, 887, 1742, 0}, 0, 1, 11, 3, {681,2583,0,0,0,0,0,0,0,0,0,0,0,0},{2603,2630,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2651,0,0,0,0,0,0,0}},\n\t{925, 255, 266, {9318, 9330, 9342, 9354, 9368, 9383, 9396}, {9410, 9413, 9416, 9419, 9422, 9425, 6790}, {1285, 1280, 9428, 1610, 3099, 1280, 9430}, {9433, 9440, 9448, 9454, 9463, 9472, 9482, 9488, 9499, 9509, 9516, 9526, 0}, {9534, 9541, 9549, 9554, 9565, 9575, 9585, 9592, 9604, 9613, 9620, 9631, 0}, {9641, 9647, 9652, 9657, 9662, 9667, 9674, 9680, 9686, 9692, 9698, 9705, 0}, {9641, 9647, 9652, 9657, 9662, 9667, 9674, 9680, 9686, 9692, 9698, 9705, 0}, 2, 1, 55, 3, {417,0,0,0,0,0,0,0,0,0,0,0,0,0},{2667,2695,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 273, 285, {9712, 9727, 9742, 9757, 9774, 9793, 9804}, {9815, 9822, 9829, 9836, 9843, 9850, 9857}, {0, 0, 0, 0, 0, 0, 0}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 1, 11, 3, {681,775,2098,744,9,0,0,0,0,0,0,0,0,0},{2727,2745,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 297, 304, {10057, 10070, 10083, 10099, 10116, 10131, 10140}, {10057, 10070, 10083, 10099, 10116, 10131, 10140}, {10149, 10152, 10155, 10158, 10161, 10164, 10167}, {10170, 10183, 10194, 10203, 10214, 10219, 10228, 10239, 10246, 10261, 10272, 10285, 0}, {10298, 10313, 10194, 10203, 10326, 10219, 10333, 10239, 10246, 10261, 10272, 10285, 0}, {10170, 10183, 10194, 10203, 10214, 10219, 10228, 10239, 10246, 10261, 10272, 10285, 0}, {10170, 10183, 10194, 10203, 10214, 10219, 10228, 10239, 10246, 10261, 10272, 10285, 0}, 0, 6, 1, 3, {18,9,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 311, 314, {10346, 10359, 10369, 10378, 10388, 10399, 10410}, {10422, 10425, 10430, 10435, 10440, 10445, 10450}, {10422, 10455, 10458, 10461, 10464, 10467, 10470}, {10473, 10482, 10491, 10500, 10509, 10518, 10527, 10536, 10545, 10554, 10564, 10574, 0}, {10584, 10593, 10602, 10611, 10620, 10629, 10638, 10647, 10656, 10665, 10675, 10685, 0}, {10695, 10701, 10707, 10713, 10719, 10725, 10731, 10737, 10743, 10749, 10756, 10763, 0}, {10695, 10701, 10707, 10713, 10719, 10725, 10731, 10737, 10743, 10749, 10756, 10763, 0}, 0, 1, 1, 3, {18,9,755,744,417,0,0,0,0,0,0,0,0,0},{1261,0,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 317, 322, {10770, 10783, 10804, 10823, 10844, 10863, 10876}, {10887, 10894, 10901, 10908, 10915, 10922, 10929}, {10936, 10939, 10939, 10942, 10945, 10948, 10951}, {10954, 10969, 10984, 10993, 11004, 11015, 11028, 11041, 11056, 11075, 11094, 11111, 0}, {11130, 11147, 11164, 11175, 11188, 11201, 11216, 11231, 11248, 11269, 11290, 11309, 0}, {11330, 11337, 11344, 11351, 11358, 11365, 11372, 11379, 11386, 11393, 11400, 11407, 0}, {11330, 11337, 11344, 11351, 11358, 11365, 11372, 11379, 11386, 11393, 11400, 11407, 0}, 0, 1, 11, 3, {681,775,2764,18,2774,864,417,0,0,0,0,0,0,0},{1029,876,2462,1261,2785,2796,2808,2825,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {11414, 11420, 11434, 11457, 11471, 11487, 11494}, {11503, 11506, 11511, 11517, 11521, 11526, 11529}, {4756, 4744, 4746, 4748, 4750, 4752, 4754}, {11533, 11540, 7354, 11547, 2760, 11553, 11559, 11565, 11572, 11581, 11589, 11596, 0}, {11603, 11610, 11617, 11622, 11628, 11632, 11637, 11642, 11649, 11658, 11666, 11673, 0}, {11680, 5609, 4512, 4614, 11628, 11684, 11688, 11692, 11696, 5109, 11700, 11704, 0}, {11680, 5609, 4512, 4614, 11628, 11684, 11688, 11692, 11696, 5109, 11700, 11704, 0}, 0, 1, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{2843,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {11708, 11716, 11727, 11737, 11748, 11757, 11766}, {11776, 11780, 11784, 11788, 11792, 11796, 11800}, {11804, 9428, 9428, 9428, 1612, 1612, 1616}, {11806, 11816, 11824, 11832, 11840, 11848, 11855, 11863, 11871, 11878, 11884, 11891, 0}, {11806, 11899, 11907, 11915, 11923, 11931, 11938, 11946, 11954, 11961, 11967, 11974, 0}, {11982, 11987, 1712, 11992, 11997, 12002, 12007, 12012, 12017, 12022, 12027, 12032, 0}, {11982, 11987, 1712, 11992, 11997, 12002, 12007, 12012, 12017, 12022, 12027, 12032, 0}, 2, 1, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2872,2899,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2920,0,0,0,0,0,0,0}},\n\t{673, 327, 338, {12037, 12047, 12058, 12065, 12072, 12082, 1247}, {12088, 12092, 12097, 12101, 12105, 12110, 12114}, {6516, 6518, 12118, 6522, 6797, 6518, 6522}, {1618, 1625, 12120, 12126, 12132, 8902, 8908, 12137, 1666, 1676, 12144, 1693, 0}, {12153, 12161, 12170, 12177, 12184, 12189, 12196, 12203, 6874, 12211, 12219, 6902, 0}, {5089, 4610, 12228, 4614, 12233, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, {5089, 4610, 12228, 4614, 12233, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, 2, 1, 11, 3, {1208,0,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{2939,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 349, 363, {12245, 190, 211, 6014, 12258, 12275, 12286}, {12299, 12307, 12315, 12323, 12331, 12339, 12347}, {315, 318, 321, 324, 327, 318, 324}, {12355, 343, 360, 369, 12370, 12377, 12386, 401, 414, 433, 450, 465, 0}, {12355, 343, 360, 369, 12370, 12377, 12386, 401, 414, 433, 450, 465, 0}, {12395, 12403, 12411, 6376, 12370, 12419, 12427, 6384, 12435, 6402, 12445, 6420, 0}, {12395, 12403, 12411, 6376, 12370, 12419, 12427, 6384, 12435, 6402, 12445, 6420, 0}, 0, 1, 11, 3, {2953,0,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2963,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12455, 12463, 12472, 12481, 12490, 12497, 12507}, {12516, 12520, 12524, 12528, 12532, 12535, 12539}, {0, 0, 0, 0, 0, 0, 0}, {12543, 12554, 12562, 12572, 12578, 12590, 12599, 12605, 12611, 12619, 12628, 12640, 0}, {12543, 12554, 12562, 12572, 12578, 12590, 12599, 12605, 12611, 12619, 12628, 12640, 0}, {12648, 12652, 12656, 12660, 12664, 1914, 12668, 12672, 12676, 12680, 12684, 12688, 0}, {12648, 12652, 12656, 12660, 12664, 1914, 12668, 12672, 12676, 12680, 12684, 12688, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12692, 12698, 12711, 12722, 12733, 12742, 12754}, {12516, 12764, 12768, 12772, 12532, 12776, 12780}, {0, 0, 0, 0, 0, 0, 0}, {12784, 12792, 12804, 12816, 12828, 12838, 12850, 12859, 12867, 12875, 12885, 12892, 0}, {12784, 12792, 12804, 12816, 12828, 12838, 12850, 12859, 12867, 12875, 12885, 12892, 0}, {2707, 12906, 12910, 12914, 12918, 12922, 12926, 12930, 12934, 12938, 12942, 12946, 0}, {2707, 12906, 12910, 12914, 12918, 12922, 12926, 12930, 12934, 12938, 12942, 12946, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12950, 12957, 12472, 12968, 12490, 12977, 12988}, {12688, 12998, 12524, 12528, 12532, 13002, 13006}, {0, 0, 0, 0, 0, 0, 0}, {13010, 13020, 13029, 13037, 13046, 13059, 13071, 13078, 13085, 13092, 13102, 13114, 0}, {13010, 13020, 13029, 13037, 13046, 13059, 13071, 13078, 13085, 13092, 13102, 13114, 0}, {13127, 12776, 13131, 13135, 12664, 13139, 13143, 12672, 13147, 13151, 13155, 13159, 0}, {13127, 12776, 13131, 13135, 12664, 13139, 13143, 12672, 13147, 13151, 13155, 13159, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {13163, 13168, 13174, 13184, 13196, 13204, 13215}, {13224, 13228, 13232, 13236, 13240, 12535, 13244}, {0, 0, 0, 0, 0, 0, 0}, {13248, 13258, 13268, 13275, 13282, 1861, 13287, 13294, 13301, 13310, 13318, 13326, 0}, {13248, 13258, 13268, 13275, 13282, 1861, 13287, 13294, 13301, 13310, 13318, 13326, 0}, {1914, 1918, 13006, 13334, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 13006, 13334, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {13350, 13357, 13369, 13380, 13393, 13402, 13414}, {12516, 13424, 13428, 13236, 13240, 12535, 13244}, {1285, 1608, 13432, 1610, 1285, 4089, 1608}, {13434, 13258, 13443, 13449, 13282, 1861, 13287, 13294, 13457, 13310, 13318, 13326, 0}, {13467, 13258, 13443, 13449, 13282, 1861, 13287, 13294, 13457, 13310, 13318, 13326, 0}, {1914, 1918, 13478, 13482, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 13478, 13482, 13338, 1931, 1935, 13342, 1943, 1947, 1951, 13346, 0}, 0, 0, 1, 3, {932,3009,0,0,0,0,0,0,0,0,0,0,0,0},{978,997,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 373, 377, {13486, 13493, 13501, 13509, 13518, 13528, 13535}, {13544, 13548, 13552, 13556, 13560, 13564, 13568}, {1285, 1608, 1828, 2735, 1828, 2894, 1285}, {13572, 13581, 13591, 1851, 7756, 13597, 13603, 13609, 1878, 1888, 1896, 7768, 0}, {13572, 13581, 13591, 1851, 7756, 13597, 13603, 13609, 1878, 1888, 1896, 7768, 0}, {13618, 13623, 13628, 13633, 7756, 13638, 13643, 13648, 13653, 13658, 13663, 13668, 0}, {13618, 13623, 13628, 13633, 7756, 13638, 13643, 13648, 13653, 13658, 13663, 13668, 0}, 0, 0, 55, 3, {417,2351,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {13673, 13689, 13714, 13742, 13770, 13798, 13826}, {13845, 13855, 13865, 13875, 13885, 13895, 13905}, {13915, 13919, 13923, 13919, 13927, 13931, 13935}, {13939, 13961, 13989, 14005, 14024, 14040, 14059, 14078, 14100, 14131, 14159, 14184, 0}, {13939, 13961, 13989, 14005, 14024, 14040, 14059, 14078, 14100, 14131, 14159, 14184, 0}, {14212, 14222, 14232, 14242, 14252, 14262, 14272, 14282, 14292, 14302, 14312, 14322, 0}, {14212, 14222, 14232, 14242, 14252, 14262, 14272, 14282, 14292, 14302, 14312, 14322, 0}, 0, 1, 11, 3, {681,3021,0,0,0,0,0,0,0,0,0,0,0,0},{42,1029,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {4231, 14332, 14343, 14353, 14363, 14373, 14387}, {14399, 14403, 14408, 14413, 14417, 14422, 14427}, {1285, 1608, 1610, 1608, 4089, 1614, 1616}, {1618, 1625, 3504, 4376, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 4376, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 2, 1, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{1314,1455,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 381, 409, {14431, 14450, 14469, 14491, 14510, 14532, 14557}, {14576, 14586, 14596, 14609, 14619, 14632, 14648}, {14658, 14662, 14669, 14676, 14683, 14690, 14697}, {14701, 14717, 14736, 14752, 14771, 14778, 14788, 14804, 14820, 14839, 14861, 14877, 0}, {14701, 14717, 14736, 14752, 14771, 14778, 14788, 14804, 14820, 14839, 14861, 14877, 0}, {14896, 14906, 14736, 14752, 14771, 14778, 14919, 14932, 14942, 14955, 14974, 14984, 0}, {14896, 14906, 14736, 14752, 14771, 14778, 14919, 14932, 14942, 14955, 14974, 14984, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{3033, 49, 52, {14997, 15006, 15015, 15025, 15035, 15045, 15057}, {15065, 15070, 15074, 15078, 15082, 15087, 15092}, {15096, 15100, 15103, 15106, 15109, 15113, 15117}, {15120, 15127, 15132, 1851, 15138, 15144, 15151, 15157, 15165, 15175, 15183, 15192, 0}, {15120, 15127, 15132, 1851, 15138, 15144, 15151, 15157, 15165, 15175, 15183, 15192, 0}, {1914, 15202, 2791, 1927, 15206, 15210, 15215, 15219, 15223, 15227, 1951, 15231, 0}, {1914, 15202, 2791, 1927, 15206, 15210, 15215, 15219, 15223, 15227, 1951, 15231, 0}, 0, 0, 1, 3, {18,2351,0,0,0,0,0,0,0,0,0,0,0,0},{3048,3074,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{3094,0,0,0,0,0,0,0}},\n\t{925, 431, 436, {15236, 15248, 15259, 15273, 15285, 15295, 15305}, {15316, 15321, 15326, 15331, 15336, 15341, 15346}, {1285, 2894, 1608, 4532, 1828, 13432, 1616}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, 2, 1, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{109, 441, 444, {15872, 15877, 7673, 7680, 15883, 15890, 7697}, {15897, 15901, 7711, 7715, 15905, 7723, 7727}, {9428, 11804, 1285, 7731, 3099, 2892, 1285}, {7733, 7741, 15909, 1851, 7756, 1931, 15913, 15919, 1878, 1888, 1896, 15924, 0}, {7733, 7741, 15909, 1851, 7756, 1931, 15913, 15919, 1878, 1888, 1896, 15924, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 15933, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 15933, 1943, 1947, 1951, 13346, 0}, 0, 1, 1, 3, {2764,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {15937, 15954, 15971, 15988, 16005, 16022, 16031}, {16042, 16047, 16052, 16057, 16062, 16067, 16072}, {16077, 16080, 6081, 6081, 16083, 16077, 6081}, {16086, 16099, 16110, 16123, 16134, 16145, 16158, 16169, 16180, 16197, 16208, 16221, 0}, {16240, 16253, 16264, 16277, 16288, 16299, 16312, 16323, 16334, 16351, 16362, 16375, 0}, {16394, 16402, 16410, 16418, 16426, 16434, 16442, 16450, 16458, 16466, 16474, 16482, 0}, {16394, 16402, 16410, 16418, 16426, 16434, 16442, 16450, 16458, 16466, 16474, 16482, 0}, 0, 1, 1, 3, {18,3112,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3125, 448, 453, {16490, 16507, 16524, 16541, 16558, 16575, 16584}, {16597, 16605, 16613, 16623, 16633, 16575, 16643}, {16077, 16080, 16651, 16651, 16083, 16077, 16654}, {16657, 16670, 9888, 16685, 9908, 16698, 16707, 9929, 16716, 16733, 16748, 16761, 0}, {6087, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 1, 55, 3, {3132,0,0,0,0,0,0,0,0,0,0,0,0,0},{3141,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{3160,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {16776, 16785, 16794, 16802, 16811, 16820, 16827}, {16776, 16785, 16794, 16802, 16811, 16820, 16827}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {7733, 7741, 16836, 16842, 7756, 1861, 15913, 16849, 13301, 16856, 13318, 16863, 0}, {7733, 7741, 16836, 16842, 7756, 1861, 15913, 16849, 13301, 16856, 13318, 16863, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 16871, 1943, 1947, 1951, 7781, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 16871, 1943, 1947, 1951, 7781, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 0, 0, {16875, 16886, 16895, 16904, 16915, 16925, 16930}, {16937, 16941, 16944, 16947, 16951, 9416, 16954}, {16958, 1828, 1285, 7339, 1280, 9428, 16961}, {16964, 16972, 11617, 11622, 16979, 16984, 16990, 12137, 16996, 17006, 17015, 11673, 0}, {16964, 16972, 11617, 11622, 16979, 16984, 16990, 12137, 16996, 17006, 17015, 11673, 0}, {17023, 17028, 11617, 4614, 16979, 16984, 16990, 12237, 11696, 5109, 17032, 11704, 0}, {17023, 17028, 11617, 4614, 16979, 16984, 16990, 12237, 11696, 5109, 17032, 11704, 0}, 0, 1, 11, 3, {3176,681,0,0,0,0,0,0,0,0,0,0,0,0},{3191,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{3223,0,0,0,0,0,0,0}},\n\t{925, 458, 461, {17037, 17047, 17056, 17065, 17076, 17086, 17091}, {17098, 17102, 17107, 17112, 17117, 7723, 17121}, {17126, 1828, 1285, 5210, 1280, 2892, 1285}, {11533, 11540, 7354, 11547, 2760, 17128, 17133, 17138, 17145, 17153, 11589, 11596, 0}, {11603, 11610, 11617, 11622, 11628, 11632, 11637, 8914, 17160, 17168, 11666, 11673, 0}, {12906, 17175, 2791, 1927, 2760, 17179, 17183, 17187, 7707, 1947, 17191, 17195, 0}, {12906, 17175, 2791, 1927, 2760, 17179, 17183, 17187, 7707, 1947, 17191, 17195, 0}, 0, 1, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {17199, 17214, 17229, 17244, 17261, 17282, 17293}, {17304, 17312, 17320, 17328, 17336, 17346, 17354}, {17362, 16080, 6081, 6084, 6078, 17365, 16651}, {17368, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {17368, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {17383, 12403, 12411, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, {17383, 12403, 12411, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, 0, 1, 11, 3, {681,775,2098,9,417,3258,0,0,0,0,0,0,0,0},{3258,0,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,3278,0,0,0,0,0,0}},\n\t{109, 49, 52, {17393, 17412, 17431, 17456, 17475, 17509, 17534}, {17553, 17563, 17573, 17589, 17599, 17624, 17640}, {17650, 17654, 17661, 17665, 17672, 17679, 17686}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, 0, 0, 55, 11, {755,1062,744,755,744,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{1151,1146,3295,3304,0,0,0,0,0,0,0,0},{1173,1165,3312,3324,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {18518, 18537, 18556, 18578, 18597, 18619, 18644}, {18663, 18673, 18683, 18696, 18706, 18719, 18735}, {18745, 18749, 18756, 18763, 18770, 18777, 18784}, {18788, 18816, 18844, 18860, 18879, 18886, 18896, 18912, 18928, 18956, 18978, 19000, 0}, {18788, 18816, 18844, 18860, 18879, 18886, 18896, 18912, 18928, 18956, 18978, 19000, 0}, {19025, 19044, 18844, 18860, 18879, 18886, 18896, 18912, 19063, 19079, 19095, 19105, 0}, {19025, 19044, 18844, 18860, 18879, 18886, 18896, 18912, 19063, 19079, 19095, 19105, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 5, 8, {19118, 19137, 19156, 19181, 19200, 19222, 19247}, {19266, 19276, 19286, 19302, 19312, 19325, 19341}, {19351, 19355, 19362, 19366, 19373, 19380, 19387}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, {19391, 19413, 19435, 19457, 19476, 19483, 19493, 19509, 19525, 19556, 19578, 19600, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 494, 519, {19625, 19644, 19666, 19691, 19707, 19729, 19748}, {19758, 19772, 19786, 19800, 19811, 19825, 19748}, {19839, 19846, 19853, 19860, 19867, 19874, 19881}, {19885, 19901, 19926, 19945, 19964, 19971, 19984, 19997, 20016, 20047, 20072, 20094, 0}, {19885, 19901, 19926, 19945, 19964, 19971, 19984, 19997, 20016, 20047, 20072, 20094, 0}, {20119, 20127, 20141, 20155, 19964, 19971, 19984, 20166, 20174, 20188, 20199, 20207, 0}, {20119, 20127, 20141, 20155, 19964, 19971, 19984, 20166, 20174, 20188, 20199, 20207, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {20218, 20240, 20262, 20287, 20309, 20334, 20362}, {20384, 20394, 20404, 20417, 20427, 20440, 20456}, {20466, 20470, 20477, 20481, 20488, 20495, 20502}, {20506, 20522, 20547, 20566, 20588, 20595, 20608, 20621, 20640, 20671, 20696, 20715, 0}, {20506, 20522, 20547, 20566, 20588, 20595, 20608, 20621, 20640, 20671, 20696, 20715, 0}, {20740, 20747, 20547, 20763, 20588, 20595, 20608, 20621, 20779, 20801, 20817, 20827, 0}, {20740, 20747, 20547, 20763, 20588, 20595, 20608, 20621, 20779, 20801, 20817, 20827, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 544, 572, {20843, 20865, 20884, 20906, 20925, 20947, 20972}, {20991, 21004, 21014, 21027, 21037, 21050, 21066}, {21076, 21083, 21090, 21097, 21104, 21111, 21118}, {21122, 21138, 21163, 21182, 21204, 21211, 21224, 21237, 21256, 21287, 21312, 21334, 0}, {21122, 21138, 21163, 21182, 21204, 21211, 21224, 21237, 21256, 21287, 21312, 21334, 0}, {21359, 21366, 21163, 21382, 21204, 21211, 21224, 21398, 21405, 21427, 21443, 21456, 0}, {21359, 21366, 21163, 21382, 21204, 21211, 21224, 21398, 21405, 21427, 21443, 21456, 0}, 0, 0, 55, 3, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{3353, 49, 52, {21472, 21500, 21534, 21562, 21590, 21621, 21658}, {21686, 21699, 21718, 21734, 21747, 21766, 21785}, {21795, 21802, 21809, 21816, 21823, 21836, 21843}, {21847, 21866, 21894, 21916, 21935, 21948, 21958, 21971, 21996, 22027, 22052, 22068, 0}, {21847, 21866, 21894, 21916, 21935, 21948, 21958, 21971, 21996, 22027, 22052, 22068, 0}, {22087, 22097, 22116, 22126, 21935, 21948, 21958, 22142, 22149, 22174, 22190, 22200, 0}, {22087, 22097, 22116, 22126, 21935, 21948, 21958, 22142, 22149, 22174, 22190, 22200, 0}, 0, 0, 55, 11, {755,1062,775,2098,0,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{1151,1146,3295,3304,0,0,0,0,0,0,0,0},{1173,1165,3312,3324,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 594, 622, {22213, 22232, 22251, 22276, 22295, 22329, 22354}, {22373, 17563, 17573, 17589, 22383, 22408, 17640}, {0, 0, 0, 0, 0, 0, 0}, {22424, 22449, 22480, 22496, 17787, 17794, 17804, 22515, 22531, 22562, 22584, 22606, 0}, {22424, 22449, 22480, 22496, 17787, 17794, 17804, 22515, 22531, 22562, 22584, 22606, 0}, {22631, 22644, 22480, 22496, 17787, 17794, 17804, 22663, 22670, 22686, 22702, 22712, 0}, {22631, 22644, 22480, 22496, 17787, 17794, 17804, 22663, 22670, 22686, 22702, 22712, 0}, 0, 0, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{3361,0,0,0,0,0,0,0,0,0},{583,591,266,0,0,0,0,0,0,0,0,0},{600,611,271,0,0,0,0,0,0},{3380,3388,0,0,0,0,0,0}},\n\t{1, 644, 656, {14431, 14450, 22725, 14491, 14510, 14532, 14557}, {14576, 14586, 22747, 14609, 14619, 14632, 14648}, {14658, 14662, 14669, 14676, 14683, 14690, 14697}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 22855, 22871, 22896, 22918, 22946, 0}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 22855, 22871, 22896, 22918, 22946, 0}, {22968, 22981, 14736, 23000, 22835, 14778, 22842, 23016, 23023, 23042, 23058, 23080, 0}, {22968, 22981, 14736, 23000, 22835, 14778, 22842, 23016, 23023, 23042, 23058, 23080, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 665, 670, {23096, 23103, 23114, 23127, 23140, 23151, 23164}, {23175, 23180, 23185, 23190, 23195, 23200, 23205}, {23175, 23180, 23185, 23190, 23195, 23200, 23205}, {23210, 23236, 23264, 23294, 23324, 23350, 23380, 23406, 23434, 23458, 23486, 23523, 0}, {23210, 23236, 23264, 23294, 23324, 23350, 23380, 23406, 23434, 23458, 23486, 23523, 0}, {23562, 23574, 23586, 23598, 23610, 23622, 23634, 23646, 23658, 23670, 23683, 23696, 0}, {23562, 23574, 23586, 23598, 23610, 23622, 23634, 23646, 23658, 23670, 23683, 23696, 0}, 0, 1, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3398,3436,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{3468, 675, 697, {23709, 23737, 23765, 23802, 23833, 23867, 23898}, {23932, 23948, 23964, 23989, 24008, 24030, 24049}, {24071, 24078, 24085, 24095, 24105, 24115, 24125}, {24138, 24172, 24209, 24246, 24280, 24311, 24348, 24385, 24425, 24459, 24493, 24542, 0}, {24591, 24622, 24656, 24690, 24721, 24749, 24783, 24817, 24854, 24885, 24916, 24962, 0}, {25008, 25021, 25034, 25047, 25060, 25073, 25086, 25099, 25112, 25125, 25141, 25157, 0}, {25008, 25021, 25034, 25047, 25060, 25073, 25086, 25099, 25112, 25125, 25141, 25157, 0}, 0, 0, 1, 3, {379,388,397,428,417,406,446,439,453,0,0,0,0,0},{3492,3535,3583,3615,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{3652,666,0,0,0,0,0,0}},\n\t{109, 722, 725, {25173, 25182, 25192, 25204, 25217, 25226, 25238}, {25250, 25254, 12926, 25259, 25263, 25267, 25271}, {1285, 25275, 1608, 1608, 11804, 4532, 1285}, {25278, 25285, 25294, 25301, 1857, 25308, 25316, 25327, 25332, 25337, 25344, 25353, 0}, {25278, 25285, 25294, 25301, 1857, 25308, 25316, 25327, 25332, 25337, 25344, 25353, 0}, {25361, 25365, 12926, 25369, 1857, 25373, 25377, 25327, 25332, 25381, 25385, 25390, 0}, {25361, 25365, 12926, 25369, 1857, 25373, 25377, 25327, 25332, 25381, 25385, 25390, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {25395, 25417, 25433, 25452, 25462, 25493, 25509}, {25395, 25417, 25433, 25452, 25462, 25493, 25509}, {25522, 25526, 25522, 25530, 25530, 25534, 25534}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, {25538, 25551, 25570, 25583, 25596, 25609, 25628, 25647, 25660, 25676, 25689, 25714, 0}, 0, 0, 1, 3, {9,417,0,0,0,0,0,0,0,0,0,0,0,0},{894,2363,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{3685,0,0,0,0,0,0,0}},\n\t{109, 728, 753, {25727, 25752, 25771, 25799, 25818, 25843, 25862}, {25884, 25900, 25910, 25929, 25939, 25955, 25965}, {25978, 25985, 25989, 25993, 25997, 26004, 26011}, {26015, 26034, 26050, 26063, 26076, 26098, 26117, 26139, 26155, 26171, 26184, 26200, 0}, {26015, 26034, 26050, 26063, 26076, 26098, 26117, 26139, 26155, 26171, 26184, 26200, 0}, {26216, 26225, 26234, 26243, 26252, 26261, 26273, 26282, 26291, 26300, 26309, 26318, 0}, {26216, 26225, 26234, 26243, 26252, 26261, 26273, 26282, 26291, 26300, 26309, 26318, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{3720,894,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 778, 794, {26327, 26355, 26377, 26396, 26421, 26446, 26465}, {26327, 26355, 26377, 26396, 26421, 26446, 26465}, {26475, 26475, 26479, 26483, 26487, 26491, 26495}, {26499, 26524, 26555, 26565, 26578, 26585, 26598, 26620, 26636, 26661, 26692, 26717, 0}, {26499, 26524, 26555, 26565, 26578, 26585, 26598, 26620, 26636, 26661, 26692, 26717, 0}, {26739, 26749, 26555, 26756, 26578, 26585, 26760, 26767, 26771, 26781, 26797, 26807, 0}, {26739, 26749, 26555, 26756, 26578, 26585, 26760, 26767, 26771, 26781, 26797, 26807, 0}, 0, 0, 55, 3, {744,304,0,0,0,0,0,0,0,0,0,0,0,0},{3747,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {2803, 26814, 2817, 26819, 26829, 26835, 2850}, {26842, 26847, 26852, 26857, 26863, 26868, 26873}, {1828, 1616, 1608, 1608, 2890, 2894, 1285}, {26879, 26887, 26896, 26902, 26908, 26913, 26919, 26925, 26932, 26941, 26949, 26958, 0}, {26967, 26975, 2910, 666, 5557, 26984, 26990, 2933, 5574, 5583, 5591, 26996, 0}, {27005, 13623, 26852, 27010, 26908, 26913, 27015, 27020, 27025, 27030, 13663, 27035, 0}, {27005, 13623, 26852, 27010, 26908, 26913, 27015, 27020, 27025, 27030, 13663, 27035, 0}, 2, 1, 1, 3, {18,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1314,1261,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 644, 804, {27040, 14450, 27068, 14491, 14510, 14532, 14557}, {14576, 14586, 22747, 14609, 14619, 14632, 14648}, {0, 0, 0, 0, 0, 0, 0}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 27087, 27103, 27131, 22918, 22946, 0}, {22760, 22785, 14736, 22816, 22835, 14778, 22842, 27087, 27103, 27131, 22918, 22946, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, {4744, 4746, 4748, 4750, 4752, 4754, 4756, 4758, 4760, 4762, 4765, 4768, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,591,583,0,0,0,0,0,0,0,0},{89,271,611,600,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 816, 828, {27153, 27169, 27185, 27213, 27229, 27272, 27297}, {27153, 27169, 27325, 27213, 27335, 27357, 27370}, {27380, 27384, 27388, 27392, 27396, 27409, 27416}, {27423, 27442, 27467, 27486, 27511, 27524, 27537, 27550, 27572, 27606, 27631, 27659, 0}, {27423, 27442, 27467, 27486, 27511, 27524, 27537, 27550, 27572, 27606, 27631, 27659, 0}, {27687, 27694, 27704, 27486, 27511, 27524, 27537, 27717, 27727, 27740, 27750, 27763, 0}, {27687, 27694, 27704, 27486, 27511, 27524, 27537, 27717, 27727, 27740, 27750, 27763, 0}, 0, 1, 55, 11, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{3304,71,0,0,0,0,0,0,0,0,0,0},{3324,89,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 866, 876, {28241, 28251, 28258, 28271, 28281, 28291, 28301}, {28241, 28251, 28311, 28271, 28281, 28291, 28301}, {28321, 28325, 28329, 28333, 28337, 28341, 28345}, {28349, 28365, 28381, 28391, 28404, 28411, 28418, 28428, 28441, 28460, 28476, 28492, 0}, {28349, 28365, 28381, 28391, 28404, 28411, 28418, 28428, 28441, 28460, 28476, 28492, 0}, {28508, 28518, 28381, 28528, 28404, 28411, 28418, 28538, 28548, 28558, 28568, 28578, 0}, {28508, 28518, 28381, 28528, 28404, 28411, 28418, 28538, 28548, 28558, 28568, 28578, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 381, 409, {28795, 28814, 28833, 28858, 28877, 28899, 28924}, {28943, 14586, 28953, 14609, 28969, 14632, 14648}, {28982, 14662, 28986, 14676, 28990, 14690, 14697}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 14771, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, 0, 0, 1, 3, {932,941,948,957,460,417,968,0,0,0,0,0,0,0},{3800,3820,42,2448,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{3388,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {29173, 29179, 29187, 29195, 29204, 29215, 29221}, {29227, 29230, 3084, 4997, 3090, 29233, 1275}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {29236, 29247, 13591, 1851, 29258, 29264, 2769, 13609, 29269, 1888, 29279, 29288, 0}, {29236, 29247, 13591, 1851, 29258, 29264, 2769, 13609, 29269, 1888, 29279, 29288, 0}, {1914, 1918, 29297, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 7781, 0}, {1914, 1918, 29297, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 7781, 0}, 2, 1, 55, 3, {744,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, {29301, 29308, 29317, 29332, 29343, 29352, 29359, 29366, 29373, 29384, 29397, 29410, 0}, 0, 6, 1, 3, {379,417,0,0,0,0,0,0,0,0,0,0,0,0},{894,1217,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {29415, 29422, 29428, 29435, 29446, 29454, 29463}, {29470, 29474, 2791, 29478, 29482, 29486, 7727}, {29470, 29474, 2791, 29478, 29482, 29486, 7727}, {29490, 29496, 29504, 26902, 29510, 29515, 29521, 26925, 29527, 29537, 29545, 29555, 0}, {29490, 29496, 29504, 26902, 29510, 29515, 29521, 26925, 29527, 29537, 29545, 29555, 0}, {29565, 29569, 2791, 29573, 2760, 29577, 29581, 16871, 15223, 1947, 29585, 13346, 0}, {29565, 29569, 2791, 29573, 2760, 29577, 29581, 16871, 15223, 1947, 29585, 13346, 0}, 0, 0, 1, 3, {932,3009,0,0,0,0,0,0,0,0,0,0,0,0},{978,997,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {29808, 29815, 29823, 29830, 29837, 29845, 29854}, {29861, 29865, 29869, 29873, 29877, 7723, 28638}, {1616, 1616, 1610, 1616, 9428, 2892, 9428}, {29881, 29889, 29899, 29905, 29913, 29918, 29923, 29928, 29935, 16856, 29943, 29951, 0}, {29881, 29889, 29899, 29905, 29913, 29918, 29923, 29928, 29935, 16856, 29943, 29951, 0}, {1914, 29959, 2791, 29963, 2760, 28764, 28768, 29967, 2731, 1947, 29971, 13346, 0}, {1914, 29959, 2791, 29963, 2760, 28764, 28768, 29967, 2731, 1947, 29971, 13346, 0}, 0, 0, 1, 3, {295,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1010,1029,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 928, 939, {29975, 29993, 30008, 30030, 30043, 30057, 30074}, {30098, 30106, 30111, 30030, 30043, 30123, 30130}, {0, 0, 0, 0, 0, 0, 0}, {30144, 30166, 30182, 30202, 30216, 30233, 30248, 30265, 30279, 30292, 30311, 30325, 0}, {30144, 30166, 30182, 30202, 30216, 30233, 30248, 30265, 30279, 30292, 30311, 30325, 0}, {30344, 30359, 30368, 30381, 30388, 30398, 30406, 30416, 30423, 30429, 30441, 30448, 0}, {30344, 30359, 30368, 30381, 30388, 30398, 30406, 30416, 30423, 30429, 30441, 30448, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {30460, 30468, 12472, 12968, 12490, 30479, 30489}, {12516, 12998, 12524, 12528, 12532, 12535, 30498}, {0, 0, 0, 0, 0, 0, 0}, {30502, 30511, 30521, 30529, 7756, 2764, 30537, 30543, 30552, 30561, 30570, 30579, 0}, {30502, 30511, 30521, 30529, 7756, 2764, 30537, 30543, 30552, 30561, 30570, 30579, 0}, {1914, 1918, 13006, 30588, 7756, 1931, 1935, 16871, 15223, 1947, 30592, 13346, 0}, {1914, 1918, 13006, 30588, 7756, 1931, 1935, 16871, 15223, 1947, 30592, 13346, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{3834, 949, 955, {30596, 30604, 30613, 30624, 30634, 30646, 30654}, {12516, 30664, 30669, 30674, 30679, 30683, 30687}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 30691, 30698, 30706, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 30691, 30698, 30706, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 30710, 29573, 30706, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 30710, 29573, 30706, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {775,9,755,0,0,0,0,0,0,0,0,0,0,0},{721,3843,798,2541,3856,3881,0,0,0,0},{71,266,1146,3907,0,0,0,0,0,0,0,0},{89,3919,3934,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3950, 965, 970, {30715, 30722, 30737, 30751, 30767, 30782, 30798}, {4528, 30813, 4512, 30817, 30821, 30825, 30829}, {1285, 9428, 1608, 1280, 1285, 1610, 9428}, {5011, 5019, 30833, 30840, 30847, 1649, 1654, 30852, 30862, 30873, 30882, 30892, 0}, {5011, 5019, 30833, 30840, 30847, 1649, 1654, 30852, 30862, 30873, 30882, 30892, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 5101, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 5101, 5105, 5109, 4642, 6911, 0}, 0, 0, 55, 3, {744,755,417,764,0,0,0,0,0,0,0,0,0,0},{3963,721,2561,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 975, 980, {30902, 30918, 30926, 30934, 30943, 30955, 30965}, {30975, 30981, 30987, 30991, 30995, 31003, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {31010, 31023, 31037, 31046, 30706, 31052, 31057, 31065, 13301, 31078, 13318, 13326, 0}, {31010, 31023, 31037, 31046, 30706, 31052, 31057, 31065, 13301, 31078, 13318, 13326, 0}, {31087, 1918, 31091, 13334, 30706, 31095, 1935, 31099, 1943, 31107, 1951, 13346, 0}, {31087, 1918, 31091, 13334, 30706, 31095, 1935, 31099, 1943, 31107, 1951, 13346, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 985, 988, {31113, 31121, 31129, 31137, 31144, 31152, 31160}, {31168, 31172, 31176, 31180, 7719, 31184, 31188}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {31192, 31200, 31212, 31224, 31229, 31236, 31247, 31258, 31266, 31275, 31288, 31296, 0}, {31192, 31200, 31212, 31224, 31229, 31236, 31247, 31258, 31266, 31275, 31288, 31296, 0}, {31303, 31307, 31311, 31315, 31319, 31323, 31327, 31331, 31335, 31339, 25271, 12918, 0}, {31303, 31307, 31311, 31315, 31319, 31323, 31327, 31331, 31335, 31339, 25271, 12918, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{978,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 991, 1011, {31343, 31356, 31366, 28271, 31376, 31386, 31396}, {31406, 31413, 31420, 31427, 31434, 31441, 31448}, {28325, 28325, 31455, 28333, 31459, 28341, 31463}, {31467, 31474, 31487, 31500, 31513, 31526, 31533, 31543, 31553, 31569, 31582, 31592, 0}, {31467, 31474, 31487, 31500, 31513, 31526, 31533, 31543, 31553, 31569, 31582, 31592, 0}, {31467, 31605, 31612, 31619, 31626, 31526, 31633, 31640, 31647, 31654, 31661, 31668, 0}, {31467, 31605, 31612, 31619, 31626, 31526, 31633, 31640, 31647, 31654, 31661, 31668, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{4575,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {31675, 31683, 31693, 31702, 31712, 31721, 31731}, {31740, 31743, 31746, 31749, 31752, 31755, 31758}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {31761, 31769, 31779, 31786, 7756, 31796, 31801, 31807, 31816, 31827, 31837, 31846, 0}, {31761, 31769, 31779, 31786, 7756, 31796, 31801, 31807, 31816, 31827, 31837, 31846, 0}, {31855, 31860, 31865, 31870, 7756, 31876, 31881, 31886, 31892, 31897, 31903, 31908, 0}, {31855, 31860, 31865, 31870, 7756, 31876, 31881, 31886, 31892, 31897, 31903, 31908, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 1031, 1035, {31913, 31918, 31925, 31933, 31940, 31948, 31954}, {31960, 15901, 29869, 31964, 15905, 31184, 7727}, {9428, 11804, 1610, 9428, 31968, 2892, 1285}, {31971, 31985, 31998, 32014, 32027, 32041, 32054, 32069, 32085, 32101, 32115, 32137, 0}, {31971, 31985, 31998, 32014, 32027, 32041, 32054, 32069, 32085, 32101, 32115, 32137, 0}, {32160, 32164, 25271, 32168, 32172, 32176, 32180, 32184, 32188, 32192, 32196, 32200, 0}, {32160, 32164, 25271, 32168, 32172, 32176, 32180, 32184, 32188, 32192, 32196, 32200, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{3800,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{4019, 1039, 1046, {32204, 32214, 32224, 32234, 32244, 32254, 32264}, {32274, 32281, 32288, 32295, 32302, 32309, 32316}, {32323, 32327, 32331, 32335, 32339, 32343, 32347}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, {32351, 32358, 32365, 32372, 32379, 32386, 32393, 32400, 32407, 32414, 32421, 32431, 0}, 0, 0, 1, 3, {379,388,397,428,417,406,0,0,0,0,0,0,0,0},{4042,4066,4096,4126,4143,0,0,0,0,0},{583,266,71,0,0,0,0,0,0,0,0,0},{600,271,89,0,0,0,0,0,0},{4166,666,0,0,0,0,0,0}},\n\t{109, 975, 1053, {25250, 29474, 32441, 32448, 32458, 32463, 32470}, {25250, 29474, 32477, 32482, 32458, 32487, 32492}, {32497, 1616, 32500, 32503, 17126, 4532, 1825}, {32506, 32513, 32441, 32524, 32530, 32534, 32543, 32550, 32555, 32564, 32569, 32572, 0}, {32506, 32513, 32441, 32524, 32530, 32534, 32543, 32550, 32555, 32564, 32569, 32572, 0}, {32578, 32583, 32591, 32597, 32530, 32602, 32608, 32550, 32614, 32564, 32569, 32620, 0}, {32578, 32583, 32591, 32597, 32530, 32602, 32608, 32550, 32614, 32564, 32569, 32620, 0}, 2, 1, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3125, 1058, 1064, {32625, 32642, 32657, 32674, 32691, 32708, 32717}, {32728, 32733, 32738, 32743, 32748, 32753, 32758}, {32763, 10152, 10155, 10158, 10161, 10164, 10167}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, {32766, 32779, 32792, 32801, 32814, 32821, 32832, 32843, 32858, 32875, 32892, 32907, 0}, 0, 0, 55, 3, {388,397,417,428,0,0,0,0,0,0,0,0,0,0},{4183,4204,4230,4271,4317,0,0,0,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{4331,2717,666,0,0,0,0,0}},\n\t{673, 1070, 1075, {32922, 32930, 32940, 32950, 32959, 32969, 32977}, {32987, 32991, 32996, 33000, 33004, 33008, 13568}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 33012, 33021, 33032, 33041, 33051, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 33012, 33021, 33032, 33041, 33051, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 1, 3, {18,9,775,755,417,0,0,0,0,0,0,0,0,0},{1217,1234,894,0,0,0,0,0,0,0},{71,266,1151,1243,1253,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{4352, 1080, 1085, {33061, 33086, 33111, 33136, 33149, 33164, 33181}, {33196, 33201, 33206, 33211, 33216, 33221, 310}, {16083, 16083, 33226, 6081, 6084, 16083, 6081}, {33229, 33248, 33263, 33285, 33305, 33319, 33333, 33345, 33369, 33391, 33408, 33425, 0}, {33442, 33461, 33476, 33498, 33518, 33534, 33550, 33564, 33590, 33614, 33631, 33425, 0}, {33648, 33657, 33666, 33673, 33680, 33687, 33694, 33701, 33708, 33715, 33722, 33729, 0}, {33648, 33657, 33666, 33673, 33680, 33687, 33694, 33701, 33708, 33715, 33722, 33729, 0}, 0, 1, 11, 3, {681,1208,417,4368,4378,0,0,0,0,0,0,0,0,0},{4391,4426,4455,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{4490,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {33736, 33748, 33759, 33771, 33783, 33793, 33805}, {33820, 33825, 33830, 33835, 33840, 33845, 33850}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {33855, 33864, 33876, 33884, 33889, 33899, 33906, 33915, 33922, 33928, 33937, 33948, 0}, {33855, 33864, 33876, 33884, 33889, 33899, 33906, 33915, 33922, 33928, 33937, 33948, 0}, {33956, 33961, 33966, 33971, 33976, 33981, 33986, 33840, 33991, 33996, 34001, 34006, 0}, {33956, 33961, 33966, 33971, 33976, 33981, 33986, 33840, 33991, 33996, 34001, 34006, 0}, 0, 0, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{4506, 1090, 1092, {34011, 34024, 34032, 34041, 34051, 34061, 34070}, {34082, 34086, 34090, 34094, 34098, 34102, 34106}, {1828, 1616, 1608, 5210, 9428, 4089, 1285}, {34110, 34124, 34135, 34144, 34155, 34167, 34181, 34193, 34206, 34219, 34231, 34244, 0}, {34258, 34275, 34289, 34301, 34315, 34330, 34344, 34356, 34371, 34386, 34400, 34415, 0}, {34431, 34436, 34442, 34448, 34453, 34459, 34465, 34470, 34476, 34481, 15862, 34487, 0}, {34431, 34436, 34442, 34448, 34453, 34459, 34465, 34470, 34476, 34481, 15862, 34487, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{4517,4539,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 13, 19, {538, 547, 555, 563, 572, 579, 589}, {598, 602, 606, 610, 614, 618, 622}, {626, 629, 632, 635, 638, 641, 644}, {647, 653, 660, 666, 672, 677, 682, 689, 695, 704, 712, 721, 0}, {730, 739, 749, 758, 768, 776, 784, 794, 804, 816, 828, 840, 0}, {852, 857, 660, 863, 672, 677, 868, 873, 877, 882, 887, 892, 0}, {852, 857, 660, 863, 672, 677, 868, 873, 877, 882, 887, 892, 0}, 2, 1, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{315,338,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {967, 974, 981, 988, 995, 1002, 1009}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {379,388,397,406,417,428,439,446,453,460,0,0,0,0},{469,491,519,547,562,0,0,0,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{4612, 57, 63, {1747, 1755, 1762, 1771, 1780, 1791, 1799}, {1807, 1810, 1813, 1816, 1819, 1822, 1825}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {681,0,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 5, 8, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 2, 1, 1, 3, {18,9,857,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,876,2462,0,0,0,0,0,0},{71,266,62,906,0,0,0,0,0,0,0,0},{89,271,77,914,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1042, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {34822, 4610, 4512, 5613, 11628, 5093, 5097, 4630, 5105, 34826, 4642, 4646, 0}, {34822, 4610, 4512, 5613, 11628, 5093, 5097, 4630, 5105, 34826, 4642, 4646, 0}, 0, 0, 1, 3, {18,864,9,1054,857,755,417,0,0,0,0,0,0,0},{1069,1124,0,0,0,0,0,0,0,0},{62,906,266,71,0,0,0,0,0,0,0,0},{77,914,271,89,0,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 2, 1, 55, 3, {755,18,9,744,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,266,1151,1243,1253,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{4621, 49, 52, {4442, 4451, 4459, 4468, 4479, 4488, 4497}, {4504, 4508, 4512, 4516, 4520, 4524, 4528}, {1828, 1616, 1608, 1608, 4532, 2894, 1285}, {4534, 4542, 2910, 4551, 4558, 4565, 4572, 2933, 4579, 4589, 712, 4597, 0}, {4534, 4542, 2910, 4551, 4558, 4565, 4572, 2933, 4579, 4589, 712, 4597, 0}, {4606, 4610, 4512, 4614, 4618, 4622, 4626, 4630, 4634, 4638, 4642, 4646, 0}, {4606, 4610, 4512, 4614, 4618, 4622, 4626, 4630, 4634, 4638, 4642, 4646, 0}, 2, 1, 11, 3, {681,2785,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{4629,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {4932, 4939, 4947, 4955, 4964, 4974, 4982}, {4991, 3081, 4994, 4997, 5000, 5003, 5006}, {5009, 1608, 1828, 2735, 1828, 2894, 5009}, {5011, 5019, 5028, 1639, 5034, 1649, 1654, 5038, 1666, 1676, 1684, 1693, 0}, {5011, 5019, 5028, 1639, 5034, 1649, 1654, 5038, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 5047, 1717, 5034, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 5047, 1717, 5034, 1722, 868, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 1, 3, {2764,1054,755,775,2024,417,0,0,0,0,0,0,0,0},{1217,968,894,1304,0,0,0,0,0,0},{266,71,4639,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1100, 1105, {1525, 7197, 34830, 1548, 1555, 1563, 34837}, {1578, 7225, 34845, 1591, 1595, 1599, 34849}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 2, 1, 11, 3, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1042, 165, 170, {2803, 5440, 5454, 5467, 5480, 5493, 2850}, {2803, 34853, 34861, 34868, 34875, 34882, 2850}, {1828, 1285, 1610, 5530, 5530, 1285, 1285}, {5532, 5540, 5550, 666, 5557, 5562, 5568, 2933, 5574, 5583, 5591, 5600, 0}, {5532, 5540, 5550, 666, 5557, 5562, 5568, 2933, 5574, 5583, 5591, 5600, 0}, {5089, 5609, 4512, 5613, 3515, 5093, 5097, 4630, 4634, 5617, 4642, 5621, 0}, {5089, 5609, 4512, 5613, 3515, 5093, 5097, 4630, 4634, 5617, 4642, 5621, 0}, 2, 1, 1, 3, {18,681,744,9,775,755,406,428,417,460,4649,1690,0,0},{1124,1069,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {5792, 5802, 5807, 5814, 5823, 5827, 5834}, {34888, 29474, 2791, 34892, 34896, 34900, 34904}, {1828, 1616, 34909, 1816, 2892, 2894, 1285}, {5866, 5875, 5885, 5892, 3515, 5900, 5906, 1659, 5912, 5923, 5933, 5943, 0}, {5866, 5875, 5885, 5892, 3515, 5900, 5906, 1659, 5912, 5923, 5933, 5943, 0}, {5953, 1707, 1712, 1717, 3515, 5958, 5963, 1727, 2986, 882, 887, 1742, 0}, {5953, 1707, 1712, 1717, 3515, 5958, 5963, 1727, 2986, 882, 887, 1742, 0}, 0, 1, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{4621, 175, 180, {5968, 5991, 211, 6014, 6025, 6040, 6055}, {6070, 285, 290, 295, 300, 305, 310}, {6075, 6078, 6075, 6081, 6084, 6078, 6081}, {6087, 6100, 360, 6115, 380, 6128, 6137, 401, 6146, 6163, 6178, 6191, 0}, {6206, 6219, 6234, 6245, 6258, 6265, 6274, 6283, 6298, 6315, 6330, 6343, 0}, {6358, 6366, 360, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, {6358, 6366, 360, 6376, 380, 6128, 6137, 6384, 6392, 6402, 6410, 6420, 0}, 0, 1, 11, 3, {681,4658,0,0,0,0,0,0,0,0,0,0,0,0},{4675,4699,0,0,0,0,0,0,0,0},{266,0,0,0,0,0,0,0,0,0,0,0},{271,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 208, 211, {7189, 7197, 7205, 1548, 1555, 1563, 7212}, {7220, 7225, 7230, 1591, 7234, 1599, 7239}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {5011, 5019, 3504, 1639, 1645, 1649, 1654, 7244, 1666, 1676, 1684, 1693, 0}, {5011, 5019, 3504, 1639, 1645, 1649, 1654, 7244, 1666, 1676, 1684, 1693, 0}, {1702, 1707, 3504, 1717, 1645, 1649, 1654, 1727, 1732, 1737, 887, 1742, 0}, {1702, 1707, 3504, 1717, 1645, 1649, 1654, 1727, 1732, 1737, 887, 1742, 0}, 2, 1, 55, 3, {744,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {7465, 34912, 7489, 7498, 7505, 7518, 7527}, {7465, 34912, 7489, 7498, 7505, 7518, 7527}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 7578, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, 0, 0, 1, 3, {857,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1010,1029,0,0,0,0,0,0,0,0},{906,266,0,0,0,0,0,0,0,0,0,0},{914,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 1110, 1115, {34919, 34930, 34954, 34984, 35001, 35023, 35032}, {35043, 35047, 35054, 35061, 35065, 35072, 35076}, {4756, 4744, 4746, 4748, 4750, 4752, 4754}, {35080, 9875, 9888, 9897, 9908, 35093, 35102, 9929, 35111, 35128, 35143, 9981, 0}, {35156, 35169, 360, 35182, 380, 35193, 35202, 401, 35211, 35228, 35243, 35256, 0}, {35269, 489, 35276, 496, 380, 35283, 35290, 503, 35297, 517, 35304, 531, 0}, {35269, 489, 35276, 496, 380, 35283, 35290, 503, 35297, 517, 35304, 531, 0}, 0, 1, 11, 3, {681,775,2098,9,417,0,0,0,0,0,0,0,0,0},{894,1261,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 327, 1120, {35311, 35320, 35332, 35341, 35348, 35357, 1247}, {12088, 12092, 35363, 12101, 35368, 35372, 12114}, {6516, 6518, 12118, 6522, 6522, 6518, 6522}, {1618, 1625, 12120, 12126, 1645, 8902, 8908, 12137, 1666, 1676, 12144, 1693, 0}, {12153, 12161, 12170, 12177, 5333, 12189, 12196, 12203, 6874, 12211, 12219, 6902, 0}, {5089, 4610, 12228, 4614, 1645, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, {5089, 4610, 12228, 4614, 1645, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, 2, 1, 124, 3, {692,4717,681,775,417,0,0,0,0,0,0,0,0,0},{798,721,692,0,0,0,0,0,0,0},{71,266,4726,4740,0,0,0,0,0,0,0,0},{89,4753,4770,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 0, 0, {12950, 12957, 12472, 12968, 12490, 12977, 12988}, {12688, 12998, 12524, 12528, 12532, 13002, 13006}, {0, 0, 0, 0, 0, 0, 0}, {13010, 13020, 13029, 13037, 13046, 13059, 13071, 13078, 13085, 13092, 13102, 13114, 0}, {13010, 13020, 13029, 13037, 13046, 13059, 13071, 13078, 13085, 13092, 13102, 13114, 0}, {13127, 12776, 13131, 13135, 12664, 13139, 13143, 12672, 13147, 13151, 13155, 13159, 0}, {13127, 12776, 13131, 13135, 12664, 13139, 13143, 12672, 13147, 13151, 13155, 13159, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{4786, 431, 436, {15236, 15248, 15259, 15273, 15285, 15295, 15305}, {15316, 15321, 15326, 15331, 15336, 15341, 15346}, {1285, 2894, 1608, 4532, 1828, 13432, 1616}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, 2, 1, 55, 3, {417,1690,0,0,0,0,0,0,0,0,0,0,0,0},{4799,4823,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {15579, 15593, 15603, 15614, 15628, 15639, 15650}, {15663, 15668, 15673, 15680, 15686, 15692, 15698}, {1828, 1616, 1608, 5210, 1828, 9428, 1285}, {15703, 15711, 15719, 15726, 15735, 15745, 15755, 15761, 15769, 15784, 15802, 15810, 0}, {15703, 15711, 15719, 15726, 15735, 15745, 15755, 15761, 15769, 15784, 15802, 15810, 0}, {15818, 15822, 15719, 15828, 15832, 15837, 15755, 15843, 15848, 15855, 15862, 15867, 0}, {15818, 15822, 15719, 15828, 15832, 15837, 15755, 15843, 15848, 15855, 15862, 15867, 0}, 2, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 441, 444, {15872, 15877, 7673, 7680, 15883, 15890, 7697}, {15897, 15901, 7711, 7715, 15905, 7723, 7727}, {9428, 11804, 1285, 7731, 3099, 2892, 1285}, {7733, 7741, 15909, 1851, 7756, 1931, 15913, 15919, 1878, 1888, 1896, 15924, 0}, {7733, 7741, 15909, 1851, 7756, 1931, 15913, 15919, 1878, 1888, 1896, 15924, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 15933, 1943, 1947, 1951, 13346, 0}, {1914, 1918, 15909, 1927, 7756, 1931, 1935, 15933, 1943, 1947, 1951, 13346, 0}, 0, 1, 1, 3, {2764,304,0,0,0,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 1133, 1138, {35377, 35392, 35407, 35422, 35439, 16575, 35456}, {35467, 35474, 35481, 35488, 35495, 35502, 35509}, {17362, 16080, 6081, 6084, 6078, 16077, 16651}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {35516, 35169, 360, 35182, 380, 35527, 35534, 401, 35541, 35556, 35569, 35256, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 1, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {17393, 17412, 17431, 17456, 17475, 17509, 17534}, {17553, 17563, 17573, 17589, 17599, 17624, 17640}, {17650, 17654, 17661, 17665, 17672, 17679, 17686}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, {17690, 17718, 17752, 17768, 17787, 17794, 17804, 17820, 17836, 17867, 17889, 17911, 0}, 0, 5, 55, 11, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{1151,1146,3295,3304,0,0,0,0,0,0,0,0},{1173,1165,3312,3324,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 464, 479, {7465, 34912, 7489, 35580, 7505, 7518, 7527}, {18093, 18100, 18110, 18123, 18136, 18146, 18165}, {18187, 18191, 18198, 18205, 18215, 18222, 18235}, {7536, 7547, 7558, 7567, 35589, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 35589, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {18422, 18429, 18277, 18439, 18309, 18316, 18455, 18468, 18475, 18485, 18498, 18508, 0}, {18422, 18429, 18277, 18439, 18309, 18316, 18455, 18468, 18475, 18485, 18498, 18508, 0}, 0, 0, 55, 11, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{3335,894,0,0,0,0,0,0,0,0},{4841,62,266,71,0,0,0,0,0,0,0,0},{4849,77,271,89,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 494, 519, {19625, 19644, 19666, 19691, 19707, 19729, 19748}, {19758, 19772, 19786, 19800, 19811, 19825, 19748}, {19839, 19846, 19853, 19860, 19867, 19874, 19881}, {19885, 19901, 19926, 19945, 19964, 19971, 19984, 19997, 20016, 20047, 20072, 20094, 0}, {19885, 19901, 19926, 19945, 19964, 19971, 19984, 19997, 20016, 20047, 20072, 20094, 0}, {20119, 20127, 20141, 20155, 19964, 19971, 19984, 20166, 20174, 20188, 20199, 20207, 0}, {20119, 20127, 20141, 20155, 19964, 19971, 19984, 20166, 20174, 20188, 20199, 20207, 0}, 0, 1, 55, 3, {2015,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1010,1029,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 381, 409, {28795, 28814, 28833, 28858, 28877, 28899, 28924}, {28943, 14586, 28953, 14609, 28969, 14632, 14648}, {28982, 14662, 28986, 14676, 28990, 14690, 14697}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 14771, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, {14701, 28997, 14736, 29025, 22835, 29044, 14788, 29054, 29070, 29101, 29123, 29148, 0}, 0, 0, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{2979,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 991, 1011, {31343, 31356, 31366, 28271, 31376, 31386, 31396}, {31406, 31413, 31420, 31427, 31434, 31441, 31448}, {28325, 28325, 28325, 28333, 31459, 28341, 31463}, {31467, 31474, 31487, 31500, 31513, 31526, 31533, 31543, 31553, 31569, 31582, 31592, 0}, {31467, 31474, 31487, 31500, 31513, 31526, 31533, 31543, 31553, 31569, 31582, 31592, 0}, {31467, 31605, 31612, 31619, 31626, 31526, 31633, 31640, 31647, 31654, 31661, 31668, 0}, {31467, 31605, 31612, 31619, 31626, 31526, 31633, 31640, 31647, 31654, 31661, 31668, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{3982,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {34493, 34500, 34507, 34514, 34521, 34528, 34535}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {295,857,9,439,460,379,406,417,0,0,0,0,0,0},{469,1484,547,562,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{4612, 57, 63, {1747, 1755, 1762, 1771, 1780, 1791, 1799}, {1807, 1810, 1813, 1816, 1819, 1822, 1825}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {35723, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {35723, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {35731, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {35731, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {681,0,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {35736, 35741, 35746, 35751, 35756, 35761, 35766}, {32987, 35771, 35774, 35778, 35781, 35785, 13568}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {13618, 13623, 26852, 13633, 2760, 13638, 13643, 13648, 13653, 35788, 13663, 27035, 0}, {13618, 13623, 26852, 13633, 2760, 13638, 13643, 13648, 13653, 35788, 13663, 27035, 0}, 0, 0, 1, 3, {2764,1054,857,295,9,18,968,1274,417,460,406,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,266,71,0,0,0,0,0,0,0,0,0},{914,271,89,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1042, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 2890, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, 2, 1, 1, 3, {18,9,1054,857,1062,755,775,417,0,0,0,0,0,0},{1069,1097,1124,0,0,0,0,0,0,0},{266,71,1146,1151,1157,0,0,0,0,0,0,0},{271,89,1165,1173,1182,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 35793, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 35793, 3532, 2986, 882, 887, 3590, 0}, 0, 0, 55, 3, {417,1690,755,4860,9,864,0,0,0,0,0,0,0,0},{894,304,0,0,0,0,0,0,0,0},{71,266,1151,1243,1253,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{4786, 431, 436, {15236, 35800, 35812, 35827, 35838, 35849, 35860}, {15316, 15321, 15326, 15331, 15336, 15341, 15346}, {1285, 1608, 1828, 4532, 1828, 13432, 1616}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15351, 15368, 15381, 15395, 15408, 15421, 15434, 15448, 15460, 15474, 15488, 15502, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, {15515, 15522, 15527, 15532, 15536, 15541, 15546, 15551, 15556, 15563, 15568, 15574, 0}, 2, 1, 11, 3, {1208,681,2098,417,0,0,0,0,0,0,0,0,0,0},{4869,4823,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,0,0,0,0,0,0,0,0,0,0},{77,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {967, 974, 981, 988, 995, 1002, 1009}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {295,857,9,439,460,379,406,417,0,0,0,0,0,0},{469,1484,547,4555,0,0,0,0,0,0},{583,591,266,71,0,0,0,0,0,0,0,0},{600,611,271,89,0,0,0,0,0},{623,639,652,0,0,0,0,0}},\n\t{4612, 57, 63, {1747, 1755, 1762, 1771, 1780, 1791, 1799}, {1807, 1810, 1813, 1816, 1819, 1822, 1825}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {681,0,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 55, 3, {417,18,9,857,1690,4895,968,2796,417,0,0,0,0,0},{997,3800,4903,1475,0,0,0,0,0,0},{906,62,71,266,0,0,0,0,0,0,0,0},{914,77,89,271,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {2764,0,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{4621, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 2, 1, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{4629,0,0,0,0,0,0,0}},\n\t{673, 49, 52, {6428, 6437, 6449, 6456, 6464, 6474, 6480}, {6487, 6491, 6495, 6499, 6503, 6508, 6512}, {1278, 1280, 35872, 1285, 1287, 1280, 1285}, {6527, 6537, 6546, 6554, 6562, 6570, 6577, 6584, 6592, 1364, 6598, 6606, 0}, {6615, 6625, 6634, 6642, 6650, 6658, 6665, 6672, 6681, 5385, 6687, 6697, 0}, {6706, 6710, 6715, 6720, 6724, 5419, 1501, 6728, 6732, 1517, 6736, 1521, 0}, {6706, 6710, 6715, 6720, 6724, 5419, 1501, 6728, 6732, 1517, 6736, 1521, 0}, 0, 1, 11, 3, {2181,4972,0,0,0,0,0,0,0,0,0,0,0,0},{2254,2225,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, 0, 6, 55, 3, {744,755,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{266,71,62,0,0,0,0,0,0,0,0,0},{271,89,77,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {34493, 34500, 34507, 34514, 34521, 34528, 34535}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {295,857,9,439,460,379,406,417,0,0,0,0,0,0},{469,4996,5023,764,547,4555,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{4612, 57, 63, {1747, 1755, 1762, 1771, 1780, 1791, 1799}, {1807, 1810, 1813, 1816, 1819, 1822, 1825}, {1285, 1608, 1828, 1608, 1828, 1614, 1285}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1830, 1837, 1845, 1851, 1857, 1861, 1866, 1871, 1878, 1888, 1896, 1905, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, {1914, 1918, 1922, 1927, 1857, 1931, 1935, 1939, 1943, 1947, 1951, 1955, 0}, 2, 1, 11, 3, {681,0,0,0,0,0,0,0,0,0,0,0,0,0},{798,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{5039, 165, 170, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {2764,0,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 1, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1143, 1154, {6428, 6437, 6449, 6456, 6464, 6474, 6480}, {6487, 6491, 6495, 6499, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 1649, 1654, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 1649, 1654, 8914, 35936, 35946, 35954, 35963, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, 0, 1, 11, 3, {2181,5056,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 32814, 35638, 35976, 35989, 35996, 35684, 36007, 36018, 0}, {35594, 35605, 10194, 35618, 32814, 35638, 35976, 35989, 35996, 35684, 36007, 36018, 0}, {35594, 35605, 10194, 35618, 32814, 35638, 35976, 35989, 35996, 35684, 36007, 36018, 0}, {35594, 35605, 10194, 35618, 32814, 35638, 35976, 35989, 35996, 35684, 36007, 36018, 0}, 0, 6, 55, 3, {744,755,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{266,71,62,0,0,0,0,0,0,0,0,0},{271,89,77,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{5039, 165, 170, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 2, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,906,0,0,0,0,0,0,0,0,0,0},{89,914,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{5092, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {957,0,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1162, 1174, {6428, 36029, 6449, 6456, 6464, 6474, 6480}, {8879, 5179, 36040, 36044, 8889, 8895, 36048}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {1702, 1707, 11617, 1717, 1645, 5093, 5097, 8921, 2986, 1737, 887, 1742, 0}, {1702, 1707, 11617, 1717, 1645, 5093, 5097, 8921, 2986, 1737, 887, 1742, 0}, 0, 1, 11, 3, {2151,2181,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{71,1151,0,0,0,0,0,0,0,0,0,0},{89,1173,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, {35874, 35885, 10194, 35896, 32814, 35907, 35916, 35929, 35671, 35684, 35697, 35710, 0}, 0, 0, 55, 3, {744,755,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{266,71,62,0,0,0,0,0,0,0,0,0},{271,89,77,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {406,2351,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{673, 1183, 1205, {36053, 36068, 36087, 36100, 36115, 36132, 7877}, {12299, 12307, 36143, 36149, 12331, 12339, 36155}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {12395, 36276, 360, 6376, 12370, 36194, 36201, 6384, 12435, 6402, 36284, 36292, 0}, {12395, 36276, 360, 6376, 12370, 36194, 36201, 6384, 12435, 6402, 36284, 36292, 0}, 0, 1, 11, 3, {2151,2181,0,0,0,0,0,0,0,0,0,0,0,0},{721,2561,798,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{5039, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 2, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{3353, 1221, 1239, {36300, 36068, 36087, 36100, 36115, 36132, 7877}, {36313, 36320, 36327, 36334, 36341, 36348, 36355}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 12377, 12386, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 12377, 12386, 401, 36208, 36227, 36242, 36259, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, 0, 1, 11, 3, {1208,2098,692,681,4717,775,5100,417,0,0,0,0,0,0},{721,2561,798,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 0, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {29674, 36383, 29678, 29678, 36385, 36387, 6522}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, 0, 0, 1, 3, {2764,0,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1254, 1174, {8833, 36029, 6449, 8858, 6464, 6474, 6480}, {6487, 6491, 6495, 36389, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, 0, 1, 11, 11, {2151,2181,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{5111, 88, 1264, {36393, 36404, 36416, 36428, 36436, 36447, 36461}, {36471, 36475, 1645, 36479, 36483, 36487, 15346}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {36492, 36510, 36524, 36540, 36556, 36569, 36581, 36595, 36608, 36624, 36640, 36655, 0}, {36492, 36510, 36524, 36540, 36556, 36569, 36581, 36595, 36608, 36624, 36640, 36655, 0}, {36670, 36676, 36683, 36692, 36701, 36707, 36712, 36719, 36725, 36734, 36743, 36751, 0}, {36670, 36676, 36683, 36692, 36701, 36707, 36712, 36719, 36725, 36734, 36743, 36751, 0}, 2, 1, 11, 3, {1208,681,2098,417,0,0,0,0,0,0,0,0,0,0},{5125,0,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {18,2796,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {29490, 36759, 26896, 26902, 29510, 36767, 36773, 26925, 36779, 36789, 36797, 36807, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 36817, 704, 2951, 2961, 0}, {36827, 13623, 26852, 27010, 36832, 13638, 13643, 27020, 27025, 35788, 13663, 36837, 0}, {36827, 13623, 26852, 27010, 36832, 13638, 13643, 27020, 27025, 35788, 13663, 36837, 0}, 0, 0, 1, 3, {2764,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1221, 1205, {36300, 36068, 36087, 6014, 36115, 36132, 7877}, {36313, 36320, 36327, 36842, 36341, 36348, 36355}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, 0, 1, 11, 3, {2181,0,0,0,0,0,0,0,0,0,0,0,0,0},{2225,2239,2254,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5143,0,0,0,0,0,0,0}},\n\t{109, 1268, 1273, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 1, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1162, 1174, {6428, 36029, 6449, 6456, 6464, 6474, 6480}, {8879, 5179, 36040, 36044, 8889, 8895, 36048}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {1702, 1707, 11617, 1717, 1645, 5093, 5097, 8921, 2986, 1737, 887, 1742, 0}, {1702, 1707, 11617, 1717, 1645, 5093, 5097, 8921, 2986, 1737, 887, 1742, 0}, 0, 1, 11, 11, {2151,2181,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, {34654, 34678, 34687, 34696, 34707, 34716, 34729, 34738, 34743, 34754, 34776, 34800, 0}, 0, 1, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{1, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {295,5153,0,0,0,0,0,0,0,0,0,0,0,0},{2462,1261,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 1, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1183, 1205, {36053, 36068, 36087, 36100, 36115, 36132, 7877}, {12299, 12307, 36143, 36149, 12331, 12339, 36155}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {12395, 36276, 360, 6376, 12370, 36194, 36201, 6384, 12435, 6402, 36284, 36292, 0}, {12395, 36276, 360, 6376, 12370, 36194, 36201, 6384, 12435, 6402, 36284, 36292, 0}, 0, 1, 11, 3, {2151,2161,2169,2181,2193,2203,2213,5165,0,0,0,0,0,0},{2225,2239,2254,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, 0, 1, 55, 3, {744,0,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{5143,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {29490, 36759, 26896, 26902, 29510, 36767, 36773, 26925, 36779, 36789, 36797, 36807, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 36817, 704, 2951, 2961, 0}, {36827, 13623, 26852, 27010, 36832, 13638, 13643, 27020, 27025, 35788, 13663, 36837, 0}, {36827, 13623, 26852, 27010, 36832, 13638, 13643, 27020, 27025, 35788, 13663, 36837, 0}, 0, 1, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{266,71,62,906,0,0,0,0,0,0,0,0},{271,89,77,914,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 165, 170, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {1702, 36849, 1712, 3579, 3515, 36855, 3584, 3532, 2986, 882, 887, 3590, 0}, {1702, 36849, 1712, 3579, 3515, 36855, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 6, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{5039, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 2986, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {3410, 3419, 3425, 3431, 3440, 3446, 3455}, {3462, 2863, 1712, 3467, 3472, 3477, 3482}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3487, 3495, 3504, 3509, 3515, 3519, 3524, 3532, 3538, 3548, 712, 3556, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, {3566, 3572, 3504, 3579, 3515, 3519, 3584, 3532, 2986, 882, 887, 3590, 0}, 0, 0, 1, 3, {18,304,0,0,0,0,0,0,0,0,0,0,0,0},{1217,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{1, 1094, 1097, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34542, 34553, 34568, 34585, 34602, 34615, 34628}, {34639, 34642, 34645, 34648, 34651, 10164, 10155}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, {35594, 35605, 10194, 35618, 35629, 35638, 35649, 35660, 35671, 35684, 35697, 35710, 0}, 0, 6, 1, 3, {18,9,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{62,71,266,0,0,0,0,0,0,0,0,0},{77,89,271,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 55, 3, {744,755,1062,2098,417,0,0,0,0,0,0,0,0,0},{1261,894,0,0,0,0,0,0,0,0},{71,266,62,0,0,0,0,0,0,0,0,0},{89,271,4849,77,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 1, 1, 3, {295,857,18,9,417,0,0,0,0,0,0,0,0,0},{1010,1029,0,0,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{98,734,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {2650, 2657, 2664, 2672, 2682, 2691, 2698}, {2707, 2711, 2715, 2719, 2723, 2727, 2731}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {2737, 2745, 2754, 1851, 2760, 2764, 2769, 1871, 1878, 2774, 1896, 2782, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, {1914, 1918, 2791, 1927, 2760, 1931, 1935, 1939, 1943, 2795, 1951, 2799, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{876,894,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{5177,5205,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{4914, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{5092, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {957,0,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{5046,0,0,0,0,0,0,0}},\n\t{925, 13, 19, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {932,941,948,957,460,417,968,0,0,0,0,0,0,0},{3800,3820,42,2448,0,0,0,0,0,0},{906,62,266,71,0,0,0,0,0,0,0,0},{914,77,271,89,0,0,0,0,0},{1193,0,0,0,0,0,0,0}},\n\t{4914, 165, 170, {2803, 2811, 2817, 2824, 2835, 2842, 2850}, {2858, 2863, 1712, 2868, 2874, 2879, 2884}, {1828, 1616, 1608, 1608, 2892, 2894, 1285}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2896, 2902, 2910, 666, 2916, 2921, 2927, 2933, 2940, 704, 2951, 2961, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, {2971, 1707, 1712, 863, 2976, 1722, 868, 2981, 1732, 882, 887, 2992, 0}, 0, 0, 1, 3, {295,304,0,0,0,0,0,0,0,0,0,0,0,0},{4922,4950,0,0,0,0,0,0,0,0},{906,71,0,0,0,0,0,0,0,0,0,0},{914,89,0,0,0,0,0,0,0},{355,0,0,0,0,0,0,0}},\n\t{3353, 1221, 1239, {36300, 36068, 36087, 36100, 36115, 36132, 7877}, {36313, 36320, 36327, 36334, 36341, 36348, 36355}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 12377, 12386, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 12377, 12386, 401, 36208, 36227, 36242, 36259, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, 0, 1, 11, 3, {1208,2098,692,681,4717,775,5100,417,0,0,0,0,0,0},{721,2561,798,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{673, 1143, 1154, {6428, 6437, 6449, 6456, 6464, 6474, 6480}, {6487, 6491, 6495, 6499, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 1649, 1654, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 1649, 1654, 8914, 35936, 35946, 35954, 35963, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, 0, 1, 11, 3, {2181,5056,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{673, 1221, 1205, {36300, 36068, 36087, 6014, 36115, 36132, 7877}, {36313, 36320, 36327, 36842, 36341, 36348, 36355}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, 0, 1, 11, 3, {2181,0,0,0,0,0,0,0,0,0,0,0,0,0},{2225,2239,2254,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{673, 1254, 1174, {8833, 36029, 6449, 8858, 6464, 6474, 6480}, {6487, 6491, 6495, 36389, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 5093, 5097, 8914, 35936, 35946, 35954, 35963, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, 0, 1, 11, 11, {2151,2181,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{5111, 88, 1264, {36393, 36404, 36416, 36428, 36436, 36447, 36461}, {36471, 36475, 1645, 36479, 36483, 36487, 15346}, {1285, 1608, 1610, 2735, 1610, 1614, 1285}, {36492, 36510, 36524, 36540, 36556, 36569, 36581, 36595, 36608, 36624, 36640, 36655, 0}, {36492, 36510, 36524, 36540, 36556, 36569, 36581, 36595, 36608, 36624, 36640, 36655, 0}, {36670, 36676, 36683, 36692, 36701, 36707, 36712, 36719, 36725, 36734, 36743, 36751, 0}, {36670, 36676, 36683, 36692, 36701, 36707, 36712, 36719, 36725, 36734, 36743, 36751, 0}, 2, 1, 11, 3, {1208,681,2098,417,0,0,0,0,0,0,0,0,0,0},{5125,0,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{109, 1110, 1115, {34919, 34930, 34954, 34984, 35001, 35023, 35032}, {35043, 35047, 35054, 35061, 35065, 35072, 35076}, {4756, 4744, 4746, 4748, 4750, 4752, 4754}, {35080, 9875, 9888, 9897, 9908, 35093, 35102, 9929, 35111, 35128, 35143, 9981, 0}, {35156, 35169, 360, 35182, 380, 35193, 35202, 401, 35211, 35228, 35243, 35256, 0}, {35269, 489, 35276, 496, 380, 35283, 35290, 503, 35297, 517, 35304, 531, 0}, {35269, 489, 35276, 496, 380, 35283, 35290, 503, 35297, 517, 35304, 531, 0}, 0, 1, 11, 3, {681,775,2098,9,417,0,0,0,0,0,0,0,0,0},{894,1261,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {967, 974, 981, 988, 995, 1002, 1009}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1100, 1107, 1114, 1124, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {379,388,397,406,417,428,439,446,453,460,0,0,0,0},{469,491,519,547,562,0,0,0,0,0},{266,71,583,591,0,0,0,0,0,0,0,0},{271,89,600,611,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{673, 1100, 1105, {1525, 7197, 34830, 1548, 1555, 1563, 34837}, {1578, 7225, 34845, 1591, 1595, 1599, 34849}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 2, 1, 11, 3, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1143, 1154, {6428, 6437, 6449, 6456, 6464, 6474, 6480}, {6487, 6491, 6495, 6499, 6503, 6508, 6512}, {6516, 6518, 6520, 6522, 6524, 6518, 6522}, {1618, 1625, 11617, 1639, 1645, 1649, 1654, 8914, 35936, 35946, 35954, 35963, 0}, {1618, 1625, 11617, 1639, 1645, 1649, 1654, 8914, 35936, 35946, 35954, 35963, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, {5089, 4610, 4512, 4614, 1645, 5093, 5097, 35972, 5105, 5109, 4642, 6911, 0}, 0, 1, 11, 3, {2181,5056,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{109, 49, 52, {11414, 11420, 11434, 11457, 11471, 11487, 11494}, {11503, 11506, 11511, 11517, 11521, 11526, 11529}, {4756, 4744, 4746, 4748, 4750, 4752, 4754}, {11533, 11540, 7354, 11547, 2760, 11553, 11559, 11565, 11572, 11581, 11589, 11596, 0}, {11603, 11610, 11617, 11622, 11628, 11632, 11637, 11642, 11649, 11658, 11666, 11673, 0}, {11680, 5609, 4512, 4614, 11628, 11684, 11688, 11692, 11696, 5109, 11700, 11704, 0}, {11680, 5609, 4512, 4614, 11628, 11684, 11688, 11692, 11696, 5109, 11700, 11704, 0}, 0, 1, 11, 3, {681,304,0,0,0,0,0,0,0,0,0,0,0,0},{2843,894,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 1133, 1138, {35377, 35392, 35407, 35422, 35439, 16575, 35456}, {35467, 35474, 35481, 35488, 35495, 35502, 35509}, {17362, 16080, 6081, 6084, 6078, 16077, 16651}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {35516, 35169, 360, 35182, 380, 35527, 35534, 401, 35541, 35556, 35569, 35256, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 1, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{925, 665, 670, {23096, 23103, 23114, 23127, 23140, 23151, 23164}, {23175, 23180, 23185, 23190, 23195, 23200, 23205}, {23175, 23180, 23185, 23190, 23195, 23200, 23205}, {23210, 23236, 23264, 23294, 23324, 23350, 23380, 23406, 23434, 23458, 23486, 23523, 0}, {23210, 23236, 23264, 23294, 23324, 23350, 23380, 23406, 23434, 23458, 23486, 23523, 0}, {23562, 23574, 23586, 23598, 23610, 23622, 23634, 23646, 23658, 23670, 23683, 23696, 0}, {23562, 23574, 23586, 23598, 23610, 23622, 23634, 23646, 23658, 23670, 23683, 23696, 0}, 0, 1, 55, 3, {417,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3398,3436,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {34493, 34500, 34507, 34514, 34521, 34528, 34535}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {295,857,9,439,460,379,406,417,0,0,0,0,0,0},{469,1484,547,562,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{370, 25, 32, {897, 907, 917, 927, 937, 947, 957}, {34493, 34500, 34507, 34514, 34521, 34528, 34535}, {1016, 1020, 1024, 1028, 1032, 1036, 1040}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, {1134, 1139, 1144, 1149, 1154, 1159, 1164, 1169, 1174, 1179, 1185, 1191, 0}, 0, 0, 1, 3, {295,857,9,439,460,379,406,417,0,0,0,0,0,0},{469,1484,547,562,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{623,639,652,666,0,0,0,0}},\n\t{2090, 165, 170, {1525, 1533, 1540, 1548, 1555, 1563, 1570}, {5052, 5058, 5063, 5068, 5073, 5078, 5083}, {1285, 1608, 1610, 1612, 1610, 1614, 1616}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {1618, 1625, 3504, 1639, 3515, 1649, 1654, 1659, 1666, 1676, 1684, 4420, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, {5089, 4610, 4512, 4614, 3515, 5093, 5097, 5101, 5105, 5109, 4642, 5113, 0}, 2, 1, 11, 11, {681,1455,0,0,0,0,0,0,0,0,0,0,0,0},{703,721,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 1221, 1205, {36300, 36068, 36087, 6014, 36115, 36132, 7877}, {36313, 36320, 36327, 36842, 36341, 36348, 36355}, {315, 318, 36163, 324, 327, 318, 324}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {36166, 36179, 360, 369, 12370, 36194, 36201, 401, 36208, 36227, 36242, 36259, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, {35269, 36362, 35276, 496, 12370, 36194, 36201, 503, 510, 517, 36369, 36376, 0}, 0, 1, 11, 11, {2151,2181,0,0,0,0,0,0,0,0,0,0,0,0},{5071,2239,0,0,0,0,0,0,0,0},{1151,0,0,0,0,0,0,0,0,0,0,0},{1173,0,0,0,0,0,0,0,0},{4985,0,0,0,0,0,0,0}},\n\t{1, 273, 285, {9712, 9727, 9742, 9757, 9774, 9793, 9804}, {9815, 9822, 9829, 9836, 9843, 9850, 9857}, {0, 0, 0, 0, 0, 0, 0}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {9864, 9875, 9888, 9897, 9908, 9915, 9922, 9929, 9942, 9957, 9970, 9981, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, {9994, 10001, 10008, 10015, 9908, 9915, 9922, 10022, 10029, 10036, 10043, 10050, 0}, 0, 1, 11, 3, {681,775,2098,744,9,0,0,0,0,0,0,0,0,0},{2727,2745,0,0,0,0,0,0,0,0},{71,266,0,0,0,0,0,0,0,0,0,0},{89,271,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{673, 327, 1120, {35311, 35320, 35332, 35341, 35348, 35357, 1247}, {12088, 12092, 35363, 12101, 35368, 35372, 12114}, {6516, 6518, 12118, 6522, 6522, 6518, 6522}, {1618, 1625, 12120, 12126, 1645, 8902, 8908, 12137, 1666, 1676, 12144, 1693, 0}, {12153, 12161, 12170, 12177, 5333, 12189, 12196, 12203, 6874, 12211, 12219, 6902, 0}, {5089, 4610, 12228, 4614, 1645, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, {5089, 4610, 12228, 4614, 1645, 5093, 5097, 12237, 5105, 5109, 12241, 6911, 0}, 2, 1, 124, 3, {692,4717,681,775,417,0,0,0,0,0,0,0,0,0},{798,721,692,0,0,0,0,0,0,0},{71,266,4726,4740,0,0,0,0,0,0,0,0},{89,4753,4770,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}},\n\t{925, 458, 461, {17037, 17047, 17056, 17065, 17076, 17086, 17091}, {17098, 17102, 17107, 17112, 17117, 7723, 17121}, {17126, 1828, 1285, 5210, 1280, 2892, 1285}, {11533, 11540, 7354, 11547, 2760, 17128, 17133, 17138, 17145, 17153, 11589, 11596, 0}, {11603, 11610, 11617, 11622, 11628, 11632, 11637, 8914, 17160, 17168, 11666, 11673, 0}, {12906, 17175, 2791, 1927, 2760, 17179, 17183, 17187, 7707, 1947, 17191, 17195, 0}, {12906, 17175, 2791, 1927, 2760, 17179, 17183, 17187, 7707, 1947, 17191, 17195, 0}, 0, 1, 1, 3, {406,2861,0,0,0,0,0,0,0,0,0,0,0,0},{3239,2997,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{2717,0,0,0,0,0,0,0}},\n\t{1, 464, 479, {7465, 34912, 7489, 35580, 7505, 7518, 7527}, {18093, 18100, 18110, 18123, 18136, 18146, 18165}, {18187, 18191, 18198, 18205, 18215, 18222, 18235}, {7536, 7547, 7558, 7567, 35589, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {7536, 7547, 7558, 7567, 35589, 7585, 7592, 7605, 7614, 7625, 7638, 7649, 0}, {18422, 18429, 18277, 18439, 18309, 18316, 18455, 18468, 18475, 18485, 18498, 18508, 0}, {18422, 18429, 18277, 18439, 18309, 18316, 18455, 18468, 18475, 18485, 18498, 18508, 0}, 0, 0, 55, 11, {755,1062,2098,744,417,0,0,0,0,0,0,0,0,0},{3335,894,0,0,0,0,0,0,0,0},{4841,62,266,71,0,0,0,0,0,0,0,0},{4849,77,271,89,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{109, 889, 899, {28588, 28595, 28601, 28608, 28614, 28620, 28628}, {28638, 28642, 28646, 28650, 28654, 28658, 28662}, {9428, 9428, 9428, 9428, 9428, 9428, 9428}, {28668, 28677, 7020, 28686, 28692, 28698, 28704, 28711, 28717, 28726, 28735, 28743, 0}, {28668, 28677, 7020, 28686, 28692, 28698, 28704, 28711, 28717, 28726, 28735, 28743, 0}, {28752, 28756, 2791, 28760, 2760, 28764, 28768, 28772, 28777, 28781, 28787, 28791, 0}, {28752, 28756, 2791, 28760, 2760, 28764, 28768, 28772, 28777, 28781, 28787, 28791, 0}, 0, 0, 55, 3, {744,755,417,0,0,0,0,0,0,0,0,0,0,0},{2448,42,0,0,0,0,0,0,0,0},{266,71,0,0,0,0,0,0,0,0,0,0},{271,89,0,0,0,0,0,0,0},{98,0,0,0,0,0,0,0}},\n\t{925, 49, 52, {29808, 29815, 29823, 29830, 29837, 29845, 29854}, {29861, 29865, 29869, 29873, 29877, 7723, 28638}, {1616, 1616, 1610, 1616, 9428, 2892, 9428}, {29881, 29889, 29899, 29905, 29913, 29918, 29923, 29928, 29935, 16856, 29943, 29951, 0}, {29881, 29889, 29899, 29905, 29913, 29918, 29923, 29928, 29935, 16856, 29943, 29951, 0}, {1914, 29959, 2791, 29963, 2760, 28764, 28768, 29967, 2731, 1947, 29971, 13346, 0}, {1914, 29959, 2791, 29963, 2760, 28764, 28768, 29967, 2731, 1947, 29971, 13346, 0}, 0, 0, 1, 3, {295,3021,0,0,0,0,0,0,0,0,0,0,0,0},{1010,1029,0,0,0,0,0,0,0,0},{71,0,0,0,0,0,0,0,0,0,0,0},{89,0,0,0,0,0,0,0,0},{734,0,0,0,0,0,0,0}}\n};\n\n\nstatic const NumberFormatEntry number_format_entries [] = {\n\t{11, 1278, 11, 1278, 1280, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1339, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1361, 1370, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 1347, 1310, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 1347, 1310, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1381, 1345, 0, 1351, 1385, 1397, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1409, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1413, 1424, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1435, 1449, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1464, 1474, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1483, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1511, 1345, 1347, 1351, 1313, 1323, 55, 1515, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1520, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1523, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1464, 1527, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1537, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1541, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1310, 1545, 1555, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 0, 1290, 1347, 1310, 1313, 1323, 55, 1332, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1564, 1345, 1347, 1351, 1568, 1587, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1606, 1345, 1347, 1351, 1464, 1527, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1609, 11, 1609, 1613, 1345, 1347, 1351, 1617, 1626, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1635, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1639, 1345, 1643, 1351, 1660, 1688, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1715, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1385, 1397, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1718, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 1336, 1724, 1345, 1727, 1734, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1740, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1744, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1748, 1345, 1347, 1351, 1313, 1323, 55, 1751, 3, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1759, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1762, 1345, 1347, 1351, 1313, 1323, 55, 1355, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1766, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1769, 1783, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1796, 1351, 1799, 1811, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {2, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1822, 1833, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 0, 1345, 0, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1, 1278, 1, 1278, 1843, 1492, 0, 1310, 1313, 1323, 55, 1355, 3, 0, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1852, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1856, 1345, 1859, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 0, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1866, 1876, 55, 1355, 8, 3, 7, 3, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1885, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1336, 11, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1892, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1894, 1345, 1898, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1724, 1345, 1347, 1351, 1313, 1323, 55, 1355, 2, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1727, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1943, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1946, 1345, 1950, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1967, 1345, 1974, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1991, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1995, 1345, 1999, 1351, 1313, 1323, 55, 1355, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 0, 1492, 2009, 1310, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1639, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2028, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 0, 1492, 1347, 1310, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},\n\t{2035, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 0, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 1347, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, -1}},\n\t{11, 1278, 11, 1278, 2037, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2040, 1345, 1347, 1351, 1313, 1323, 55, 1355, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2044, 1345, 2048, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2094, 1345, 2096, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 2136, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 0, 1345, 1347, 1351, 1313, 1323, 55, 1355, 0, 0, 1, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2144, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 1, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 0, 1345, 0, 1351, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2151, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 11, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2158, 1492, 1347, 1310, 1313, 1323, 55, 1751, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2161, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 0, 1345, 0, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 0, 1345, 0, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2165, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1336, 11, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1409, 1345, 1727, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, -1}},\n\t{11, 1278, 11, 1278, 2165, 1345, 1347, 1310, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1766, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2169, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2173, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 0, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 0, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1537, 1345, 1347, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1639, 1345, 2175, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2204, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2037, 1492, 1347, 1310, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1280, 1492, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1339, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1361, 1370, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 2207, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1381, 1345, 0, 1351, 1385, 1397, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1409, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1413, 1424, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1435, 1449, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1483, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1511, 1345, 1347, 1351, 1313, 1323, 55, 1515, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1520, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1523, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1464, 1527, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1537, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1541, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1310, 1545, 1555, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1724, 1290, 1347, 1310, 1313, 1323, 55, 1332, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1564, 1345, 1347, 1351, 1568, 1587, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1606, 1345, 1347, 1351, 1464, 1527, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1609, 11, 1609, 1613, 1345, 1347, 1351, 1617, 1626, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1635, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1639, 1345, 1643, 1351, 1660, 1688, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2217, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1385, 1397, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1718, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 1336, 1724, 1345, 1727, 1734, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1740, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1744, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1748, 1345, 1347, 1351, 1313, 1323, 55, 1751, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1759, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1762, 1345, 1347, 1351, 1313, 1323, 55, 1355, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1766, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1769, 1783, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1796, 1351, 1799, 1811, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {2, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1822, 1833, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1967, 1345, 0, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1, 1278, 1, 1278, 1843, 1492, 0, 1310, 1313, 1323, 55, 1355, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1852, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1856, 1345, 1859, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2221, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1866, 1876, 55, 1355, 8, 3, 7, 3, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1885, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1336, 11, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1892, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1894, 1345, 1898, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1724, 1345, 1347, 1351, 1313, 1323, 55, 1355, 2, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1724, 1345, 1727, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1943, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1946, 1345, 1950, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1967, 1345, 1974, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1991, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1995, 1345, 1999, 1351, 1313, 1323, 55, 1355, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2225, 1492, 2009, 1310, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1639, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},\n\t{2035, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 2231, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 1347, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, -1}},\n\t{11, 1278, 11, 1278, 2037, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2040, 1345, 1347, 1351, 1313, 1323, 55, 1355, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2044, 1345, 2048, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2094, 1345, 2096, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 0, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 2136, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2144, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 1, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2235, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 11, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2158, 1492, 1347, 1310, 1313, 1323, 55, 1751, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2161, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2165, 1345, 0, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2165, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1336, 11, 1336, 1892, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1409, 1345, 1727, 1351, 1313, 1323, 55, 1355, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, -1}},\n\t{11, 1278, 11, 1278, 2165, 1345, 1347, 1310, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1766, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1766, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2173, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 0, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 0, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1537, 1345, 1347, 1351, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1639, 1345, 2175, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2204, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2037, 1492, 1347, 1310, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2248, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1361, 1370, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1537, 1345, 1347, 1310, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 2258, 11, 2258, 1613, 1345, 1347, 1351, 1413, 1424, 55, 1355, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2037, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 2258, 11, 2258, 1613, 1345, 1347, 1351, 1464, 1527, 55, 1355, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 1336, 1357, 1345, 1347, 1310, 1545, 1555, 55, 1355, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1724, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1347, 1351, 1464, 1527, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2260, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2260, 1345, 1643, 1351, 1660, 1688, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1727, 1734, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1751, 1, 0, 1, 2, 1, 2, 2, {3, 2}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2221, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1336, 11, 1336, 2262, 1345, 0, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 1336, 1724, 1345, 1727, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2264, 1492, 2271, 1310, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2304, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 2308, 1492, 1347, 1310, 1313, 1323, 55, 1515, 9, 2, 9, 3, 2, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2311, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2169, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2315, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2325, 1345, 2207, 1351, 1313, 1323, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1413, 1424, 55, 1355, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1464, 1474, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1462, 1492, 1347, 1310, 1495, 1503, 55, 1355, 15, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 1727, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2329, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 0, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1310, 1313, 1323, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1413, 1424, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2339, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1336, 11, 1336, 1613, 1492, 1347, 1310, 1495, 1503, 55, 1355, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2341, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2344, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2354, 1345, 2207, 1351, 1313, 1323, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 2258, 11, 2258, 1613, 1345, 1347, 1351, 1413, 1424, 55, 1355, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2359, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2341, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2363, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2373, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2341, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2377, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1892, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2387, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2391, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2396, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2406, 1345, 1347, 1351, 1464, 1474, 55, 1355, 2, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2391, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2410, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2420, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2423, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 2427, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2435, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2445, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2448, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2423, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2452, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2462, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2467, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 2, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2448, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2477, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2161, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 2, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2448, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2487, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2497, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2501, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2325, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2511, 1345, 1347, 1351, 1464, 1474, 55, 1355, 12, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2515, 1492, 1347, 1310, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2517, 1290, 1295, 1310, 1313, 1323, 55, 1332, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1939, 1345, 1347, 1351, 1313, 1323, 55, 1355, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},\n\t{1278, 11, 1278, 11, 2527, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1943, 1345, 1347, 1351, 1313, 1323, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1313, 1323, 55, 1355, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2260, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2530, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1462, 1345, 1347, 1351, 1464, 1474, 55, 1355, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2391, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2341, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2533, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2541, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1357, 1345, 2427, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2221, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 1378, 1345, 1347, 1310, 1313, 1323, 55, 1355, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1724, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2341, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2221, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2264, 1492, 2271, 1310, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2231, 1345, 1347, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2325, 1345, 2207, 1351, 1313, 1323, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2325, 1345, 2207, 1351, 1313, 1323, 55, 1355, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1724, 1290, 1347, 1310, 1313, 1323, 55, 1332, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 2541, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 1967, 1345, 0, 1351, 1313, 1323, 55, 1355, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 11, 1278, 11, 1357, 1345, 1347, 1351, 1313, 1323, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 2225, 1492, 2009, 1310, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2308, 1492, 1347, 1310, 1313, 1323, 55, 1515, 9, 2, 9, 3, 2, 2, 2, {3, -1}, {3, -1}},\n\t{1278, 1336, 1278, 1336, 0, 1345, 0, 1351, 1495, 1503, 55, 1355, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},\n\t{11, 1278, 11, 1278, 2165, 1345, 0, 1351, 1313, 1323, 55, 1355, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}\n};\n\n\nstatic const CultureInfoEntry culture_entries [] = {\n\t{0x0001, 0x007F, 768, -1, 2546, 2549, 2556, 2571, 2575, 2546, 0, {0, 0, 36860, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0002, 0x007F, 257, -1, 2579, 2582, 2592, 2611, 2615, 2579, 0, {36888, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }},\n\t{0x0003, 0x007F, 257, -1, 2619, 2622, 2630, 2638, 2642, 2619, 0, {36930, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0004, 0x7804, 257, -1, 2646, 2654, 2675, 2682, 2686, 2690, 0, {36950, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }},\n\t{0x0004, 0x0004, 257, -1, 2693, 2700, 2675, 2682, 2686, 2690, 0, {36950, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }},\n\t{0x0005, 0x007F, 257, -1, 2728, 2731, 2737, 2747, 2751, 2728, 0, {36957, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x0006, 0x007F, 257, -1, 2755, 2758, 2765, 2771, 2775, 2755, 0, {36983, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0007, 0x007F, 257, -1, 2779, 2782, 2789, 2797, 2801, 2779, 0, {37004, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x0008, 0x007F, 257, -1, 2805, 2808, 2814, 2831, 2835, 2805, 0, {37029, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }},\n\t{0x0009, 0x007F, 257, -1, 2839, 2842, 2842, 2850, 2854, 2839, 0, {37071, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }},\n\t{0x000A, 0x007F, 257, -1, 2858, 2861, 2869, 2878, 2882, 2858, 0, {37090, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x000B, 0x007F, 257, -1, 2886, 2889, 2897, 2903, 2907, 2886, 0, {37112, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x000C, 0x007F, 257, -1, 2911, 2914, 2921, 2931, 2935, 2911, 0, {37137, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x000D, 0x007F, 257, -1, 2939, 2942, 2949, 2960, 2964, 2939, 0, {37159, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }},\n\t{0x000E, 0x007F, 257, -1, 2968, 2971, 2981, 2988, 2992, 2968, 0, {37196, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x000F, 0x007F, 257, -1, 2996, 2999, 3009, 3019, 3023, 2996, 0, {37212, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }},\n\t{0x0010, 0x007F, 257, -1, 3027, 3030, 3038, 3047, 3051, 3027, 0, {37232, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }},\n\t{0x0011, 0x007F, 257, -1, 3055, 3058, 3067, 3077, 3081, 3055, 0, {37254, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }},\n\t{0x0012, 0x007F, 257, -1, 3085, 3088, 3095, 3105, 3109, 3085, 0, {37281, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }},\n\t{0x0013, 0x007F, 257, -1, 3113, 3116, 3122, 3133, 3137, 3113, 0, {37288, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0014, 0x007F, 257, -1, 3141, 3144, 3154, 3160, 3164, 3168, 0, {36983, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0015, 0x007F, 257, -1, 3171, 3174, 3181, 3188, 3192, 3171, 0, {37310, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0016, 0x007F, 257, -1, 3196, 3199, 3210, 3221, 3225, 3196, 0, {37334, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0017, 0x007F, 257, -1, 3229, 3232, 3240, 3250, 3254, 3229, 0, {37357, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x0018, 0x007F, 257, -1, 3258, 3261, 3270, 3279, 3283, 3258, 0, {37377, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0019, 0x007F, 257, -1, 3287, 3290, 3298, 3313, 3317, 3287, 0, {37396, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x001A, 0x007F, 257, -1, 3321, 3324, 3333, 3342, 3346, 3321, 0, {37442, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }},\n\t{0x001B, 0x007F, 257, -1, 3350, 3353, 3360, 3372, 3376, 3350, 0, {37465, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x001C, 0x007F, 257, -1, 3380, 3383, 3392, 3398, 3402, 3380, 0, {37489, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x001D, 0x007F, 257, -1, 3406, 3409, 3417, 3425, 3429, 3406, 0, {36983, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x001E, 0x007F, 512, -1, 3433, 3436, 3441, 3451, 3455, 3433, 0, {0, 37508, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }},\n\t{0x001F, 0x007F, 257, -1, 3459, 3462, 3470, 3479, 3483, 3459, 0, {37539, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }},\n\t{0x0020, 0x007F, 257, -1, 3487, 3490, 3495, 3504, 3508, 3487, 0, {37553, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0021, 0x007F, 257, -1, 3512, 3515, 3526, 3536, 3540, 3512, 0, {37583, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0022, 0x007F, 257, -1, 3544, 3547, 3557, 3578, 3582, 3544, 0, {37602, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }},\n\t{0x0023, 0x007F, 257, -1, 3586, 3589, 3600, 3621, 3625, 3586, 0, {37648, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }},\n\t{0x0024, 0x007F, 257, -1, 3629, 3632, 3642, 3656, 3660, 3629, 0, {37690, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0025, 0x007F, 257, -1, 3664, 3667, 3676, 3682, 3686, 3664, 0, {37712, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }},\n\t{0x0026, 0x007F, 257, -1, 3690, 3693, 3701, 3711, 3715, 3690, 0, {37732, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }},\n\t{0x0027, 0x007F, 257, -1, 3719, 3722, 3733, 3743, 3747, 3719, 0, {37751, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }},\n\t{0x0028, 0x007F, 257, -1, 3751, 3754, 3760, 3773, 3777, 3751, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0029, 0x007F, 257, -1, 3781, 3784, 3792, 3803, 3807, 3781, 0, {37774, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x002A, 0x007F, 257, -1, 3811, 3814, 3825, 3840, 3844, 3811, 0, {37798, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }},\n\t{0x002B, 0x007F, 257, -1, 3848, 3851, 3860, 3875, 3879, 3848, 0, {37813, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }},\n\t{0x002C, 0x007F, 257, -1, 3883, 3886, 3898, 3910, 3914, 3883, 0, {37843, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }},\n\t{0x002D, 0x007F, 257, -1, 3918, 3921, 3928, 3936, 3940, 3918, 0, {37862, 0, 0, 0}, 45, 45, { 1252, 500, 2, 850, 0, ';' }},\n\t{0x002E, 0x007F, 257, -1, 3944, 3948, 3962, 3980, 3944, 3944, 0, {37882, 0, 0, 0}, 46, 46, { 1252, 870, 10000, 850, 0, ';' }},\n\t{0x002F, 0x007F, 257, -1, 3984, 3987, 3998, 4019, 4023, 3984, 0, {37903, 0, 0, 0}, 47, 47, { 1251, 500, 10007, 866, 0, ';' }},\n\t{0x0030, 0x007F, 257, -1, 4027, 4030, 4045, 4053, 4057, 4027, 0, {0, 0, 0, 0}, 48, 48, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0031, 0x007F, 257, -1, 4061, 4064, 4071, 4080, 4084, 4061, 0, {0, 0, 0, 0}, 49, 49, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0032, 0x007F, 257, -1, 4088, 4091, 4098, 4107, 4111, 4088, 0, {0, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0034, 0x007F, 257, -1, 4115, 4118, 4124, 4133, 4137, 4115, 0, {0, 0, 0, 0}, 51, 51, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0035, 0x007F, 257, -1, 4141, 4144, 4149, 4157, 4161, 4141, 0, {37947, 0, 0, 0}, 52, 52, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0036, 0x007F, 257, -1, 4165, 4168, 4168, 4178, 4182, 4165, 0, {37972, 0, 0, 0}, 53, 53, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0037, 0x007F, 257, -1, 4186, 4189, 4198, 4220, 4224, 4186, 0, {37992, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0038, 0x007F, 257, -1, 4228, 4231, 4239, 4249, 4253, 4228, 0, {38057, 0, 0, 0}, 55, 55, { 1252, 20277, 10079, 850, 0, ';' }},\n\t{0x0039, 0x007F, 257, -1, 4257, 4260, 4266, 4285, 4289, 4257, 0, {38081, 0, 0, 0}, 56, 56, { 0, 500, 2, 1, 0, ',' }},\n\t{0x003A, 0x007F, 257, -1, 4293, 4296, 4304, 4310, 4314, 4293, 0, {38134, 0, 0, 0}, 57, 57, { 0, 500, 2, 1, 0, ';' }},\n\t{0x003B, 0x007F, 257, -1, 4318, 4321, 4335, 4352, 4356, 4318, 0, {38155, 0, 0, 0}, 58, 58, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x003C, 0x007F, 257, -1, 4360, 4363, 4369, 4377, 4381, 4360, 0, {38174, 0, 0, 0}, 59, 59, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x003E, 0x007F, 257, -1, 4385, 4388, 4394, 4408, 4412, 4385, 0, {38195, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x003F, 0x007F, 257, -1, 4416, 4419, 4426, 4446, 4450, 4416, 0, {38212, 0, 0, 0}, 61, 61, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0040, 0x007F, 257, -1, 4454, 4457, 4464, 4481, 4485, 4454, 0, {38254, 0, 0, 0}, 62, 62, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0041, 0x007F, 257, -1, 4489, 4492, 4500, 4510, 4514, 4489, 0, {38294, 0, 0, 0}, 63, 63, { 1252, 500, 10000, 437, 0, ';' }},\n\t{0x0042, 0x007F, 257, -1, 4518, 4521, 4529, 4541, 4545, 4518, 0, {38315, 0, 0, 0}, 64, 64, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0043, 0x007F, 257, -1, 4549, 4552, 4558, 4567, 4571, 4549, 0, {38337, 0, 0, 0}, 65, 65, { 1254, 500, 10029, 857, 0, ';' }},\n\t{0x0044, 0x007F, 257, -1, 4575, 4578, 4584, 4595, 4599, 4575, 0, {38355, 0, 0, 0}, 66, 66, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0045, 0x007F, 257, -1, 4603, 4606, 4613, 4629, 4633, 4603, 0, {38390, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0046, 0x007F, 257, -1, 4637, 4640, 4648, 4667, 4671, 4637, 0, {38461, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0047, 0x007F, 257, -1, 4675, 4678, 4687, 4709, 4713, 4675, 0, {38508, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0048, 0x007F, 257, -1, 4717, 4720, 4725, 4741, 4745, 4717, 0, {0, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0049, 0x007F, 257, -1, 4749, 4752, 4758, 4774, 4778, 4749, 0, {38564, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }},\n\t{0x004A, 0x007F, 257, -1, 4782, 4785, 4792, 4811, 4815, 4782, 0, {38629, 0, 0, 0}, 72, 72, { 0, 500, 2, 1, 0, ',' }},\n\t{0x004B, 0x007F, 257, -1, 1715, 4819, 4827, 4843, 4847, 1715, 0, {38694, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }},\n\t{0x004C, 0x007F, 257, -1, 4851, 4854, 4864, 4883, 4887, 4851, 0, {38759, 0, 0, 0}, 74, 74, { 0, 500, 2, 1, 0, ',' }},\n\t{0x004D, 0x007F, 257, -1, 4891, 4894, 4903, 4925, 4929, 4891, 0, {38803, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }},\n\t{0x004E, 0x007F, 257, -1, 4933, 4936, 4944, 4960, 4964, 4933, 0, {38856, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0050, 0x007F, 257, -1, 4968, 4971, 4981, 4994, 4998, 4968, 0, {38918, 0, 0, 0}, 77, 77, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0051, 0x007F, 257, -1, 5002, 5005, 5013, 5038, 5042, 5002, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0052, 0x007F, 257, -1, 5046, 5049, 5055, 5063, 5067, 5046, 0, {38950, 0, 0, 0}, 79, 79, { 1252, 20285, 10000, 850, 0, ';' }},\n\t{0x0053, 0x007F, 257, -1, 5071, 5074, 5080, 5096, 5100, 5071, 0, {38966, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0054, 0x007F, 257, -1, 5104, 5107, 5111, 5121, 5125, 5104, 0, {39021, 0, 0, 0}, 81, 81, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0055, 0x007F, 257, -1, 5129, 5132, 5140, 5159, 5163, 5129, 0, {39067, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0056, 0x007F, 257, -1, 5167, 5170, 5179, 5186, 5190, 5167, 0, {37090, 0, 0, 0}, 83, 83, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0057, 0x007F, 257, -1, 5194, 5198, 5206, 5225, 5194, 5194, 0, {0, 0, 0, 0}, 84, 84, { 0, 500, 2, 1, 0, ',' }},\n\t{0x005B, 0x007F, 257, -1, 5229, 5232, 5240, 5256, 5260, 5229, 0, {39138, 0, 0, 0}, 85, 85, { 0, 500, 2, 1, 0, ';' }},\n\t{0x005C, 0x007F, 257, -1, 5264, 5268, 5277, 5287, 5264, 5264, 0, {39204, 0, 0, 0}, 86, 86, { 0, 500, 2, 1, 0, ',' }},\n\t{0x005E, 0x007F, 257, -1, 5, 5291, 5299, 5312, 5316, 5, 0, {39243, 0, 0, 0}, 87, 87, { 0, 500, 2, 1, 0, ';' }},\n\t{0x005F, 0x007F, 257, -1, 5320, 5324, 5348, 5371, 5320, 5320, 0, {0, 0, 0, 0}, 88, 88, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0061, 0x007F, 257, -1, 5375, 5378, 5385, 5404, 5408, 5375, 0, {39291, 0, 0, 0}, 89, 89, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0062, 0x007F, 257, -1, 5412, 5415, 5431, 5442, 5446, 5412, 0, {39341, 0, 0, 0}, 90, 90, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0063, 0x007F, 1024, -1, 5450, 5453, 5460, 5469, 5473, 5450, 0, {0, 0, 0, 0}, 91, 91, { 0, 500, 2, 1, 1, ';' }},\n\t{0x0064, 0x007F, 257, -1, 5477, 5481, 5481, 5490, 5477, 5477, 0, {39364, 0, 0, 0}, 92, 92, { 1252, 500, 10000, 437, 0, ';' }},\n\t{0x0067, 0x007F, 257, -1, 5494, 5497, 5503, 5510, 5514, 5494, 0, {0, 0, 0, 0}, 93, 93, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0068, 0x007F, 257, -1, 5518, 5521, 5521, 5527, 5531, 5518, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x006A, 0x007F, 257, -1, 5535, 5538, 5545, 5560, 5564, 5535, 0, {0, 0, 0, 0}, 95, 95, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x006C, 0x007F, 257, -1, 5568, 5572, 5587, 5604, 5568, 5568, 0, {0, 0, 0, 0}, 96, 96, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x006E, 0x007F, 257, -1, 5608, 5611, 5625, 5641, 5645, 5608, 0, {39388, 0, 0, 0}, 97, 97, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x006F, 0x007F, 257, -1, 5649, 5652, 5664, 5676, 5680, 5649, 0, {39412, 0, 0, 0}, 98, 98, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0070, 0x007F, 257, -1, 5684, 5687, 5687, 5692, 5696, 5684, 0, {0, 0, 0, 0}, 99, 99, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x0072, 0x007F, 257, -1, 5700, 5703, 5709, 5716, 5720, 5700, 0, {0, 0, 0, 0}, 100, 100, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0073, 0x007F, 257, -1, 5724, 5727, 5736, 5749, 5753, 5724, 0, {0, 0, 0, 0}, 101, 101, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0075, 0x007F, 257, -1, 5757, 5761, 5770, 5788, 5757, 5757, 0, {0, 0, 0, 0}, 102, 102, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x0077, 0x007F, 257, -1, 5792, 5795, 5802, 5811, 5815, 5792, 0, {0, 0, 0, 0}, 103, 103, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0078, 0x007F, 257, -1, 5819, 5822, 5833, 5843, 5847, 5819, 0, {39439, 0, 0, 0}, 104, 104, { 0, 500, 2, 1, 0, ';' }},\n\t{0x007E, 0x007F, 257, -1, 5851, 5854, 5861, 5871, 5875, 5851, 0, {39452, 0, 0, 0}, 105, 105, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0080, 0x007F, 257, -1, 5879, 5882, 5889, 5906, 5910, 5879, 0, {39472, 0, 0, 0}, 106, 106, { 1256, 20420, 10004, 720, 1, ',' }},\n\t{0x0084, 0x007F, 257, -1, 5914, 5918, 5931, 5950, 5914, 5914, 0, {39508, 0, 0, 0}, 107, 107, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0085, 0x007F, 257, -1, 5954, 5958, 5964, 5982, 5954, 5954, 0, {0, 0, 0, 0}, 108, 108, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0087, 0x007F, 257, -1, 5986, 5989, 5989, 6001, 6005, 5986, 0, {0, 0, 0, 0}, 109, 109, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x0091, 0x007F, 257, -1, 6009, 6012, 6028, 6038, 6042, 6009, 0, {39533, 0, 0, 0}, 110, 110, { 1252, 20285, 10000, 850, 0, ';' }},\n\t{0x0401, 0x0001, 768, 111, 6046, 6052, 6074, 2571, 2575, 2546, 311, {0, 0, 36860, 0}, 111, 111, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0402, 0x0002, 257, 11, 6138, 6144, 6165, 2611, 2615, 2579, 6203, {36888, 0, 0, 0}, 112, 112, { 1251, 21025, 10007, 866, 0, ';' }},\n\t{0x0403, 0x0003, 257, 38, 6206, 6212, 6228, 2638, 2642, 2619, 6246, {36930, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0404, 0x7C04, 257, 126, 6249, 6255, 6277, 6293, 2686, 2690, 6297, {39558, 0, 0, 0}, 114, 114, { 950, 500, 10002, 950, 0, ',' }},\n\t{0x0405, 0x0005, 257, 29, 6300, 6306, 6329, 2747, 2751, 2728, 6359, {36957, 0, 0, 0}, 115, 115, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x0406, 0x0006, 257, 31, 6362, 6368, 6385, 2771, 2775, 2755, 6401, {36983, 0, 0, 0}, 116, 116, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0407, 0x0007, 257, 30, 6404, 6410, 6427, 2797, 2801, 2779, 6449, {37004, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x0408, 0x0008, 257, 46, 6452, 6458, 6473, 2831, 2835, 2805, 6505, {37029, 0, 0, 0}, 118, 118, { 1253, 20273, 10006, 737, 0, ';' }},\n\t{0x0409, 0x0009, 257, 128, 6508, 6514, 6514, 2850, 2854, 2839, 6538, {37071, 0, 0, 0}, 119, 119, { 1252, 37, 10000, 437, 0, ',' }},\n\t{0x040B, 0x000B, 257, 40, 6541, 6547, 6565, 2903, 2907, 2886, 6579, {37112, 0, 0, 0}, 120, 120, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x040C, 0x000C, 257, 42, 6582, 6588, 6604, 2931, 2935, 2911, 6623, {37137, 0, 0, 0}, 121, 121, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x040D, 0x000D, 257, 55, 6626, 6632, 6648, 2960, 2964, 2939, 6672, {37159, 0, 0, 0}, 122, 122, { 1255, 500, 10005, 862, 1, ',' }},\n\t{0x040E, 0x000E, 257, 52, 6675, 6681, 6701, 2988, 2992, 2968, 6724, {37196, 0, 0, 0}, 123, 123, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x040F, 0x000F, 257, 59, 6727, 6733, 6753, 3019, 3023, 2996, 6773, {37212, 0, 0, 0}, 124, 124, { 1252, 20871, 10079, 850, 0, ';' }},\n\t{0x0410, 0x0010, 257, 60, 6776, 6782, 6798, 3047, 3051, 3027, 6816, {37232, 0, 0, 0}, 125, 125, { 1252, 20280, 10000, 850, 0, ';' }},\n\t{0x0411, 0x0011, 257, 63, 6819, 6825, 6842, 3077, 3081, 3055, 6861, {37254, 0, 0, 0}, 126, 126, { 932, 20290, 10001, 932, 0, ',' }},\n\t{0x0412, 0x0012, 257, 67, 6864, 6870, 6891, 3105, 3109, 3085, 6916, {37281, 0, 0, 0}, 127, 127, { 949, 20833, 10003, 949, 0, ',' }},\n\t{0x0413, 0x0013, 257, 92, 6919, 6925, 6945, 3133, 3137, 3113, 6968, {37288, 0, 0, 0}, 128, 128, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0414, 0x7C14, 257, 93, 6971, 6977, 7004, 3160, 3164, 3168, 7026, {36983, 0, 0, 0}, 129, 129, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0415, 0x0015, 257, 101, 7029, 7035, 7051, 3188, 3192, 3171, 7067, {37310, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0416, 0x0016, 257, 15, 7070, 7076, 7096, 3221, 3225, 3196, 7116, {37334, 0, 0, 0}, 131, 131, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0417, 0x0017, 257, 21, 7119, 7125, 7147, 3250, 3254, 3229, 314, {37357, 0, 0, 0}, 132, 132, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x0418, 0x0018, 257, 107, 7166, 7172, 7191, 3279, 3283, 3258, 7211, {37377, 0, 0, 0}, 133, 133, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0419, 0x0019, 257, 109, 7214, 7220, 7237, 3313, 3317, 3287, 7267, {37396, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x041A, 0x001A, 257, 50, 7270, 7276, 7295, 3342, 3346, 3321, 7315, {37442, 0, 0, 0}, 135, 135, { 1250, 500, 10082, 852, 0, ';' }},\n\t{0x041B, 0x001B, 257, 115, 7318, 7324, 7342, 3372, 3376, 3350, 7366, {37465, 0, 0, 0}, 136, 136, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x041C, 0x001C, 257, 2, 7369, 7375, 7394, 3398, 3402, 3380, 7412, {37489, 0, 0, 0}, 137, 137, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x041D, 0x001D, 257, 112, 7415, 7421, 7438, 3425, 3429, 3406, 7456, {36983, 0, 0, 0}, 138, 138, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x041E, 0x001E, 512, 120, 7459, 7465, 7481, 3451, 3455, 3433, 7503, {0, 37508, 0, 0}, 139, 139, { 874, 20838, 10021, 874, 0, ',' }},\n\t{0x041F, 0x001F, 257, 124, 7506, 7512, 7529, 3479, 3483, 3459, 7549, {37539, 0, 0, 0}, 140, 140, { 1254, 20905, 10081, 857, 0, ';' }},\n\t{0x0420, 0x0020, 257, 100, 7552, 7558, 7574, 3504, 3508, 3487, 7600, {37553, 0, 0, 0}, 141, 141, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0421, 0x0021, 257, 53, 7603, 7609, 7632, 3536, 3540, 3512, 7654, {37583, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0422, 0x0022, 257, 127, 7657, 7663, 7683, 3578, 3582, 3544, 7721, {37602, 0, 0, 0}, 143, 143, { 1251, 500, 10017, 866, 0, ';' }},\n\t{0x0423, 0x0023, 257, 17, 7724, 7730, 7751, 3621, 3625, 3586, 7791, {37648, 0, 0, 0}, 144, 144, { 1251, 500, 10007, 866, 0, ';' }},\n\t{0x0424, 0x0024, 257, 114, 7794, 7800, 7821, 3656, 3660, 3629, 7847, {37690, 0, 0, 0}, 145, 145, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0425, 0x0025, 257, 35, 7850, 7856, 7875, 3682, 3686, 3664, 7889, {37712, 0, 0, 0}, 146, 146, { 1257, 500, 10029, 775, 0, ';' }},\n\t{0x0426, 0x0026, 257, 76, 7892, 7898, 7915, 3711, 3715, 3690, 7935, {37732, 0, 0, 0}, 147, 147, { 1257, 500, 10029, 775, 0, ';' }},\n\t{0x0427, 0x0027, 257, 74, 7938, 7944, 7967, 3743, 3747, 3719, 7987, {37751, 0, 0, 0}, 148, 148, { 1257, 500, 10029, 775, 0, ';' }},\n\t{0x0428, 0x7C28, 257, 121, 7990, 8001, 8030, 3773, 3777, 3751, 8066, {0, 0, 0, 0}, 149, 149, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0429, 0x0029, 257, 58, 8069, 8075, 8090, 3803, 3807, 3781, 8114, {37774, 0, 0, 0}, 150, 150, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x042A, 0x002A, 257, 132, 8117, 8123, 8144, 3840, 3844, 3811, 8172, {37798, 0, 0, 0}, 151, 151, { 1258, 500, 10000, 1258, 0, ',' }},\n\t{0x042B, 0x002B, 257, 3, 8175, 8181, 8200, 3875, 3879, 3848, 49, {37813, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }},\n\t{0x042C, 0x782C, 257, 7, 8234, 8245, 8277, 3910, 3914, 3883, 8303, {37843, 0, 0, 0}, 153, 153, { 1254, 20905, 10081, 857, 0, ';' }},\n\t{0x042D, 0x002D, 257, 38, 8306, 8312, 8327, 3936, 3940, 3918, 6246, {37862, 0, 0, 0}, 154, 154, { 1252, 500, 2, 850, 0, ';' }},\n\t{0x042E, 0x002E, 257, 30, 8346, 8353, 8377, 3980, 3944, 3944, 6449, {37882, 0, 0, 0}, 155, 155, { 1252, 870, 10000, 850, 0, ';' }},\n\t{0x042F, 0x002F, 257, 82, 8405, 8411, 8434, 4019, 4023, 3984, 8478, {37903, 0, 0, 0}, 156, 156, { 1251, 500, 10007, 866, 0, ';' }},\n\t{0x0430, 0x0030, 257, 134, 8481, 8487, 4045, 4053, 4057, 4027, 8517, {0, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0431, 0x0031, 257, 134, 8520, 8526, 4071, 4080, 4084, 4061, 8517, {0, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0432, 0x0032, 257, 134, 8548, 8554, 4098, 4107, 4111, 4088, 8517, {0, 0, 0, 0}, 159, 159, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0434, 0x0034, 257, 134, 8576, 8582, 4124, 4133, 4137, 4115, 8517, {0, 0, 0, 0}, 160, 160, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0435, 0x0035, 257, 134, 8603, 8609, 8629, 4157, 4161, 4141, 8517, {37947, 0, 0, 0}, 161, 161, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0436, 0x0036, 257, 134, 8654, 8660, 8685, 4178, 4182, 4165, 8517, {37972, 0, 0, 0}, 162, 162, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0437, 0x0037, 257, 44, 8709, 8715, 8734, 4220, 4224, 4186, 8789, {37992, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0438, 0x0038, 257, 41, 8792, 8798, 8822, 4249, 4253, 4228, 8843, {38057, 0, 0, 0}, 164, 164, { 1252, 20277, 10079, 850, 0, ';' }},\n\t{0x0439, 0x0039, 257, 56, 8846, 8852, 8866, 4285, 4289, 4257, 8900, {38081, 0, 0, 0}, 165, 165, { 0, 500, 2, 1, 0, ',' }},\n\t{0x043A, 0x003A, 257, 87, 8903, 8909, 8925, 4310, 4314, 4293, 8939, {38134, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ';' }},\n\t{0x043B, 0x003B, 257, 93, 8942, 8948, 8971, 4352, 4356, 4318, 7026, {38155, 0, 0, 0}, 167, 167, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x043E, 0x003E, 257, 89, 8996, 9002, 9019, 4408, 4412, 4385, 9044, {38195, 0, 0, 0}, 168, 168, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x043F, 0x003F, 257, 69, 9047, 9053, 9073, 4446, 4450, 4416, 9114, {38212, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0440, 0x0040, 257, 65, 9117, 9123, 9143, 4481, 4485, 4454, 9183, {38254, 0, 0, 0}, 170, 170, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0441, 0x0041, 257, 64, 9186, 9192, 9208, 4510, 4514, 4489, 9226, {38294, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ';' }},\n\t{0x0442, 0x0042, 257, 122, 9229, 9235, 9258, 4541, 4545, 4518, 9286, {38315, 0, 0, 0}, 172, 172, { 1250, 20880, 10029, 852, 0, ';' }},\n\t{0x0443, 0x7C43, 257, 130, 9289, 9300, 9326, 4567, 4571, 4549, 9350, {38337, 0, 0, 0}, 173, 173, { 1254, 500, 10029, 857, 0, ';' }},\n\t{0x0444, 0x0044, 257, 109, 9353, 9359, 9374, 4595, 4599, 4575, 7267, {38355, 0, 0, 0}, 174, 174, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0445, 0x0045, 257, 56, 9400, 9406, 9421, 4629, 4633, 4603, 8900, {38390, 0, 0, 0}, 175, 175, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0447, 0x0047, 257, 56, 9452, 9458, 9475, 4709, 4713, 4675, 8900, {38508, 0, 0, 0}, 176, 176, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0448, 0x0048, 257, 56, 9512, 9518, 9531, 4741, 4745, 4717, 8900, {0, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0449, 0x0049, 257, 56, 9562, 9568, 9582, 4774, 4778, 4749, 8900, {38564, 0, 0, 0}, 178, 178, { 0, 500, 2, 1, 0, ',' }},\n\t{0x044A, 0x004A, 257, 56, 9622, 9628, 9643, 4811, 4815, 4782, 8900, {38629, 0, 0, 0}, 179, 179, { 0, 500, 2, 1, 0, ',' }},\n\t{0x044B, 0x004B, 257, 56, 9690, 9696, 9712, 4843, 4847, 1715, 8900, {38694, 0, 0, 0}, 180, 180, { 0, 500, 2, 1, 0, ',' }},\n\t{0x044C, 0x004C, 257, 56, 9743, 9749, 9767, 4883, 4887, 4851, 8900, {38759, 0, 0, 0}, 181, 181, { 0, 500, 2, 1, 0, ',' }},\n\t{0x044D, 0x004D, 257, 56, 9807, 9813, 9830, 4925, 4929, 4891, 8900, {38803, 0, 0, 0}, 182, 182, { 0, 500, 2, 1, 0, ',' }},\n\t{0x044E, 0x004E, 257, 56, 9867, 9873, 9889, 4960, 4964, 4933, 8900, {38856, 0, 0, 0}, 183, 183, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0450, 0x7850, 257, 85, 9920, 9926, 9947, 9975, 4998, 4968, 9979, {38918, 0, 0, 0}, 184, 184, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0451, 0x0051, 257, 25, 9982, 9988, 10004, 5038, 5042, 5002, 10050, {0, 0, 0, 0}, 185, 185, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0452, 0x0052, 257, 43, 10053, 10059, 10082, 5063, 5067, 5046, 10109, {38950, 0, 0, 0}, 186, 186, { 1252, 20285, 10000, 850, 0, ';' }},\n\t{0x0453, 0x0053, 257, 66, 10112, 10118, 10135, 5096, 5100, 5071, 10175, {38966, 0, 0, 0}, 187, 187, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0454, 0x0054, 257, 70, 10178, 10184, 10195, 5121, 5125, 5104, 10217, {39021, 0, 0, 0}, 188, 188, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0455, 0x0055, 257, 84, 10220, 10226, 10252, 5159, 5163, 5129, 10292, {39067, 0, 0, 0}, 189, 189, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0456, 0x0056, 257, 38, 10295, 10301, 10318, 5186, 5190, 5167, 6246, {37090, 0, 0, 0}, 190, 190, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0457, 0x0057, 257, 56, 10335, 10342, 10358, 5225, 5194, 5194, 8900, {0, 0, 0, 0}, 191, 191, { 0, 500, 2, 1, 0, ',' }},\n\t{0x045B, 0x005B, 257, 73, 10392, 10398, 10418, 5256, 5260, 5229, 10468, {39138, 0, 0, 0}, 192, 192, { 0, 500, 2, 1, 0, ';' }},\n\t{0x045E, 0x005E, 257, 39, 10471, 10477, 10496, 5312, 5316, 5, 10527, {39243, 0, 0, 0}, 193, 193, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0461, 0x0061, 257, 94, 10530, 10536, 10551, 5404, 5408, 5375, 10588, {39291, 0, 0, 0}, 194, 194, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0462, 0x0062, 257, 92, 10591, 10597, 10627, 5442, 5446, 5412, 6968, {39341, 0, 0, 0}, 195, 195, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0463, 0x0063, 1024, 1, 10650, 10656, 10677, 5469, 5473, 5450, 10707, {0, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 1, ';' }},\n\t{0x0464, 0x0064, 257, 99, 10710, 10717, 10740, 5490, 5477, 5477, 10761, {39364, 0, 0, 0}, 197, 197, { 1252, 500, 10000, 437, 0, ';' }},\n\t{0x0468, 0x7C68, 257, 90, 10764, 10775, 10798, 5527, 5531, 5518, 10815, {0, 0, 0, 0}, 198, 198, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x046A, 0x006A, 257, 90, 10818, 10824, 10841, 5560, 5564, 5535, 10815, {0, 0, 0, 0}, 199, 199, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x046C, 0x006C, 257, 134, 10887, 10894, 5587, 5604, 5568, 5568, 8517, {0, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x046E, 0x006E, 257, 75, 10924, 10930, 10957, 5641, 5645, 5608, 10987, {39388, 0, 0, 0}, 201, 201, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x046F, 0x006F, 257, 45, 10990, 10996, 11020, 5676, 5680, 5649, 11051, {39412, 0, 0, 0}, 202, 202, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0470, 0x0070, 257, 90, 11054, 11060, 11060, 5692, 5696, 5684, 10815, {0, 0, 0, 0}, 203, 203, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x0472, 0x0072, 257, 39, 11075, 11081, 11098, 5716, 5720, 5700, 10527, {0, 0, 0, 0}, 204, 204, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0473, 0x0073, 257, 39, 11118, 11124, 11144, 11175, 5753, 5724, 10527, {0, 0, 0, 0}, 205, 205, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0475, 0x0075, 257, 128, 11179, 11186, 11211, 5788, 5757, 5757, 6538, {0, 0, 0, 0}, 206, 206, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x0477, 0x0077, 257, 117, 11254, 11260, 11277, 5811, 5815, 5792, 11299, {0, 0, 0, 0}, 207, 207, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0478, 0x0078, 257, 25, 11302, 11308, 11327, 5843, 5847, 5819, 10050, {39439, 0, 0, 0}, 208, 208, { 0, 500, 2, 1, 0, ';' }},\n\t{0x047E, 0x007E, 257, 42, 11346, 11352, 11368, 5871, 5875, 5851, 6623, {39452, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0480, 0x0080, 257, 25, 11387, 11393, 11408, 5906, 5910, 5879, 10050, {39472, 0, 0, 0}, 210, 210, { 1256, 20420, 10004, 720, 1, ',' }},\n\t{0x0484, 0x0084, 257, 42, 11438, 11445, 11467, 5950, 5914, 5914, 6623, {39508, 0, 0, 0}, 211, 211, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0485, 0x0085, 257, 109, 11499, 11506, 11521, 5982, 5954, 5954, 7267, {0, 0, 0, 0}, 212, 212, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0487, 0x0087, 257, 110, 11560, 11566, 11566, 6001, 6005, 5986, 11587, {0, 0, 0, 0}, 213, 213, { 1252, 37, 10000, 437, 0, ';' }},\n\t{0x0491, 0x0091, 257, 43, 11590, 11596, 11629, 6038, 6042, 6009, 10109, {39533, 0, 0, 0}, 214, 214, { 1252, 20285, 10000, 850, 0, ';' }},\n\t{0x0801, 0x0001, 257, 57, 11665, 11671, 11685, 11715, 2575, 2546, 11719, {39565, 0, 0, 0}, 215, 215, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0803, 0x0403, 257, 38, 11722, 6212, 6228, 11737, 2642, 2619, 6246, {36930, 0, 0, 0}, 216, 216, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0804, 0x0004, 257, 25, 11741, 2654, 11747, 2682, 2686, 2690, 10050, {36950, 0, 0, 0}, 217, 217, { 936, 500, 10008, 936, 0, ',' }},\n\t{0x0807, 0x0007, 257, 21, 11763, 11769, 11790, 11808, 2801, 2779, 314, {37004, 0, 0, 0}, 218, 218, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x0809, 0x0009, 257, 43, 11812, 11818, 11818, 11843, 2854, 2839, 10109, {37071, 0, 0, 0}, 219, 219, { 1252, 20285, 10000, 850, 0, ',' }},\n\t{0x080A, 0x000A, 257, 88, 11847, 11853, 11870, 11889, 2882, 2858, 11893, {37232, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }},\n\t{0x080C, 0x000C, 257, 10, 11896, 11902, 11919, 11940, 2935, 2911, 11944, {37137, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0810, 0x0010, 257, 21, 11947, 11953, 11975, 11995, 3051, 3027, 314, {37232, 0, 0, 0}, 222, 222, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0813, 0x0013, 257, 10, 11999, 12005, 12021, 12042, 3137, 3113, 11944, {37288, 0, 0, 0}, 223, 223, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0814, 0x7814, 257, 93, 12046, 12052, 12079, 12095, 12099, 12103, 7026, {36983, 0, 0, 0}, 224, 224, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x0816, 0x0016, 257, 103, 12106, 12112, 12134, 444, 3225, 3196, 12156, {39597, 0, 0, 0}, 225, 225, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0818, 0x0018, 257, 80, 12159, 12165, 12184, 12213, 3283, 3258, 12217, {37377, 0, 0, 0}, 226, 226, { 1250, 500, 2, 852, 0, ';' }},\n\t{0x0819, 0x0019, 257, 80, 12220, 12226, 12244, 12276, 3317, 3287, 12217, {37396, 0, 0, 0}, 227, 227, { 1251, 500, 2, 866, 0, ';' }},\n\t{0x081D, 0x001D, 257, 40, 12280, 12286, 12304, 12322, 3429, 3406, 6579, {36983, 0, 0, 0}, 228, 228, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x0820, 0x0020, 257, 56, 12326, 12332, 12345, 12367, 3508, 3487, 8900, {37553, 0, 0, 0}, 229, 229, { 1256, 500, 2, 720, 1, ';' }},\n\t{0x082C, 0x742C, 257, 7, 12371, 12382, 8277, 12417, 3914, 3883, 8303, {37843, 0, 0, 0}, 230, 230, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x082E, 0x7C2E, 257, 30, 12421, 12428, 12452, 12478, 12482, 12482, 6449, {39620, 0, 0, 0}, 231, 231, { 1252, 870, 10000, 850, 0, ';' }},\n\t{0x0832, 0x0032, 257, 16, 12486, 12492, 4098, 12510, 4111, 4088, 12514, {0, 0, 0, 0}, 232, 232, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x083B, 0x003B, 257, 112, 12517, 12523, 12546, 12574, 4356, 4318, 7456, {38155, 0, 0, 0}, 233, 233, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x083C, 0x003C, 257, 54, 12578, 12584, 12600, 4377, 4381, 4360, 12616, {38174, 0, 0, 0}, 234, 234, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x083E, 0x003E, 257, 13, 12619, 12625, 12640, 12663, 4412, 4385, 12667, {38195, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }},\n\t{0x0843, 0x7843, 257, 130, 12670, 12681, 9326, 12710, 4571, 4549, 9350, {39643, 0, 0, 0}, 236, 236, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x0845, 0x0045, 257, 9, 12714, 12720, 12740, 12783, 4633, 4603, 12787, {38390, 0, 0, 0}, 237, 237, { 0, 500, 2, 1, 0, ',' }},\n\t{0x0846, 0x7C46, 257, 100, 12790, 12801, 12828, 12874, 4671, 4637, 7600, {38461, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0849, 0x0049, 257, 73, 12878, 12884, 12902, 12939, 4778, 4749, 10468, {38564, 0, 0, 0}, 239, 239, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0861, 0x0061, 257, 56, 12943, 12949, 12964, 12998, 5408, 5375, 8900, {39291, 0, 0, 0}, 240, 240, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0873, 0x0073, 257, 37, 13002, 13008, 13027, 5749, 5753, 5724, 13055, {0, 0, 0, 0}, 241, 241, { 0, 500, 2, 1, 0, ';' }},\n\t{0x0C01, 0x0001, 257, 36, 13058, 13064, 13079, 13103, 2575, 2546, 13107, {39565, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x0C04, 0x7C04, 257, 48, 13110, 13116, 13159, 13196, 2686, 2690, 13200, {39558, 0, 0, 0}, 243, 243, { 950, 500, 10002, 950, 0, ',' }},\n\t{0x0C07, 0x0007, 257, 5, 13203, 13209, 13226, 13248, 2801, 2779, 13252, {37004, 0, 0, 0}, 244, 244, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x0C09, 0x0009, 257, 6, 13255, 13261, 13261, 13281, 2854, 2839, 13285, {37071, 0, 0, 0}, 245, 245, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x0C0A, 0x000A, 257, 38, 13288, 13294, 13310, 13329, 2882, 2858, 6246, {37090, 0, 0, 0}, 246, 246, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x0C0C, 0x000C, 257, 19, 13333, 13339, 13355, 13374, 2935, 2911, 13378, {37137, 0, 0, 0}, 247, 247, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x0C3B, 0x003B, 257, 40, 13381, 13387, 13411, 13437, 4356, 4318, 6579, {39681, 0, 0, 0}, 248, 248, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x1001, 0x0001, 257, 77, 13441, 13447, 13462, 13490, 2575, 2546, 13494, {39565, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x1004, 0x0004, 257, 113, 13497, 13503, 13535, 13554, 2686, 2690, 13558, {36950, 0, 0, 0}, 250, 250, { 936, 500, 10008, 936, 0, ',' }},\n\t{0x1007, 0x0007, 257, 75, 13561, 13567, 13587, 13607, 2801, 2779, 10987, {37004, 0, 0, 0}, 251, 251, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x1009, 0x0009, 257, 19, 13611, 13617, 13617, 13634, 2854, 2839, 13378, {37071, 0, 0, 0}, 252, 252, { 1252, 37, 10000, 850, 0, ',' }},\n\t{0x100A, 0x000A, 257, 47, 13638, 13644, 13664, 13685, 2882, 2858, 13689, {37090, 0, 0, 0}, 253, 253, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x100C, 0x000C, 257, 21, 13692, 13698, 13719, 13738, 2935, 2911, 314, {37137, 0, 0, 0}, 254, 254, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x101A, 0x001A, 257, 8, 13742, 13748, 13780, 13811, 3346, 3321, 13815, {37442, 0, 0, 0}, 255, 255, { 1250, 870, 10082, 852, 0, ';' }},\n\t{0x1401, 0x0001, 257, 33, 13818, 13824, 13841, 13873, 2575, 2546, 13877, {39565, 0, 0, 0}, 256, 256, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x1404, 0x7C04, 257, 86, 13880, 13886, 13925, 13962, 2686, 2690, 13966, {39558, 0, 0, 0}, 257, 257, { 950, 500, 10002, 950, 0, ',' }},\n\t{0x1407, 0x0007, 257, 72, 13969, 13975, 13998, 14022, 2801, 2779, 14026, {37004, 0, 0, 0}, 258, 258, { 1252, 20273, 10000, 850, 0, ';' }},\n\t{0x1409, 0x0009, 257, 95, 14029, 14035, 14035, 14057, 2854, 2839, 14061, {37071, 0, 0, 0}, 259, 259, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x140A, 0x000A, 257, 27, 14064, 14070, 14091, 14113, 2882, 2858, 14117, {37090, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x140C, 0x000C, 257, 75, 14120, 14126, 14146, 14169, 2935, 2911, 10987, {37137, 0, 0, 0}, 261, 261, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x141A, 0x681A, 257, 8, 14173, 14184, 14222, 14253, 14257, 14261, 13815, {37442, 0, 0, 0}, 262, 262, { 1250, 870, 10082, 852, 0, ';' }},\n\t{0x1801, 0x0001, 257, 78, 14264, 14270, 14287, 14317, 2575, 2546, 14321, {39565, 0, 0, 0}, 263, 263, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x1809, 0x0009, 257, 54, 14324, 14330, 14330, 14348, 2854, 2839, 12616, {37071, 0, 0, 0}, 264, 264, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x180A, 0x000A, 257, 97, 14352, 14358, 14375, 14394, 2882, 2858, 14398, {37090, 0, 0, 0}, 265, 265, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x180C, 0x000C, 257, 79, 14401, 14407, 14423, 14442, 2935, 2911, 14446, {37137, 0, 0, 0}, 266, 266, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x181A, 0x701A, 257, 8, 14449, 14460, 14498, 14550, 14554, 14558, 13815, {37442, 0, 0, 0}, 267, 267, { 1250, 870, 10082, 852, 0, ';' }},\n\t{0x1C01, 0x0001, 257, 123, 14561, 14567, 14584, 14610, 2575, 2546, 14614, {39565, 0, 0, 0}, 268, 268, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x1C09, 0x0009, 257, 134, 14617, 14623, 14623, 14646, 2854, 2839, 8517, {37071, 0, 0, 0}, 269, 269, { 1252, 500, 10000, 437, 0, ',' }},\n\t{0x1C0A, 0x000A, 257, 32, 14650, 14656, 14685, 14718, 2882, 2858, 14722, {37090, 0, 0, 0}, 270, 270, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x1C1A, 0x6C1A, 257, 8, 14725, 14736, 14498, 14777, 14554, 14558, 13815, {39703, 0, 0, 0}, 271, 271, { 1251, 21025, 10007, 855, 0, ';' }},\n\t{0x2001, 0x0001, 257, 96, 14781, 14787, 14801, 14829, 2575, 2546, 14833, {39565, 0, 0, 0}, 272, 272, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x2009, 0x0009, 257, 61, 14836, 14842, 14842, 14860, 2854, 2839, 14864, {37071, 0, 0, 0}, 273, 273, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x200A, 0x000A, 257, 131, 14867, 14873, 14893, 14914, 2882, 2858, 14918, {37090, 0, 0, 0}, 274, 274, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x200C, 0x000C, 257, 106, 14921, 14927, 14945, 14969, 2935, 2911, 14973, {37137, 0, 0, 0}, 275, 275, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x201A, 0x641A, 257, 8, 14976, 14987, 14222, 15028, 14257, 14261, 13815, {37903, 0, 0, 0}, 276, 276, { 1251, 870, 10082, 855, 0, ';' }},\n\t{0x2401, 0x0001, 257, 133, 15032, 15038, 15053, 15081, 2575, 2546, 15085, {39565, 0, 0, 0}, 277, 277, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x240A, 0x000A, 257, 26, 15088, 15094, 15113, 15133, 2882, 2858, 15137, {37090, 0, 0, 0}, 278, 278, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x240C, 0x000C, 257, 20, 15140, 15146, 15172, 15199, 2935, 2911, 15203, {37137, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x241A, 0x701A, 257, 108, 15206, 15217, 15241, 15269, 14554, 14558, 15273, {37442, 0, 0, 0}, 280, 280, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x243B, 0x703B, 257, 40, 15276, 15283, 15304, 15328, 15332, 15332, 6579, {0, 0, 0, 0}, 281, 281, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x2801, 0x0001, 257, 119, 15336, 15342, 15357, 15385, 2575, 2546, 15389, {39565, 0, 0, 0}, 282, 282, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x2809, 0x0009, 257, 18, 15392, 15398, 15398, 15415, 2854, 2839, 15419, {37071, 0, 0, 0}, 283, 283, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x280A, 0x000A, 257, 98, 15422, 15428, 15443, 15460, 2882, 2858, 15464, {37090, 0, 0, 0}, 284, 284, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x280C, 0x000C, 257, 116, 15467, 15473, 15490, 15512, 2935, 2911, 15516, {37137, 0, 0, 0}, 285, 285, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x281A, 0x6C1A, 257, 108, 15519, 15530, 15241, 15557, 14554, 14558, 15273, {39703, 0, 0, 0}, 286, 286, { 1251, 21025, 10007, 855, 0, ';' }},\n\t{0x2C01, 0x0001, 257, 62, 15561, 15567, 15583, 15613, 2575, 2546, 15617, {39565, 0, 0, 0}, 287, 287, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x2C09, 0x0009, 257, 125, 15620, 15626, 15626, 15654, 2854, 2839, 15658, {37071, 0, 0, 0}, 288, 288, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x2C0A, 0x000A, 257, 4, 15661, 15667, 15687, 15708, 2882, 2858, 15712, {37090, 0, 0, 0}, 289, 289, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x2C0C, 0x000C, 257, 24, 15715, 15721, 15739, 15760, 2935, 2911, 15764, {37137, 0, 0, 0}, 290, 290, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x2C1A, 0x701A, 257, 81, 15767, 15778, 15806, 15839, 14554, 14558, 15843, {37442, 0, 0, 0}, 291, 291, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x3001, 0x0001, 257, 71, 15846, 15852, 15869, 15897, 2575, 2546, 15901, {39565, 0, 0, 0}, 292, 292, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x3009, 0x0009, 257, 135, 15904, 15910, 15910, 15929, 2854, 2839, 15933, {37071, 0, 0, 0}, 293, 293, { 1252, 500, 10000, 437, 0, ',' }},\n\t{0x300A, 0x000A, 257, 34, 15936, 15942, 15960, 15979, 2882, 2858, 15983, {37090, 0, 0, 0}, 294, 294, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x300C, 0x000C, 257, 22, 15986, 15992, 16018, 16047, 2935, 2911, 16051, {37137, 0, 0, 0}, 295, 295, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x301A, 0x6C1A, 257, 81, 16054, 16065, 15806, 16096, 14554, 14558, 15843, {39703, 0, 0, 0}, 296, 296, { 1251, 21025, 10007, 855, 0, ';' }},\n\t{0x3401, 0x0001, 257, 68, 16100, 16106, 16122, 16152, 2575, 2546, 16156, {39565, 0, 0, 0}, 297, 297, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x3409, 0x0009, 257, 99, 16159, 16165, 16165, 16187, 2854, 2839, 10761, {37071, 0, 0, 0}, 298, 298, { 1252, 500, 10000, 437, 0, ',' }},\n\t{0x340A, 0x000A, 257, 23, 16191, 16197, 16213, 16230, 2882, 2858, 16234, {37090, 0, 0, 0}, 299, 299, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x340C, 0x000C, 257, 83, 16237, 16243, 16257, 16274, 2935, 2911, 16278, {37137, 0, 0, 0}, 300, 300, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x3801, 0x0001, 257, 0, 16281, 16287, 16317, 16381, 2575, 2546, 16385, {39565, 0, 0, 0}, 301, 301, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x380A, 0x000A, 257, 129, 16388, 16394, 16412, 16431, 2882, 2858, 16435, {37090, 0, 0, 0}, 302, 302, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x380C, 0x000C, 257, 78, 16438, 16444, 16461, 16479, 2935, 2911, 14321, {37137, 0, 0, 0}, 303, 303, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x3C01, 0x0001, 257, 12, 16483, 16489, 16506, 16538, 2575, 2546, 16542, {39565, 0, 0, 0}, 304, 304, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x3C09, 0x0009, 257, 48, 16545, 16551, 16551, 16581, 2854, 2839, 13200, {37071, 0, 0, 0}, 305, 305, { 1252, 500, 10000, 850, 0, ',' }},\n\t{0x3C0A, 0x000A, 257, 104, 16585, 16591, 16610, 16630, 2882, 2858, 16634, {37090, 0, 0, 0}, 306, 306, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x3C0C, 0x000C, 257, 51, 16637, 16643, 16658, 16677, 2935, 2911, 16681, {37137, 0, 0, 0}, 307, 307, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x4001, 0x0001, 257, 105, 16684, 16690, 16705, 16729, 2575, 2546, 16733, {39565, 0, 0, 0}, 308, 308, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x4009, 0x0009, 257, 56, 16736, 16742, 16742, 16758, 2854, 2839, 8900, {37071, 0, 0, 0}, 309, 309, { 1252, 37, 10000, 437, 0, ',' }},\n\t{0x400A, 0x000A, 257, 14, 16762, 16768, 16786, 16805, 2882, 2858, 16809, {37090, 0, 0, 0}, 310, 310, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x4409, 0x0009, 257, 89, 16812, 16818, 16818, 16837, 2854, 2839, 9044, {37071, 0, 0, 0}, 311, 311, { 1252, 37, 10000, 437, 0, ',' }},\n\t{0x440A, 0x000A, 257, 118, 16841, 16847, 16869, 16892, 2882, 2858, 16896, {37090, 0, 0, 0}, 312, 312, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x4809, 0x0009, 257, 113, 16899, 16905, 16905, 16925, 2854, 2839, 13558, {37071, 0, 0, 0}, 313, 313, { 1252, 37, 10000, 437, 0, ',' }},\n\t{0x480A, 0x000A, 257, 49, 16929, 16935, 16954, 16974, 2882, 2858, 16978, {37090, 0, 0, 0}, 314, 314, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x4C0A, 0x000A, 257, 91, 16981, 16987, 17007, 17028, 2882, 2858, 17032, {37090, 0, 0, 0}, 315, 315, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x500A, 0x000A, 257, 102, 17035, 17041, 17063, 17086, 2882, 2858, 17090, {37090, 0, 0, 0}, 316, 316, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x540A, 0x000A, 257, 128, 17093, 17099, 17123, 17149, 2882, 2858, 6538, {37090, 0, 0, 0}, 317, 317, { 1252, 20284, 10000, 850, 0, ',' }},\n\t{0x5C0A, 0x000A, 257, 28, 17153, 17159, 17174, 17190, 2882, 2858, 17194, {37090, 0, 0, 0}, 318, 318, { 1252, 20284, 10000, 850, 0, ';' }},\n\t{0x641A, 0x781A, 257, -1, 17197, 17205, 17224, 15028, 14257, 14261, 0, {37903, 0, 0, 0}, 319, 319, { 1251, 870, 10082, 855, 0, ';' }},\n\t{0x681A, 0x781A, 257, -1, 17233, 17241, 17224, 14253, 14257, 14261, 0, {37442, 0, 0, 0}, 320, 320, { 1250, 870, 10082, 852, 0, ';' }},\n\t{0x6C1A, 0x7C1A, 257, -1, 17257, 17265, 17284, 15557, 14554, 14558, 0, {39703, 0, 0, 0}, 321, 321, { 1251, 21025, 10007, 855, 0, ';' }},\n\t{0x701A, 0x7C1A, 257, -1, 17297, 17305, 17284, 15269, 14554, 14558, 0, {37442, 0, 0, 0}, 322, 322, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x703B, 0x003B, 257, -1, 15332, 17321, 17332, 15328, 15332, 15332, 0, {0, 0, 0, 0}, 323, 323, { 1252, 20278, 10000, 850, 0, ';' }},\n\t{0x742C, 0x002C, 257, -1, 17347, 17355, 3898, 12417, 3914, 3883, 0, {37843, 0, 0, 0}, 324, 324, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x7804, 0x007F, 257, -1, 2690, 2654, 2675, 2682, 2686, 2690, 0, {36950, 0, 0, 0}, 325, 325, { 936, 500, 10008, 936, 0, ',' }},\n\t{0x7814, 0x0014, 257, -1, 12103, 17378, 17396, 12095, 12099, 12103, 0, {36983, 0, 0, 0}, 326, 326, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x781A, 0x007F, 257, -1, 14261, 17404, 17224, 14253, 14257, 14261, 0, {37442, 0, 0, 0}, 327, 327, { 1250, 870, 10082, 852, 0, ';' }},\n\t{0x782C, 0x002C, 257, -1, 17412, 17420, 3898, 3910, 3914, 3883, 0, {37843, 0, 0, 0}, 328, 328, { 1254, 20905, 10081, 857, 0, ';' }},\n\t{0x7843, 0x0043, 257, -1, 17440, 17448, 4558, 12710, 4571, 4549, 0, {39643, 0, 0, 0}, 329, 329, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x7850, 0x0050, 257, -1, 17465, 17473, 4981, 9975, 4998, 4968, 0, {38918, 0, 0, 0}, 330, 330, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x7C04, 0x7804, 257, -1, 17494, 6255, 2675, 6293, 2686, 2690, 0, {39558, 0, 0, 0}, 331, 331, { 950, 500, 10002, 950, 0, ',' }},\n\t{0x7C04, 0x7C04, 257, -1, 17502, 17509, 2675, 6293, 2686, 2690, 0, {39558, 0, 0, 0}, 332, 332, { 950, 500, 10002, 950, 0, ',' }},\n\t{0x7C14, 0x0014, 257, -1, 3168, 17538, 17556, 3160, 3164, 3168, 0, {36983, 0, 0, 0}, 333, 333, { 1252, 20277, 10000, 850, 0, ';' }},\n\t{0x7C1A, 0x007F, 257, -1, 14558, 17570, 17284, 17578, 14554, 14558, 0, {39703, 0, 0, 0}, 334, 334, { 1250, 500, 10029, 852, 0, ';' }},\n\t{0x7C28, 0x0028, 257, -1, 17582, 17590, 3760, 3773, 3777, 3751, 0, {0, 0, 0, 0}, 335, 335, { 1251, 20880, 10007, 866, 0, ';' }},\n\t{0x7C2E, 0x002E, 257, -1, 12482, 17607, 17621, 12478, 12482, 12482, 0, {39620, 0, 0, 0}, 336, 336, { 1252, 870, 10000, 850, 0, ';' }},\n\t{0x7C43, 0x0043, 257, -1, 17638, 17646, 4558, 4567, 4571, 4549, 0, {38337, 0, 0, 0}, 337, 337, { 1254, 500, 10029, 857, 0, ';' }},\n\t{0x7C46, 0x0046, 257, -1, 17660, 17668, 4648, 12874, 4671, 4637, 0, {38461, 0, 0, 0}, 338, 338, { 1256, 20420, 10004, 720, 1, ';' }},\n\t{0x7C5F, 0x005F, 257, -1, 17685, 17694, 5348, 5371, 5320, 5320, 0, {0, 0, 0, 0}, 339, 339, { 1252, 20297, 10000, 850, 0, ';' }},\n\t{0x7C68, 0x0068, 257, -1, 17726, 17734, 5521, 5527, 5531, 5518, 0, {0, 0, 0, 0}, 340, 340, { 1252, 37, 10000, 437, 0, ';' }}\n};\n\n\nstatic const CultureInfoNameEntry culture_name_entries [] = {\n\t{4165, 53},\t /* af */\n\t{17748, 162},\t /* af-za */\n\t{5, 87},\t /* am */\n\t{17754, 193},\t /* am-et */\n\t{2546, 0},\t /* ar */\n\t{17760, 301},\t /* ar-ae */\n\t{17766, 304},\t /* ar-bh */\n\t{17772, 256},\t /* ar-dz */\n\t{17778, 242},\t /* ar-eg */\n\t{17784, 215},\t /* ar-iq */\n\t{17790, 287},\t /* ar-jo */\n\t{17796, 297},\t /* ar-kw */\n\t{17802, 292},\t /* ar-lb */\n\t{17808, 249},\t /* ar-ly */\n\t{17814, 263},\t /* ar-ma */\n\t{17820, 272},\t /* ar-om */\n\t{17826, 308},\t /* ar-qa */\n\t{17832, 111},\t /* ar-sa */\n\t{17838, 282},\t /* ar-sy */\n\t{17844, 268},\t /* ar-tn */\n\t{17850, 277},\t /* ar-ye */\n\t{4891, 75},\t /* as */\n\t{17856, 182},\t /* as-in */\n\t{3883, 44},\t /* az */\n\t{17862, 324},\t /* az-cyrl */\n\t{17870, 230},\t /* az-cyrl-az */\n\t{17881, 328},\t /* az-latn */\n\t{17889, 153},\t /* az-latn-az */\n\t{3586, 35},\t /* be */\n\t{17900, 144},\t /* be-by */\n\t{2579, 1},\t /* bg */\n\t{17906, 112},\t /* bg-bg */\n\t{4603, 67},\t /* bn */\n\t{17912, 237},\t /* bn-bd */\n\t{17918, 175},\t /* bn-in */\n\t{5002, 78},\t /* bo */\n\t{17924, 185},\t /* bo-cn */\n\t{5851, 105},\t /* br */\n\t{17930, 209},\t /* br-fr */\n\t{14261, 327},\t /* bs */\n\t{17936, 319},\t /* bs-cyrl */\n\t{17944, 276},\t /* bs-cyrl-ba */\n\t{17955, 320},\t /* bs-latn */\n\t{17963, 262},\t /* bs-latn-ba */\n\t{2619, 2},\t /* ca */\n\t{17974, 113},\t /* ca-es */\n\t{17980, 216},\t /* ca-es-valencia */\n\t{5264, 86},\t /* chr */\n\t{2728, 5},\t /* cs */\n\t{17995, 115},\t /* cs-cz */\n\t{5046, 79},\t /* cy */\n\t{18001, 186},\t /* cy-gb */\n\t{2755, 6},\t /* da */\n\t{18007, 116},\t /* da-dk */\n\t{2779, 7},\t /* de */\n\t{18013, 244},\t /* de-at */\n\t{18019, 218},\t /* de-ch */\n\t{18025, 117},\t /* de-de */\n\t{18031, 258},\t /* de-li */\n\t{18037, 251},\t /* de-lu */\n\t{12482, 336},\t /* dsb */\n\t{18043, 231},\t /* dsb-de */\n\t{2805, 8},\t /* el */\n\t{18050, 118},\t /* el-gr */\n\t{2839, 9},\t /* en */\n\t{18056, 245},\t /* en-au */\n\t{18062, 283},\t /* en-bz */\n\t{18068, 252},\t /* en-ca */\n\t{18074, 219},\t /* en-gb */\n\t{18080, 305},\t /* en-hk */\n\t{18086, 264},\t /* en-ie */\n\t{18092, 309},\t /* en-in */\n\t{18098, 273},\t /* en-jm */\n\t{18104, 311},\t /* en-my */\n\t{18110, 259},\t /* en-nz */\n\t{18116, 298},\t /* en-ph */\n\t{18122, 313},\t /* en-sg */\n\t{18128, 288},\t /* en-tt */\n\t{18134, 119},\t /* en-us */\n\t{18140, 269},\t /* en-za */\n\t{18146, 293},\t /* en-zw */\n\t{2858, 10},\t /* es */\n\t{18152, 289},\t /* es-ar */\n\t{18158, 310},\t /* es-bo */\n\t{18164, 299},\t /* es-cl */\n\t{18170, 278},\t /* es-co */\n\t{18176, 260},\t /* es-cr */\n\t{18182, 318},\t /* es-cu */\n\t{18188, 270},\t /* es-do */\n\t{18194, 294},\t /* es-ec */\n\t{18200, 246},\t /* es-es */\n\t{18206, 253},\t /* es-gt */\n\t{18212, 314},\t /* es-hn */\n\t{18218, 220},\t /* es-mx */\n\t{18224, 315},\t /* es-ni */\n\t{18230, 265},\t /* es-pa */\n\t{18236, 284},\t /* es-pe */\n\t{18242, 316},\t /* es-pr */\n\t{18248, 306},\t /* es-py */\n\t{18254, 312},\t /* es-sv */\n\t{18260, 317},\t /* es-us */\n\t{18266, 302},\t /* es-uy */\n\t{18272, 274},\t /* es-ve */\n\t{3664, 37},\t /* et */\n\t{18278, 146},\t /* et-ee */\n\t{3918, 45},\t /* eu */\n\t{18284, 154},\t /* eu-es */\n\t{3781, 41},\t /* fa */\n\t{18290, 150},\t /* fa-ir */\n\t{5494, 93},\t /* ff */\n\t{2886, 11},\t /* fi */\n\t{18296, 120},\t /* fi-fi */\n\t{5477, 92},\t /* fil */\n\t{18302, 197},\t /* fil-ph */\n\t{4228, 55},\t /* fo */\n\t{18309, 164},\t /* fo-fo */\n\t{2911, 12},\t /* fr */\n\t{18315, 221},\t /* fr-be */\n\t{18321, 247},\t /* fr-ca */\n\t{18327, 279},\t /* fr-cd */\n\t{18333, 254},\t /* fr-ch */\n\t{18339, 295},\t /* fr-ci */\n\t{18345, 290},\t /* fr-cm */\n\t{18351, 121},\t /* fr-fr */\n\t{18357, 307},\t /* fr-ht */\n\t{18363, 261},\t /* fr-lu */\n\t{18369, 303},\t /* fr-ma */\n\t{18375, 266},\t /* fr-mc */\n\t{18381, 300},\t /* fr-ml */\n\t{18387, 275},\t /* fr-re */\n\t{18393, 285},\t /* fr-sn */\n\t{5412, 90},\t /* fy */\n\t{18399, 195},\t /* fy-nl */\n\t{4360, 59},\t /* ga */\n\t{18405, 234},\t /* ga-ie */\n\t{6009, 110},\t /* gd */\n\t{18411, 214},\t /* gd-gb */\n\t{5167, 83},\t /* gl */\n\t{18417, 190},\t /* gl-es */\n\t{5914, 107},\t /* gsw */\n\t{18423, 211},\t /* gsw-fr */\n\t{4675, 69},\t /* gu */\n\t{18430, 176},\t /* gu-in */\n\t{5518, 94},\t /* ha */\n\t{18436, 340},\t /* ha-latn */\n\t{18444, 198},\t /* ha-latn-ng */\n\t{5757, 102},\t /* haw */\n\t{18455, 206},\t /* haw-us */\n\t{2939, 13},\t /* he */\n\t{18462, 122},\t /* he-il */\n\t{4257, 56},\t /* hi */\n\t{18468, 165},\t /* hi-in */\n\t{3321, 26},\t /* hr */\n\t{18474, 255},\t /* hr-ba */\n\t{18480, 135},\t /* hr-hr */\n\t{3944, 46},\t /* hsb */\n\t{18486, 155},\t /* hsb-de */\n\t{2968, 14},\t /* hu */\n\t{18493, 123},\t /* hu-hu */\n\t{3848, 43},\t /* hy */\n\t{18499, 152},\t /* hy-am */\n\t{3512, 33},\t /* id */\n\t{18505, 142},\t /* id-id */\n\t{5684, 99},\t /* ig */\n\t{18511, 203},\t /* ig-ng */\n\t{5819, 104},\t /* ii */\n\t{18517, 208},\t /* ii-cn */\n\t{2996, 15},\t /* is */\n\t{18523, 124},\t /* is-is */\n\t{3027, 16},\t /* it */\n\t{18529, 222},\t /* it-ch */\n\t{18535, 125},\t /* it-it */\n\t{3055, 17},\t /* ja */\n\t{18541, 126},\t /* ja-jp */\n\t{4186, 54},\t /* ka */\n\t{18547, 163},\t /* ka-ge */\n\t{4416, 61},\t /* kk */\n\t{18553, 169},\t /* kk-kz */\n\t{5649, 98},\t /* kl */\n\t{18559, 202},\t /* kl-gl */\n\t{5071, 80},\t /* km */\n\t{18565, 187},\t /* km-kh */\n\t{1715, 73},\t /* kn */\n\t{18571, 180},\t /* kn-in */\n\t{3085, 18},\t /* ko */\n\t{18577, 127},\t /* ko-kr */\n\t{5194, 84},\t /* kok */\n\t{18583, 191},\t /* kok-in */\n\t{4454, 62},\t /* ky */\n\t{18590, 170},\t /* ky-kg */\n\t{5608, 97},\t /* lb */\n\t{18596, 201},\t /* lb-lu */\n\t{5104, 81},\t /* lo */\n\t{18602, 188},\t /* lo-la */\n\t{3719, 39},\t /* lt */\n\t{18608, 148},\t /* lt-lt */\n\t{3690, 38},\t /* lv */\n\t{18614, 147},\t /* lv-lv */\n\t{3984, 47},\t /* mk */\n\t{18620, 156},\t /* mk-mk */\n\t{4851, 74},\t /* ml */\n\t{18626, 181},\t /* ml-in */\n\t{4968, 77},\t /* mn */\n\t{18632, 330},\t /* mn-cyrl */\n\t{18640, 184},\t /* mn-mn */\n\t{4933, 76},\t /* mr */\n\t{18646, 183},\t /* mr-in */\n\t{4385, 60},\t /* ms */\n\t{18652, 235},\t /* ms-bn */\n\t{18658, 168},\t /* ms-my */\n\t{4293, 57},\t /* mt */\n\t{18664, 166},\t /* mt-mt */\n\t{5129, 82},\t /* my */\n\t{18670, 189},\t /* my-mm */\n\t{3168, 333},\t /* nb */\n\t{18676, 129},\t /* nb-no */\n\t{5375, 89},\t /* ne */\n\t{18682, 240},\t /* ne-in */\n\t{18688, 194},\t /* ne-np */\n\t{3113, 19},\t /* nl */\n\t{18694, 223},\t /* nl-be */\n\t{18700, 128},\t /* nl-nl */\n\t{12103, 326},\t /* nn */\n\t{18706, 224},\t /* nn-no */\n\t{3141, 20},\t /* no */\n\t{5568, 96},\t /* nso */\n\t{18712, 200},\t /* nso-za */\n\t{5700, 100},\t /* om */\n\t{18719, 204},\t /* om-et */\n\t{4717, 70},\t /* or */\n\t{18725, 177},\t /* or-in */\n\t{4637, 68},\t /* pa */\n\t{18731, 338},\t /* pa-arab */\n\t{18739, 238},\t /* pa-arab-pk */\n\t{3171, 21},\t /* pl */\n\t{18750, 130},\t /* pl-pl */\n\t{5450, 91},\t /* ps */\n\t{18756, 196},\t /* ps-af */\n\t{3196, 22},\t /* pt */\n\t{18762, 131},\t /* pt-br */\n\t{18768, 225},\t /* pt-pt */\n\t{3229, 23},\t /* rm */\n\t{18774, 132},\t /* rm-ch */\n\t{3258, 24},\t /* ro */\n\t{18780, 226},\t /* ro-md */\n\t{18786, 133},\t /* ro-ro */\n\t{3287, 25},\t /* ru */\n\t{18792, 227},\t /* ru-md */\n\t{18798, 134},\t /* ru-ru */\n\t{5986, 109},\t /* rw */\n\t{18804, 213},\t /* rw-rw */\n\t{5954, 108},\t /* sah */\n\t{18810, 212},\t /* sah-ru */\n\t{4318, 58},\t /* se */\n\t{18817, 248},\t /* se-fi */\n\t{18823, 167},\t /* se-no */\n\t{18829, 233},\t /* se-se */\n\t{5229, 85},\t /* si */\n\t{18835, 192},\t /* si-lk */\n\t{3350, 27},\t /* sk */\n\t{18841, 136},\t /* sk-sk */\n\t{3629, 36},\t /* sl */\n\t{18847, 145},\t /* sl-si */\n\t{15332, 323},\t /* smn */\n\t{18853, 281},\t /* smn-fi */\n\t{5792, 103},\t /* so */\n\t{18860, 207},\t /* so-so */\n\t{3380, 28},\t /* sq */\n\t{18866, 137},\t /* sq-al */\n\t{14558, 334},\t /* sr */\n\t{18872, 321},\t /* sr-cyrl */\n\t{18880, 271},\t /* sr-cyrl-ba */\n\t{18891, 296},\t /* sr-cyrl-me */\n\t{18902, 286},\t /* sr-cyrl-rs */\n\t{18913, 322},\t /* sr-latn */\n\t{18921, 267},\t /* sr-latn-ba */\n\t{18932, 291},\t /* sr-latn-me */\n\t{18943, 280},\t /* sr-latn-rs */\n\t{4027, 48},\t /* st */\n\t{18954, 157},\t /* st-za */\n\t{3406, 29},\t /* sv */\n\t{18960, 228},\t /* sv-fi */\n\t{18966, 138},\t /* sv-se */\n\t{4489, 63},\t /* sw */\n\t{18972, 171},\t /* sw-ke */\n\t{4749, 71},\t /* ta */\n\t{18978, 178},\t /* ta-in */\n\t{18984, 239},\t /* ta-lk */\n\t{4782, 72},\t /* te */\n\t{18990, 179},\t /* te-in */\n\t{3751, 40},\t /* tg */\n\t{18996, 335},\t /* tg-cyrl */\n\t{19004, 149},\t /* tg-cyrl-tj */\n\t{3433, 30},\t /* th */\n\t{19015, 139},\t /* th-th */\n\t{5724, 101},\t /* ti */\n\t{19021, 241},\t /* ti-er */\n\t{19027, 205},\t /* ti-et */\n\t{4518, 64},\t /* tk */\n\t{19033, 172},\t /* tk-tm */\n\t{4088, 50},\t /* tn */\n\t{19039, 232},\t /* tn-bw */\n\t{19045, 159},\t /* tn-za */\n\t{3459, 31},\t /* tr */\n\t{19051, 140},\t /* tr-tr */\n\t{4061, 49},\t /* ts */\n\t{19057, 158},\t /* ts-za */\n\t{4575, 66},\t /* tt */\n\t{19063, 174},\t /* tt-ru */\n\t{5320, 88},\t /* tzm */\n\t{19069, 339},\t /* tzm-latn */\n\t{5879, 106},\t /* ug */\n\t{19078, 210},\t /* ug-cn */\n\t{3544, 34},\t /* uk */\n\t{19084, 143},\t /* uk-ua */\n\t{3487, 32},\t /* ur */\n\t{19090, 229},\t /* ur-in */\n\t{19096, 141},\t /* ur-pk */\n\t{4549, 65},\t /* uz */\n\t{19102, 329},\t /* uz-cyrl */\n\t{19110, 236},\t /* uz-cyrl-uz */\n\t{19121, 337},\t /* uz-latn */\n\t{19129, 173},\t /* uz-latn-uz */\n\t{3811, 42},\t /* vi */\n\t{19140, 151},\t /* vi-vn */\n\t{4115, 51},\t /* xh */\n\t{19146, 160},\t /* xh-za */\n\t{5535, 95},\t /* yo */\n\t{19152, 199},\t /* yo-ng */\n\t{2690, 325},\t /* zh */\n\t{19158, 4},\t /* zh-chs */\n\t{19165, 332},\t /* zh-cht */\n\t{19172, 217},\t /* zh-cn */\n\t{19178, 3},\t /* zh-hans */\n\t{19186, 331},\t /* zh-hant */\n\t{19194, 243},\t /* zh-hk */\n\t{19200, 257},\t /* zh-mo */\n\t{19206, 250},\t /* zh-sg */\n\t{19212, 114},\t /* zh-tw */\n\t{4141, 52},\t /* zu */\n\t{19218, 161}\t /* zu-za */\n};\n\n\nstatic const RegionInfoEntry region_entries [] = {\n\t{ 224,16385,13103,13103,19224,19245,2487,19292,19296,19324},\n\t{ 3,10707,19348,19348,19352,19364,2158,19383,19387,19402},\n\t{ 6,7412,19415,19415,19419,19427,1718,19437,19441,19454},\n\t{ 7,49,14317,14317,19468,19476,1856,19493,19497,19511},\n\t{ 11,15712,13873,13873,19537,19537,1462,15385,19547,19562},\n\t{ 14,13252,19577,19577,19581,19589,1357,19601,19605,19605},\n\t{ 12,13285,19610,19610,19614,19614,1462,19624,19628,19628},\n\t{ 5,8303,3910,3910,19646,19657,2221,19669,19673,19691},\n\t{ 25,13815,19711,19711,19715,19736,2341,19756,19760,19796},\n\t{ 23,12787,19816,19816,19820,19831,2304,19856,19860,19877},\n\t{ 21,11944,3621,3621,19918,19926,1357,19601,19605,19935},\n\t{ 35,6203,2611,2611,19940,19949,1339,19966,19970,19984},\n\t{ 17,16542,20010,20010,20014,20022,2501,20037,20041,20056},\n\t{ 37,12667,20080,20080,20084,20084,1462,20091,20095,20109},\n\t{ 26,16809,20122,20122,20126,20126,2527,5038,20134,20153},\n\t{ 32,7116,20163,20163,20167,20174,1606,20181,20185,20200},\n\t{ 19,12514,20216,20216,20220,0,2262,20229,20233,0},\n\t{ 29,7791,20248,20248,20252,20260,1766,20277,20281,20298},\n\t{ 24,15419,20330,20330,20334,20334,1462,20341,20345,20345},\n\t{ 39,13378,20359,20359,20363,20363,1462,20370,20374,20390},\n\t{ 44,15203,20406,20406,20410,20427,2420,20442,20446,20462},\n\t{ 223,314,20478,20478,20482,20494,1613,1613,20501,20513},\n\t{ 119,16051,20527,20527,20531,20531,2448,20548,20552,20575},\n\t{ 46,16234,20593,20593,20597,20597,1462,20603,20607,20620},\n\t{ 49,15764,20633,20633,20637,20646,2462,20655,20659,20685},\n\t{ 45,10050,20702,20702,20706,20712,1378,20731,20735,20748},\n\t{ 51,15137,20767,20767,20771,20771,1462,20780,20784,20799},\n\t{ 54,14117,20815,20815,20819,20819,2359,20830,20834,20853},\n\t{ 56,17194,20874,20874,20878,20878,1462,20883,20887,20898},\n\t{ 75,6359,20910,20910,20914,20929,1381,20947,20951,20973},\n\t{ 94,6449,2797,2797,20988,20996,1357,19601,19605,19605},\n\t{ 61,6401,21008,21008,21012,21020,1409,21028,21032,21045},\n\t{ 65,14722,21057,21057,21061,21080,2387,21102,21106,21121},\n\t{ 4,13877,21137,21137,21141,21149,2344,21164,21168,21183},\n\t{ 66,15983,21207,21207,21211,21211,1462,21219,21223,21233},\n\t{ 70,7889,17149,17149,21255,21263,1357,19601,19605,19935},\n\t{ 67,13107,21269,21269,21273,21279,2315,21286,21290,21305},\n\t{ 71,13055,21323,21323,21327,21335,2169,21348,21352,0},\n\t{ 217,6246,2878,2878,21367,21373,1357,19601,19605,19935},\n\t{ 73,10527,21381,21381,21385,21394,2144,21410,21414,21429},\n\t{ 77,6579,2903,2903,21455,21463,1357,19601,19605,19935},\n\t{ 81,8843,16479,16479,21469,21483,1724,21028,21032,21492},\n\t{ 84,6623,2931,2931,21505,21505,1357,19601,19605,19935},\n\t{ 242,10109,21512,21512,21516,21531,2037,21548,21552,21566},\n\t{ 88,8789,21579,21579,21583,21591,1894,21622,21626,21640},\n\t{ 93,11051,21675,21675,21679,21689,1409,21028,21032,21706},\n\t{ 98,6505,21726,21726,21730,21737,1357,19601,19605,21750},\n\t{ 99,13689,21759,21759,21763,21763,2339,21773,21777,21796},\n\t{ 104,13200,21804,21804,21808,21828,2325,21856,21860,21877},\n\t{ 106,16978,21884,21884,21888,21888,2260,21897,21901,21918},\n\t{ 108,7315,3342,3342,21937,21945,2217,2217,21954,21968},\n\t{ 103,16681,21982,21982,21986,21992,2515,21999,22003,22018},\n\t{ 109,6724,2988,2988,22036,22044,1520,22058,22062,22079},\n\t{ 111,7654,22093,22093,3526,3526,1759,22097,22101,22119},\n\t{ 68,12616,22136,22136,22140,22148,1357,19601,19605,19605},\n\t{ 117,6672,22154,22154,22158,22165,1511,22176,22180,22199},\n\t{ 113,8900,3536,3536,22213,22219,1939,22232,22236,22249},\n\t{ 121,11719,22284,22284,22288,22293,2248,22306,22310,22322},\n\t{ 116,8114,22344,22344,22348,22353,1843,22364,22368,22381},\n\t{ 110,6773,3019,3019,22401,22409,1523,1523,22417,22434},\n\t{ 118,6816,3047,3047,22450,22456,1357,19601,19605,19935},\n\t{ 124,14864,22463,22463,22467,22467,1462,22475,22479,22479},\n\t{ 126,15617,22495,22495,22499,22506,2452,22519,22523,22539},\n\t{ 122,6861,3077,3077,22561,22567,1537,22574,22578,22591},\n\t{ 129,9226,22601,22601,22605,22605,1991,22611,22615,22631},\n\t{ 130,9183,22649,22649,22653,22664,1967,22685,22689,22704},\n\t{ 40,10175,5096,5096,22734,22743,2040,22765,22769,22784},\n\t{ 134,6916,3105,3105,22818,22830,1541,22843,22847,22864},\n\t{ 136,16156,22881,22881,22885,22892,2477,22905,22909,22923},\n\t{ 137,9114,22945,22945,22949,22960,1946,22979,22983,23001},\n\t{ 138,10217,5121,5121,23035,5111,2044,23040,23044,23056},\n\t{ 139,15901,23076,23076,23080,23088,2467,23099,23103,23118},\n\t{ 145,14026,23140,23140,23144,23144,1613,1613,20501,23158},\n\t{ 42,10468,23176,23176,23180,23190,2136,23222,23226,23243},\n\t{ 141,7987,23291,23291,23295,23305,1357,19601,19605,23313},\n\t{ 147,10987,23319,23319,23323,23334,1357,19601,19605,19605},\n\t{ 140,7935,23346,23346,23350,23357,1357,19601,19605,23365},\n\t{ 148,13494,23370,23370,23374,23380,2329,23391,23395,23408},\n\t{ 159,14321,4960,4960,23428,23436,2363,2497,23449,23465},\n\t{ 158,14446,23485,23485,23489,23489,1357,19601,19605,19935},\n\t{ 152,12217,23496,23496,23500,23508,2260,23526,23530,23543},\n\t{ 270,15843,23559,23559,23563,23574,1357,19601,19605,23592},\n\t{ 19618,8478,23597,23597,23601,23611,1885,23597,23632,23649},\n\t{ 157,16278,23681,23681,23685,23685,2448,20548,20552,20575},\n\t{ 27,10292,23690,23690,23694,5140,2094,23710,23714,23727},\n\t{ 154,9979,23758,23758,23762,23771,2231,23784,23788,23805},\n\t{ 151,13966,23818,23818,23822,23838,2354,23866,23870,23886},\n\t{ 163,8939,4310,4310,23896,23896,1357,19601,19605,23902},\n\t{ 166,11893,23907,23907,23911,23918,1462,23926,23930,23943},\n\t{ 167,9044,23957,23957,23961,23961,1943,23970,23974,23992},\n\t{ 175,10815,24009,24009,24013,24021,2165,24030,24034,24049},\n\t{ 182,17032,24055,24055,24059,24059,2530,24069,24073,24093},\n\t{ 176,6968,3133,3133,24116,24128,1357,19601,19605,19605},\n\t{ 177,7026,3160,3160,24138,24145,1724,24151,24155,24171},\n\t{ 178,10588,24185,24185,24189,24195,2235,24211,24215,24230},\n\t{ 183,14061,24271,24271,24275,24275,1462,24287,24291,24291},\n\t{ 164,14833,24310,24310,24314,24319,2396,24330,24334,24345},\n\t{ 192,14398,4667,4667,24365,24372,2373,24380,24384,24402},\n\t{ 187,15464,24419,24419,24423,24428,2445,24434,24438,24451},\n\t{ 201,10761,24469,24469,24473,24485,2161,24495,24499,24515},\n\t{ 190,7600,24533,24533,24537,24546,1748,24561,24565,24581},\n\t{ 191,7067,24609,24609,24613,24620,1564,24627,24631,24644},\n\t{ 202,17090,24658,24658,24662,24662,1462,21219,21223,21233},\n\t{ 193,12156,24674,24674,24678,24678,1357,19601,19605,19605},\n\t{ 185,16634,24687,24687,24691,24691,2511,24700,24704,24723},\n\t{ 197,16733,24742,24742,24746,24752,2517,24759,24763,24775},\n\t{ 198,14973,24793,24793,24797,24806,1357,19601,19605,19935},\n\t{ 200,7211,24818,24818,24822,24830,1635,1635,24839,24852},\n\t{ 271,15273,17578,17578,24866,24873,2423,2423,24886,24900},\n\t{ 203,7267,3313,3313,24913,24920,1639,24933,24937,24951},\n\t{ 204,11587,24983,24983,24987,24987,2204,24994,24998,0},\n\t{ 205,311,25012,25012,25016,25029,1280,25076,25080,25092},\n\t{ 221,7456,25112,25112,25116,25123,1724,25131,25135,25149},\n\t{ 215,13558,25162,25162,25166,25176,1462,25186,25190,25207},\n\t{ 212,7847,25220,25220,25224,25233,1357,19601,19605,25243},\n\t{ 143,7366,25248,25248,25252,25261,1357,19601,19605,19935},\n\t{ 210,15516,25271,25271,25275,25283,2448,20548,20552,20575},\n\t{ 216,11299,5811,5811,25293,25301,2173,25312,25316,25332},\n\t{ 72,16896,3656,3656,25348,25348,1462,21219,21223,21233},\n\t{ 222,15389,25360,25360,25364,25370,2435,25381,25385,25398},\n\t{ 227,7503,3451,3451,25418,3441,1740,1740,25427,25437},\n\t{ 228,8066,25456,25456,25460,25471,1967,25492,25496,25515},\n\t{ 238,9286,25528,25528,25532,25545,1995,1995,25559,25579},\n\t{ 234,14614,25595,25595,25599,25607,2377,25616,25620,25635},\n\t{ 235,7549,25657,25657,25661,25668,1744,25677,25681,25694},\n\t{ 225,15658,25708,25708,25712,25712,1462,25730,25734,25734},\n\t{ 237,6297,25759,25759,25763,25770,1462,25777,25781,25799},\n\t{ 241,7721,3578,3578,25809,25817,1762,25832,25836,25854},\n\t{ 244,6538,25888,25888,25892,25892,1462,21219,21223,21223},\n\t{ 246,16435,25906,25906,25910,25910,1462,25918,25922,25937},\n\t{ 247,9350,4567,4567,25951,25962,2225,25975,25979,25995},\n\t{ 249,14918,26017,26017,26021,26021,2406,26031,26035,26055},\n\t{ 251,8172,26075,26075,26079,26087,1852,26098,26102,26118},\n\t{ 261,15085,26137,26137,26141,26147,2410,26158,26162,26174},\n\t{ 209,8517,26192,26192,26196,0,1892,26209,26213,0},\n\t{ 264,15933,26232,26232,26236,26236,1462,21219,21223,21223}\n};\n\n\nstatic const RegionInfoNameEntry region_name_entries [] = {\n\t{16385, 0},\t /* AE */\n\t{10707, 1},\t /* AF */\n\t{7412, 2},\t /* AL */\n\t{49, 3},\t /* AM */\n\t{15712, 4},\t /* AR */\n\t{13252, 5},\t /* AT */\n\t{13285, 6},\t /* AU */\n\t{8303, 7},\t /* AZ */\n\t{13815, 8},\t /* BA */\n\t{12787, 9},\t /* BD */\n\t{11944, 10},\t /* BE */\n\t{6203, 11},\t /* BG */\n\t{16542, 12},\t /* BH */\n\t{12667, 13},\t /* BN */\n\t{16809, 14},\t /* BO */\n\t{7116, 15},\t /* BR */\n\t{12514, 16},\t /* BW */\n\t{7791, 17},\t /* BY */\n\t{15419, 18},\t /* BZ */\n\t{13378, 19},\t /* CA */\n\t{15203, 20},\t /* CD */\n\t{314, 21},\t /* CH */\n\t{16051, 22},\t /* CI */\n\t{16234, 23},\t /* CL */\n\t{15764, 24},\t /* CM */\n\t{10050, 25},\t /* CN */\n\t{15137, 26},\t /* CO */\n\t{14117, 27},\t /* CR */\n\t{17194, 28},\t /* CU */\n\t{6359, 29},\t /* CZ */\n\t{6449, 30},\t /* DE */\n\t{6401, 31},\t /* DK */\n\t{14722, 32},\t /* DO */\n\t{13877, 33},\t /* DZ */\n\t{15983, 34},\t /* EC */\n\t{7889, 35},\t /* EE */\n\t{13107, 36},\t /* EG */\n\t{13055, 37},\t /* ER */\n\t{6246, 38},\t /* ES */\n\t{10527, 39},\t /* ET */\n\t{6579, 40},\t /* FI */\n\t{8843, 41},\t /* FO */\n\t{6623, 42},\t /* FR */\n\t{10109, 43},\t /* GB */\n\t{8789, 44},\t /* GE */\n\t{11051, 45},\t /* GL */\n\t{6505, 46},\t /* GR */\n\t{13689, 47},\t /* GT */\n\t{13200, 48},\t /* HK */\n\t{16978, 49},\t /* HN */\n\t{7315, 50},\t /* HR */\n\t{16681, 51},\t /* HT */\n\t{6724, 52},\t /* HU */\n\t{7654, 53},\t /* ID */\n\t{12616, 54},\t /* IE */\n\t{6672, 55},\t /* IL */\n\t{8900, 56},\t /* IN */\n\t{11719, 57},\t /* IQ */\n\t{8114, 58},\t /* IR */\n\t{6773, 59},\t /* IS */\n\t{6816, 60},\t /* IT */\n\t{14864, 61},\t /* JM */\n\t{15617, 62},\t /* JO */\n\t{6861, 63},\t /* JP */\n\t{9226, 64},\t /* KE */\n\t{9183, 65},\t /* KG */\n\t{10175, 66},\t /* KH */\n\t{6916, 67},\t /* KR */\n\t{16156, 68},\t /* KW */\n\t{9114, 69},\t /* KZ */\n\t{10217, 70},\t /* LA */\n\t{15901, 71},\t /* LB */\n\t{14026, 72},\t /* LI */\n\t{10468, 73},\t /* LK */\n\t{7987, 74},\t /* LT */\n\t{10987, 75},\t /* LU */\n\t{7935, 76},\t /* LV */\n\t{13494, 77},\t /* LY */\n\t{14321, 78},\t /* MA */\n\t{14446, 79},\t /* MC */\n\t{12217, 80},\t /* MD */\n\t{15843, 81},\t /* ME */\n\t{8478, 82},\t /* MK */\n\t{16278, 83},\t /* ML */\n\t{10292, 84},\t /* MM */\n\t{9979, 85},\t /* MN */\n\t{13966, 86},\t /* MO */\n\t{8939, 87},\t /* MT */\n\t{11893, 88},\t /* MX */\n\t{9044, 89},\t /* MY */\n\t{10815, 90},\t /* NG */\n\t{17032, 91},\t /* NI */\n\t{6968, 92},\t /* NL */\n\t{7026, 93},\t /* NO */\n\t{10588, 94},\t /* NP */\n\t{14061, 95},\t /* NZ */\n\t{14833, 96},\t /* OM */\n\t{14398, 97},\t /* PA */\n\t{15464, 98},\t /* PE */\n\t{10761, 99},\t /* PH */\n\t{7600, 100},\t /* PK */\n\t{7067, 101},\t /* PL */\n\t{17090, 102},\t /* PR */\n\t{12156, 103},\t /* PT */\n\t{16634, 104},\t /* PY */\n\t{16733, 105},\t /* QA */\n\t{14973, 106},\t /* RE */\n\t{7211, 107},\t /* RO */\n\t{15273, 108},\t /* RS */\n\t{7267, 109},\t /* RU */\n\t{11587, 110},\t /* RW */\n\t{311, 111},\t /* SA */\n\t{7456, 112},\t /* SE */\n\t{13558, 113},\t /* SG */\n\t{7847, 114},\t /* SI */\n\t{7366, 115},\t /* SK */\n\t{15516, 116},\t /* SN */\n\t{11299, 117},\t /* SO */\n\t{16896, 118},\t /* SV */\n\t{15389, 119},\t /* SY */\n\t{7503, 120},\t /* TH */\n\t{8066, 121},\t /* TJ */\n\t{9286, 122},\t /* TM */\n\t{14614, 123},\t /* TN */\n\t{7549, 124},\t /* TR */\n\t{15658, 125},\t /* TT */\n\t{6297, 126},\t /* TW */\n\t{7721, 127},\t /* UA */\n\t{6538, 128},\t /* US */\n\t{16435, 129},\t /* UY */\n\t{9350, 130},\t /* UZ */\n\t{14918, 131},\t /* VE */\n\t{8172, 132},\t /* VN */\n\t{15085, 133},\t /* YE */\n\t{8517, 134},\t /* ZA */\n\t{15933, 135}\t /* ZW */\n};\n\n\nstatic const char locale_strings [] = {\n\t\"\\0\"\n\t\"/\\0\"\n\t\":\\0\"\n\t\"am\\0\"\n\t\"pm\\0\"\n\t\".\\0\"\n\t\"a. m.\\0\"\n\t\"p. m.\\0\"\n\t\"\\xe4\\xb8\\x8a\\xe5\\x8d\\x88\\0\"\n\t\"\\xe4\\xb8\\x8b\\xe5\\x8d\\x88\\0\"\n\t\"dop.\\0\"\n\t\"odp.\\0\"\n\t\"AM\\0\"\n\t\"PM\\0\"\n\t\"-\\0\"\n\t\"vorm.\\0\"\n\t\"nachm.\\0\"\n\t\"\\xcf\\x80.\\xce\\xbc.\\0\"\n\t\"\\xce\\xbc.\\xce\\xbc.\\0\"\n\t\"ap.\\0\"\n\t\"ip.\\0\"\n\t\"\\xd7\\x9c\\xd7\\xa4\\xd7\\xa0\\xd7\\x94\\xd7\\xb4\\xd7\\xa6\\0\"\n\t\"\\xd7\\x90\\xd7\\x97\\xd7\\x94\\xd7\\xb4\\xd7\\xa6\\0\"\n\t\"de.\\0\"\n\t\"du.\\0\"\n\t\". \\0\"\n\t\"f.h.\\0\"\n\t\"e.h.\\0\"\n\t\"\\xe5\\x8d\\x88\\xe5\\x89\\x8d\\0\"\n\t\"\\xe5\\x8d\\x88\\xe5\\xbe\\x8c\\0\"\n\t\"\\xec\\x98\\xa4\\xec\\xa0\\x84\\0\"\n\t\"\\xec\\x98\\xa4\\xed\\x9b\\x84\\0\"\n\t\"a.m.\\0\"\n\t\"p.m.\\0\"\n\t\"\\xd0\\x94\\xd0\\x9f\\0\"\n\t\"\\xd0\\x9f\\xd0\\x9f\\0\"\n\t\"e paradites\\0\"\n\t\"e pasdites\\0\"\n\t\"fm\\0\"\n\t\"em\\0\"\n\t\"\\xc3\\x96\\xc3\\x96\\0\"\n\t\"\\xc3\\x96S\\0\"\n\t\"\\xd0\\xb4\\xd0\\xbf\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbf\\0\"\n\t\"pop.\\0\"\n\t\"priek\\xc5\\xa1p.\\0\"\n\t\"p\\xc4\\x93\\x63p.\\0\"\n\t\"prie\\xc5\\xa1piet\\0\"\n\t\"popiet\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb5. \\xd1\\x87\\xd0\\xbe.\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb0. \\xd1\\x87\\xd0\\xbe.\\0\"\n\t\"\\xd9\\x82.\\xd8\\xb8.\\0\"\n\t\"\\xd8\\xa8.\\xd8\\xb8.\\0\"\n\t\"SA\\0\"\n\t\"CH\\0\"\n\t\"\\xd4\\xbf\\xd4\\xb1\\0\"\n\t\"\\xd4\\xbf\\xd5\\x80\\0\"\n\t\"dopo\\xc5\\x82\\x64nja\\0\"\n\t\"popo\\xc5\\x82\\x64nju\\0\"\n\t\"\\xd0\\xbf\\xd1\\x80\\xd0\\xb5\\xd1\\x82\\xd0\\xbf\\xd0\\xbb.\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbf\\xd0\\xbb.\\0\"\n\t\"vm.\\0\"\n\t\"nm.\\0\"\n\t\"\\xe0\\xa4\\xaa\\xe0\\xa5\\x82\\xe0\\xa4\\xb0\\xe0\\xa5\\x8d\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb9\\xe0\\xa5\\x8d\\xe0\\xa4\\xa8\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\xaa\\xe0\\xa4\\xb0\\xe0\\xa4\\xbe\\xe0\\xa4\\xb9\\xe0\\xa5\\x8d\\xe0\\xa4\\xa8\\0\"\n\t\"i.b.\\0\"\n\t\"e.b.\\0\"\n\t\"PG\\0\"\n\t\"PTG\\0\"\n\t\"\\xd1\\x82\\xd2\\xa3\\0\"\n\t\"\\xd1\\x82\\xd0\\xba\\0\"\n\t\"TO\\0\"\n\t\"TK\\0\"\n\t\"\\xe0\\xa8\\xaa\\xe0\\xa9\\x82.\\xe0\\xa8\\xa6\\xe0\\xa9\\x81.\\0\"\n\t\"\\xe0\\xa8\\xac\\xe0\\xa8\\xbe.\\xe0\\xa8\\xa6\\xe0\\xa9\\x81.\\0\"\n\t\"\\xe0\\xae\\xae\\xe0\\xaf\\x81\\xe0\\xae\\xb1\\xe0\\xaf\\x8d\\xe0\\xae\\xaa\\xe0\\xae\\x95\\xe0\\xae\\xb2\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\xaa\\xe0\\xae\\xbf\\xe0\\xae\\xb1\\xe0\\xaf\\x8d\\xe0\\xae\\xaa\\xe0\\xae\\x95\\xe0\\xae\\xb2\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xb2\\xaa\\xe0\\xb3\\x82\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb9\\xe0\\xb3\\x8d\\xe0\\xb2\\xa8\\0\"\n\t\"\\xe0\\xb2\\x85\\xe0\\xb2\\xaa\\xe0\\xb2\\xb0\\xe0\\xb2\\xbe\\xe0\\xb2\\xb9\\xe0\\xb3\\x8d\\xe0\\xb2\\xa8\\0\"\n\t\"\\xe0\\xa6\\xaa\\xe0\\xa7\\x82\\xe0\\xa7\\xb0\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb9\\xe0\\xa7\\x8d\\xe0\\xa6\\xa3\\0\"\n\t\"\\xe0\\xa6\\x85\\xe0\\xa6\\xaa\\xe0\\xa7\\xb0\\xe0\\xa6\\xbe\\xe0\\xa6\\xb9\\xe0\\xa7\\x8d\\xe0\\xa6\\xa3\\0\"\n\t\"\\xe0\\xa4\\xae.\\xe0\\xa4\\xaa\\xe0\\xa5\\x82.\\0\"\n\t\"\\xe0\\xa4\\xae.\\xe0\\xa4\\x89.\\0\"\n\t\"\\xd2\\xae\\xd3\\xa8\\0\"\n\t\"\\xd2\\xae\\xd0\\xa5\\0\"\n\t\"\\xe0\\xbd\\xa6\\xe0\\xbe\\x94\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbe\\xb2\\xe0\\xbd\\xbc\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x95\\xe0\\xbe\\xb1\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbe\\xb2\\xe0\\xbd\\xbc\\xe0\\xbc\\x8b\\0\"\n\t\"yb\\0\"\n\t\"yh\\0\"\n\t\"\\xe0\\xba\\x81\\xe0\\xbb\\x88\\xe0\\xba\\xad\\xe0\\xba\\x99\\xe0\\xba\\x97\\xe0\\xbb\\x88\\xe0\\xba\\xbd\\xe0\\xba\\x87\\0\"\n\t\"\\xe0\\xba\\xab\\xe0\\xba\\xbc\\xe0\\xba\\xb1\\xe0\\xba\\x87\\xe0\\xba\\x97\\xe0\\xbb\\x88\\xe0\\xba\\xbd\\xe0\\xba\\x87\\0\"\n\t\"\\xe1\\x80\\x94\\xe1\\x80\\xb6\\xe1\\x80\\x94\\xe1\\x80\\x80\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\x8a\\xe1\\x80\\x94\\xe1\\x80\\xb1\\0\"\n\t\"\\xe0\\xa4\\xae.\\xe0\\xa4\\xa8\\xe0\\xa4\\x82.\\0\"\n\t\"\\xe0\\xb6\\xb4\\xe0\\xb7\\x99.\\xe0\\xb7\\x80.\\0\"\n\t\"\\xe0\\xb6\\xb4.\\xe0\\xb7\\x80.\\0\"\n\t\"\\xe1\\x8f\\x8c\\xe1\\x8e\\xbe\\xe1\\x8e\\xb4\\0\"\n\t\"\\xe1\\x8f\\x92\\xe1\\x8e\\xaf\\xe1\\x8f\\xb1\\xe1\\x8e\\xa2\\xe1\\x8f\\x97\\xe1\\x8f\\xa2\\0\"\n\t\"\\xe1\\x8c\\xa5\\xe1\\x8b\\x8b\\xe1\\x89\\xb5\\0\"\n\t\"\\xe1\\x8a\\xa8\\xe1\\x88\\xb0\\xe1\\x8b\\x93\\xe1\\x89\\xb5\\0\"\n\t\"Zdat azal\\0\"\n\t\"\\xe1\\xb8\\x8c\\x65\\x66\\x66ir aza\\0\"\n\t\"subaka\\0\"\n\t\"kikii\\xc9\\x97\\x65\\0\"\n\t\"\\xc3\\x80\\xc3\\xa1r\\xe1\\xbb\\x8d\\xcc\\x80\\0\"\n\t\"\\xe1\\xbb\\x8c\\xcc\\x80s\\xc3\\xa1n\\0\"\n\t\"moies\\0\"\n\t\"nom\\xc3\\xabttes\\0\"\n\t\"u.t.\\0\"\n\t\"u.k.\\0\"\n\t\"A.M.\\0\"\n\t\"P.M.\\0\"\n\t\"WD\\0\"\n\t\"WB\\0\"\n\t\"\\xe1\\x8a\\x95\\xe1\\x8c\\x89\\xe1\\x88\\x86 \\xe1\\x88\\xb0\\xe1\\x8b\\x93\\xe1\\x89\\xb0\\0\"\n\t\"\\xe1\\x8b\\xb5\\xe1\\x88\\x95\\xe1\\x88\\xad \\xe1\\x88\\xb0\\xe1\\x8b\\x93\\xe1\\x89\\xb5\\0\"\n\t\"sn.\\0\"\n\t\"gn.\\0\"\n\t\"\\xea\\x8e\\xb8\\xea\\x84\\x91\\0\"\n\t\"\\xea\\x81\\xaf\\xea\\x8b\\x92\\0\"\n\t\"G.M.\\0\"\n\t\"\\xda\\x86.\\xd8\\xa8\\0\"\n\t\"\\xda\\x86.\\xd9\\x83\\0\"\n\t\"v.m.\\0\"\n\t\"n.m.\\0\"\n\t\"\\xd0\\xad\\xd0\\x98\\0\"\n\t\"\\xd0\\xad\\xd0\\x9a\\0\"\n\t\"m\\0\"\n\t\"f\\0\"\n\t\"\\xd8\\xb5\\0\"\n\t\"\\xd9\\x85\\0\"\n\t\"f.m.\\0\"\n\t\"e.m.\\0\"\n\t\"\\xd0\\x90\\xd0\\x9c\\0\"\n\t\"\\xd0\\x9f\\xd0\\x9c\\0\"\n\t\"w\\xc3\\xb3tpo\\xc5\\x82\\x64nja\\0\"\n\t\"\\xd0\\xa2\\xd0\\x9e\\0\"\n\t\"\\xd0\\xa2\\xd0\\x9a\\0\"\n\t\"prijepodne\\0\"\n\t\"popodne\\0\"\n\t\"prije podne\\0\"\n\t\"po podne\\0\"\n\t\"\\xd0\\xbf\\xd1\\x80\\xd0\\xb8\\xd1\\x98\\xd0\\xb5 \\xd0\\xbf\\xd0\\xbe\\xd0\\xb4\\xd0\\xbd\\xd0\\xb5\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe \\xd0\\xbf\\xd0\\xbe\\xd0\\xb4\\xd0\\xbd\\xd0\\xb5\\0\"\n\t\"\\xd0\\xbf\\xd1\\x80\\xd0\\xb5 \\xd0\\xbf\\xd0\\xbe\\xd0\\xb4\\xd0\\xbd\\xd0\\xb5\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbf\\xd0\\xbe\\xd0\\xb4\\xd0\\xbd\\xd0\\xb5\\0\"\n\t\"pre podne\\0\"\n\t\"ep.\\0\"\n\t\"mat.\\0\"\n\t\"soir\\0\"\n\t\",\\0\"\n\t\"\\xd8\\xb1.\\xd8\\xb3.\\xe2\\x80\\x8f\\0\"\n\t\"\\xd9\\xaa\\xd8\\x9c\\0\"\n\t\"\\xd9\\x84\\xd9\\x8a\\xd8\\xb3\\xc2\\xa0\\xd8\\xb1\\xd9\\x82\\xd9\\x85\\0\"\n\t\"\\xd8\\x89\\0\"\n\t\"-Infinity\\0\"\n\t\"Infinity\\0\"\n\t\"\\xd8\\x9c+\\0\"\n\t\"\\xc2\\xa0\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb2.\\0\"\n\t\"%\\0\"\n\t\"NaN\\0\"\n\t\"\\xe2\\x80\\xb0\\0\"\n\t\"+\\0\"\n\t\"\\xe2\\x82\\xac\\0\"\n\t\"-Infinit\\0\"\n\t\"Infinit\\0\"\n\t\"\\xc2\\xa5\\0\"\n\t\"K\\xc4\\x8d\\0\"\n\t\"-nekone\\xc4\\x8dno\\0\"\n\t\"+nekone\\xc4\\x8dno\\0\"\n\t\"kr.\\0\"\n\t\"-unendlich\\0\"\n\t\"+unendlich\\0\"\n\t\"-\\xce\\x86\\xcf\\x80\\xce\\xb5\\xce\\xb9\\xcf\\x81\\xce\\xbf\\0\"\n\t\"\\xce\\x86\\xcf\\x80\\xce\\xb5\\xce\\xb9\\xcf\\x81\\xce\\xbf\\0\"\n\t\"$\\0\"\n\t\"-Infinito\\0\"\n\t\"Infinito\\0\"\n\t\"ep\\xc3\\xa4luku\\0\"\n\t\"\\xd9\\xaa\\0\"\n\t\"-Infini\\0\"\n\t\"+Infini\\0\"\n\t\"\\xe2\\x82\\xaa\\0\"\n\t\"\\xe2\\x80\\x8e+\\0\"\n\t\"Ft\\0\"\n\t\"ISK\\0\"\n\t\"+Infinito\\0\"\n\t\"\\xef\\xbf\\xa5\\0\"\n\t\"\\xe2\\x82\\xa9\\0\"\n\t\"-oneindig\\0\"\n\t\"oneindig\\0\"\n\t\"z\\xc5\\x82\\0\"\n\t\"-niesko\\xc5\\x84\\x63zono\\xc5\\x9b\\xc4\\x87\\0\"\n\t\"+niesko\\xc5\\x84\\x63zono\\xc5\\x9b\\xc4\\x87\\0\"\n\t\"R$\\0\"\n\t\"\\xe2\\x80\\x99\\0\"\n\t\"CHF\\0\"\n\t\"-infinit\\0\"\n\t\"+infinit\\0\"\n\t\"RON\\0\"\n\t\"\\xe2\\x82\\xbd\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xc2\\xa0\\xd1\\x87\\xd0\\xb8\\xd1\\x81\\xd0\\xbb\\xd0\\xbe\\0\"\n\t\"-\\xd0\\xb1\\xd0\\xb5\\xd1\\x81\\xd0\\xba\\xd0\\xbe\\xd0\\xbd\\xd0\\xb5\\xd1\\x87\\xd0\\xbd\\xd0\\xbe\\xd1\\x81\\xd1\\x82\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd1\\x81\\xd0\\xba\\xd0\\xbe\\xd0\\xbd\\xd0\\xb5\\xd1\\x87\\xd0\\xbd\\xd0\\xbe\\xd1\\x81\\xd1\\x82\\xd1\\x8c\\0\"\n\t\"kn\\0\"\n\t\"Lek\\xc3\\xab\\0\"\n\t\"kr\\0\"\n\t\"\\xc2\\xa4\\xc2\\xa4\\xc2\\xa4\\0\"\n\t\"\\xd8\\x89\\xe2\\x80\\x8f\\0\"\n\t\"THB\\0\"\n\t\"\\xe2\\x82\\xba\\0\"\n\t\"Rs\\0\"\n\t\"\\xe2\\x80\\x8e+\\xe2\\x80\\x8e\\0\"\n\t\"Rp\\0\"\n\t\"\\xe2\\x82\\xb4\\0\"\n\t\"Br\\0\"\n\t\"-neskon\\xc4\\x8dnost\\0\"\n\t\"neskon\\xc4\\x8dnost\\0\"\n\t\"NS\\0\"\n\t\"-bezgal\\xc4\\xab\\x62\\x61\\0\"\n\t\"bezgal\\xc4\\xab\\x62\\x61\\0\"\n\t\"-begalyb\\xc4\\x97\\0\"\n\t\"begalyb\\xc4\\x97\\0\"\n\t\"\\xd8\\xb1\\xdb\\x8c\\xd8\\xa7\\xd9\\x84\\0\"\n\t\"\\xe2\\x82\\xab\\0\"\n\t\"\\xd6\\x8f\\0\"\n\t\"\\xd5\\x88\\xd5\\xb9\\xd4\\xb9\\0\"\n\t\"-Infinitu\\0\"\n\t\"Infinitu\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xbd\\0\"\n\t\"R\\0\"\n\t\"\\xe2\\x82\\xbe\\0\"\n\t\"\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xc2\\xa0\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x98\\xe1\\x83\\xa1\\xc2\\xa0\\xe1\\x83\\xa0\\xe1\\x83\\x98\\xe1\\x83\\xaa\\xe1\\x83\\xae\\xe1\\x83\\x95\\xe1\\x83\\x98\\0\"\n\t\"\\xe2\\x82\\xb9\\0\"\n\t\"RM\\0\"\n\t\"\\xe2\\x82\\xb8\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xbd\\xc2\\xa0\\xd0\\xb5\\xd0\\xbc\\xd0\\xb5\\xd1\\x81\\0\"\n\t\"\\xd1\\x81\\xd0\\xbe\\xd0\\xbc\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xbd\\xc2\\xa0\\xd1\\x8d\\xd0\\xbc\\xd0\\xb5\\xd1\\x81\\0\"\n\t\"Ksh\\0\"\n\t\"TMT\\0\"\n\t\"san\\xc2\\xa0\\x64\\xc3\\xa4l\\0\"\n\t\"haqiqiy\\xc2\\xa0son\\xc2\\xa0\\x65mas\\0\"\n\t\"\\xe0\\xa6\\x9f\\xe0\\xa6\\xbe\\0\"\n\t\"`\\0\"\n\t\"\\xc2\\xa3\\0\"\n\t\"\\xe1\\x9f\\x9b\\0\"\n\t\"\\xe2\\x82\\xad\\0\"\n\t\"\\xe0\\xba\\x9a\\xe0\\xbb\\x8d\\xe0\\xbb\\x88\\xe2\\x80\\x8b\\xe0\\xbb\\x81\\xe0\\xba\\xa1\\xe0\\xbb\\x88\\xe0\\xba\\x99\\xe2\\x80\\x8b\\xe0\\xbb\\x82\\xe0\\xba\\x95\\xe2\\x80\\x8b\\xe0\\xbb\\x80\\xe0\\xba\\xa5\\xe0\\xba\\x81\\0\"\n\t\"K\\0\"\n\t\"\\xe1\\x80\\x82\\xe1\\x80\\x8f\\xe1\\x80\\x94\\xe1\\x80\\xba\\xe1\\x80\\xb8\\xe1\\x80\\x99\\xe1\\x80\\x9f\\xe1\\x80\\xaf\\xe1\\x80\\x90\\xe1\\x80\\xba\\xe1\\x80\\x9e\\xe1\\x80\\xb1\\xe1\\x80\\xac\\0\"\n\t\"\\xe0\\xb6\\xbb\\xe0\\xb7\\x94.\\0\"\n\t\"\\xe1\\x89\\xa5\\xe1\\x88\\xad\\0\"\n\t\"\\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\0\"\n\t\"\\xd8\\x8b\\0\"\n\t\"\\xe2\\x82\\xb1\\0\"\n\t\"\\xe2\\x82\\xa6\\0\"\n\t\"Nfk\\0\"\n\t\"S\\0\"\n\t\"\\xd1\\x87\\xd1\\x8b\\xd1\\x8b\\xd2\\xbb\\xd1\\x8b\\xd0\\xbb\\xd0\\xb0\\xc2\\xa0\\xd0\\xb1\\xd1\\x83\\xd0\\xbe\\xd1\\x82\\xd0\\xb0\\xd1\\x85\\0\"\n\t\"RF\\0\"\n\t\"\\xe9\\x9d\\x9e\\xe6\\x95\\xb8\\xe5\\x80\\xbc\\0\"\n\t\"HRK\\0\"\n\t\"\\xe2\\x82\\xbc\\0\"\n\t\"so\\xca\\xbbm\\0\"\n\t\"\\xe2\\x82\\xae\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xb0\\xe0\\xa5\\x82\\0\"\n\t\"\\xd8\\xaf.\\xd8\\xb9.\\xe2\\x80\\x8f\\0\"\n\t\"'\\0\"\n\t\"L\\0\"\n\t\"P\\0\"\n\t\"\\xd1\\x81\\xd1\\x9e\\xd0\\xbc\\0\"\n\t\"\\xd2\\xb3\\xd0\\xb0\\xd2\\x9b\\xd0\\xb8\\xd2\\x9b\\xd0\\xb8\\xd0\\xb9\\xc2\\xa0\\xd1\\x81\\xd0\\xbe\\xd0\\xbd\\xc2\\xa0\\xd1\\x8d\\xd0\\xbc\\xd0\\xb0\\xd1\\x81\\0\"\n\t\"\\xe0\\xa7\\xb3\\0\"\n\t\"\\xd8\\xb1\\0\"\n\t\"Rs.\\0\"\n\t\"\\xd8\\xac.\\xd9\\x85.\\xe2\\x80\\x8f\\0\"\n\t\"HK$\\0\"\n\t\"\\xd8\\xaf.\\xd9\\x84.\\xe2\\x80\\x8f\\0\"\n\t\"Q\\0\"\n\t\"KM\\0\"\n\t\"\\xd8\\xaf.\\xd8\\xac.\\xe2\\x80\\x8f\\0\"\n\t\"MOP$\\0\"\n\t\"\\xe2\\x82\\xa1\\0\"\n\t\"\\xd8\\xaf.\\xd9\\x85.\\xe2\\x80\\x8f\\0\"\n\t\"B/.\\0\"\n\t\"\\xd8\\xaf.\\xd8\\xaa.\\xe2\\x80\\x8f\\0\"\n\t\"RD$\\0\"\n\t\"\\xd0\\x9a\\xd0\\x9c\\0\"\n\t\"\\xd8\\xb1.\\xd8\\xb9.\\xe2\\x80\\x8f\\0\"\n\t\"Bs.\\0\"\n\t\"\\xd8\\xb1.\\xd9\\x8a.\\xe2\\x80\\x8f\\0\"\n\t\"FC\\0\"\n\t\"RSD\\0\"\n\t\"epiloho\\0\"\n\t\"\\xd9\\x84.\\xd8\\xb3.\\xe2\\x80\\x8f\\0\"\n\t\"S/\\0\"\n\t\"CFA\\0\"\n\t\"\\xd8\\xaf.\\xd8\\xa3.\\xe2\\x80\\x8f\\0\"\n\t\"FCFA\\0\"\n\t\"\\xd9\\x84.\\xd9\\x84.\\xe2\\x80\\x8f\\0\"\n\t\"\\xd8\\xaf.\\xd9\\x83.\\xe2\\x80\\x8f\\0\"\n\t\"\\xd8\\xaf.\\xd8\\xa5.\\xe2\\x80\\x8f\\0\"\n\t\"MAD\\0\"\n\t\"\\xd8\\xaf.\\xd8\\xa8.\\xe2\\x80\\x8f\\0\"\n\t\"Gs.\\0\"\n\t\"G\\0\"\n\t\"\\xd8\\xb1.\\xd9\\x82.\\xe2\\x80\\x8f\\0\"\n\t\"Bs\\0\"\n\t\"C$\\0\"\n\t\"\\xd0\\x94\\xd0\\xb8\\xd0\\xbd.\\0\"\n\t\"Din.\\0\"\n\t\"ar\\0\"\n\t\"Arabic\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9\\0\"\n\t\"ARA\\0\"\n\t\"ara\\0\"\n\t\"bg\\0\"\n\t\"Bulgarian\\0\"\n\t\"\\xd0\\xb1\\xd1\\x8a\\xd0\\xbb\\xd0\\xb3\\xd0\\xb0\\xd1\\x80\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\0\"\n\t\"BGR\\0\"\n\t\"bul\\0\"\n\t\"ca\\0\"\n\t\"Catalan\\0\"\n\t\"catal\\xc3\\xa0\\0\"\n\t\"CAT\\0\"\n\t\"cat\\0\"\n\t\"zh-Hans\\0\"\n\t\"Chinese (Simplified)\\0\"\n\t\"\\xe4\\xb8\\xad\\xe6\\x96\\x87\\0\"\n\t\"CHS\\0\"\n\t\"zho\\0\"\n\t\"zh\\0\"\n\t\"zh-CHS\\0\"\n\t\"Chinese (Simplified) Legacy\\0\"\n\t\"cs\\0\"\n\t\"Czech\\0\"\n\t\"\\xc4\\x8d\\x65\\xc5\\xa1tina\\0\"\n\t\"CSY\\0\"\n\t\"ces\\0\"\n\t\"da\\0\"\n\t\"Danish\\0\"\n\t\"dansk\\0\"\n\t\"DAN\\0\"\n\t\"dan\\0\"\n\t\"de\\0\"\n\t\"German\\0\"\n\t\"Deutsch\\0\"\n\t\"DEU\\0\"\n\t\"deu\\0\"\n\t\"el\\0\"\n\t\"Greek\\0\"\n\t\"\\xce\\x95\\xce\\xbb\\xce\\xbb\\xce\\xb7\\xce\\xbd\\xce\\xb9\\xce\\xba\\xce\\xac\\0\"\n\t\"ELL\\0\"\n\t\"ell\\0\"\n\t\"en\\0\"\n\t\"English\\0\"\n\t\"ENU\\0\"\n\t\"eng\\0\"\n\t\"es\\0\"\n\t\"Spanish\\0\"\n\t\"espa\\xc3\\xb1ol\\0\"\n\t\"ESP\\0\"\n\t\"spa\\0\"\n\t\"fi\\0\"\n\t\"Finnish\\0\"\n\t\"suomi\\0\"\n\t\"FIN\\0\"\n\t\"fin\\0\"\n\t\"fr\\0\"\n\t\"French\\0\"\n\t\"fran\\xc3\\xa7\\x61is\\0\"\n\t\"FRA\\0\"\n\t\"fra\\0\"\n\t\"he\\0\"\n\t\"Hebrew\\0\"\n\t\"\\xd7\\xa2\\xd7\\x91\\xd7\\xa8\\xd7\\x99\\xd7\\xaa\\0\"\n\t\"HEB\\0\"\n\t\"heb\\0\"\n\t\"hu\\0\"\n\t\"Hungarian\\0\"\n\t\"magyar\\0\"\n\t\"HUN\\0\"\n\t\"hun\\0\"\n\t\"is\\0\"\n\t\"Icelandic\\0\"\n\t\"\\xc3\\xadslenska\\0\"\n\t\"ISL\\0\"\n\t\"isl\\0\"\n\t\"it\\0\"\n\t\"Italian\\0\"\n\t\"italiano\\0\"\n\t\"ITA\\0\"\n\t\"ita\\0\"\n\t\"ja\\0\"\n\t\"Japanese\\0\"\n\t\"\\xe6\\x97\\xa5\\xe6\\x9c\\xac\\xe8\\xaa\\x9e\\0\"\n\t\"JPN\\0\"\n\t\"jpn\\0\"\n\t\"ko\\0\"\n\t\"Korean\\0\"\n\t\"\\xed\\x95\\x9c\\xea\\xb5\\xad\\xec\\x96\\xb4\\0\"\n\t\"KOR\\0\"\n\t\"kor\\0\"\n\t\"nl\\0\"\n\t\"Dutch\\0\"\n\t\"Nederlands\\0\"\n\t\"NLD\\0\"\n\t\"nld\\0\"\n\t\"no\\0\"\n\t\"Norwegian\\0\"\n\t\"norsk\\0\"\n\t\"NOR\\0\"\n\t\"nob\\0\"\n\t\"nb\\0\"\n\t\"pl\\0\"\n\t\"Polish\\0\"\n\t\"polski\\0\"\n\t\"PLK\\0\"\n\t\"pol\\0\"\n\t\"pt\\0\"\n\t\"Portuguese\\0\"\n\t\"portugu\\xc3\\xaas\\0\"\n\t\"PTB\\0\"\n\t\"por\\0\"\n\t\"rm\\0\"\n\t\"Romansh\\0\"\n\t\"rumantsch\\0\"\n\t\"RMC\\0\"\n\t\"roh\\0\"\n\t\"ro\\0\"\n\t\"Romanian\\0\"\n\t\"rom\\xc3\\xa2n\\xc4\\x83\\0\"\n\t\"ROM\\0\"\n\t\"ron\\0\"\n\t\"ru\\0\"\n\t\"Russian\\0\"\n\t\"\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\xd0\\xb9\\0\"\n\t\"RUS\\0\"\n\t\"rus\\0\"\n\t\"hr\\0\"\n\t\"Croatian\\0\"\n\t\"hrvatski\\0\"\n\t\"HRV\\0\"\n\t\"hrv\\0\"\n\t\"sk\\0\"\n\t\"Slovak\\0\"\n\t\"sloven\\xc4\\x8dina\\0\"\n\t\"SKY\\0\"\n\t\"slk\\0\"\n\t\"sq\\0\"\n\t\"Albanian\\0\"\n\t\"shqip\\0\"\n\t\"SQI\\0\"\n\t\"sqi\\0\"\n\t\"sv\\0\"\n\t\"Swedish\\0\"\n\t\"svenska\\0\"\n\t\"SVE\\0\"\n\t\"swe\\0\"\n\t\"th\\0\"\n\t\"Thai\\0\"\n\t\"\\xe0\\xb9\\x84\\xe0\\xb8\\x97\\xe0\\xb8\\xa2\\0\"\n\t\"THA\\0\"\n\t\"tha\\0\"\n\t\"tr\\0\"\n\t\"Turkish\\0\"\n\t\"T\\xc3\\xbcrk\\xc3\\xa7\\x65\\0\"\n\t\"TRK\\0\"\n\t\"tur\\0\"\n\t\"ur\\0\"\n\t\"Urdu\\0\"\n\t\"\\xd8\\xa7\\xd8\\xb1\\xd8\\xaf\\xd9\\x88\\0\"\n\t\"URD\\0\"\n\t\"urd\\0\"\n\t\"id\\0\"\n\t\"Indonesian\\0\"\n\t\"Indonesia\\0\"\n\t\"IND\\0\"\n\t\"ind\\0\"\n\t\"uk\\0\"\n\t\"Ukrainian\\0\"\n\t\"\\xd1\\x83\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x97\\xd0\\xbd\\xd1\\x81\\xd1\\x8c\\xd0\\xba\\xd0\\xb0\\0\"\n\t\"UKR\\0\"\n\t\"ukr\\0\"\n\t\"be\\0\"\n\t\"Belarusian\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd0\\xba\\xd0\\xb0\\xd1\\x8f\\0\"\n\t\"BEL\\0\"\n\t\"bel\\0\"\n\t\"sl\\0\"\n\t\"Slovenian\\0\"\n\t\"sloven\\xc5\\xa1\\xc4\\x8dina\\0\"\n\t\"SLV\\0\"\n\t\"slv\\0\"\n\t\"et\\0\"\n\t\"Estonian\\0\"\n\t\"eesti\\0\"\n\t\"ETI\\0\"\n\t\"est\\0\"\n\t\"lv\\0\"\n\t\"Latvian\\0\"\n\t\"latvie\\xc5\\xa1u\\0\"\n\t\"LVI\\0\"\n\t\"lav\\0\"\n\t\"lt\\0\"\n\t\"Lithuanian\\0\"\n\t\"lietuvi\\xc5\\xb3\\0\"\n\t\"LTH\\0\"\n\t\"lit\\0\"\n\t\"tg\\0\"\n\t\"Tajik\\0\"\n\t\"\\xd0\\xa2\\xd0\\xbe\\xd2\\xb7\\xd0\\xb8\\xd0\\xba\\xd3\\xa3\\0\"\n\t\"TAJ\\0\"\n\t\"tgk\\0\"\n\t\"fa\\0\"\n\t\"Persian\\0\"\n\t\"\\xd9\\x81\\xd8\\xa7\\xd8\\xb1\\xd8\\xb3\\xdb\\x8c\\0\"\n\t\"FAR\\0\"\n\t\"fas\\0\"\n\t\"vi\\0\"\n\t\"Vietnamese\\0\"\n\t\"Ti\\xe1\\xba\\xbfng Vi\\xe1\\xbb\\x87t\\0\"\n\t\"VIT\\0\"\n\t\"vie\\0\"\n\t\"hy\\0\"\n\t\"Armenian\\0\"\n\t\"\\xd5\\xb0\\xd5\\xa1\\xd5\\xb5\\xd5\\xa5\\xd6\\x80\\xd5\\xa5\\xd5\\xb6\\0\"\n\t\"HYE\\0\"\n\t\"hye\\0\"\n\t\"az\\0\"\n\t\"Azerbaijani\\0\"\n\t\"az\\xc9\\x99rbaycan\\0\"\n\t\"AZE\\0\"\n\t\"aze\\0\"\n\t\"eu\\0\"\n\t\"Basque\\0\"\n\t\"euskara\\0\"\n\t\"EUQ\\0\"\n\t\"eus\\0\"\n\t\"hsb\\0\"\n\t\"Upper Sorbian\\0\"\n\t\"hornjoserb\\xc5\\xa1\\xc4\\x87ina\\0\"\n\t\"HSB\\0\"\n\t\"mk\\0\"\n\t\"Macedonian\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd0\\xba\\xd0\\xb5\\xd0\\xb4\\xd0\\xbe\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\0\"\n\t\"MKI\\0\"\n\t\"mkd\\0\"\n\t\"st\\0\"\n\t\"Southern Sotho\\0\"\n\t\"Sesotho\\0\"\n\t\"SOT\\0\"\n\t\"sot\\0\"\n\t\"ts\\0\"\n\t\"Tsonga\\0\"\n\t\"Xitsonga\\0\"\n\t\"TSO\\0\"\n\t\"tso\\0\"\n\t\"tn\\0\"\n\t\"Tswana\\0\"\n\t\"Setswana\\0\"\n\t\"TSN\\0\"\n\t\"tsn\\0\"\n\t\"xh\\0\"\n\t\"Xhosa\\0\"\n\t\"isiXhosa\\0\"\n\t\"XHO\\0\"\n\t\"xho\\0\"\n\t\"zu\\0\"\n\t\"Zulu\\0\"\n\t\"isiZulu\\0\"\n\t\"ZUL\\0\"\n\t\"zul\\0\"\n\t\"af\\0\"\n\t\"Afrikaans\\0\"\n\t\"AFK\\0\"\n\t\"afr\\0\"\n\t\"ka\\0\"\n\t\"Georgian\\0\"\n\t\"\\xe1\\x83\\xa5\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x97\\xe1\\x83\\xa3\\xe1\\x83\\x9a\\xe1\\x83\\x98\\0\"\n\t\"KAT\\0\"\n\t\"kat\\0\"\n\t\"fo\\0\"\n\t\"Faroese\\0\"\n\t\"f\\xc3\\xb8royskt\\0\"\n\t\"FOS\\0\"\n\t\"fao\\0\"\n\t\"hi\\0\"\n\t\"Hindi\\0\"\n\t\"\\xe0\\xa4\\xb9\\xe0\\xa4\\xbf\\xe0\\xa4\\xa8\\xe0\\xa5\\x8d\\xe0\\xa4\\xa6\\xe0\\xa5\\x80\\0\"\n\t\"HIN\\0\"\n\t\"hin\\0\"\n\t\"mt\\0\"\n\t\"Maltese\\0\"\n\t\"Malti\\0\"\n\t\"MLT\\0\"\n\t\"mlt\\0\"\n\t\"se\\0\"\n\t\"Northern Sami\\0\"\n\t\"davvis\\xc3\\xa1megiella\\0\"\n\t\"SME\\0\"\n\t\"sme\\0\"\n\t\"ga\\0\"\n\t\"Irish\\0\"\n\t\"Gaeilge\\0\"\n\t\"IRE\\0\"\n\t\"gle\\0\"\n\t\"ms\\0\"\n\t\"Malay\\0\"\n\t\"Bahasa Melayu\\0\"\n\t\"MSL\\0\"\n\t\"msa\\0\"\n\t\"kk\\0\"\n\t\"Kazakh\\0\"\n\t\"\\xd2\\x9b\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd2\\x9b \\xd1\\x82\\xd1\\x96\\xd0\\xbb\\xd1\\x96\\0\"\n\t\"KKZ\\0\"\n\t\"kaz\\0\"\n\t\"ky\\0\"\n\t\"Kyrgyz\\0\"\n\t\"\\xd0\\xba\\xd1\\x8b\\xd1\\x80\\xd0\\xb3\\xd1\\x8b\\xd0\\xb7\\xd1\\x87\\xd0\\xb0\\0\"\n\t\"KYR\\0\"\n\t\"kir\\0\"\n\t\"sw\\0\"\n\t\"Swahili\\0\"\n\t\"Kiswahili\\0\"\n\t\"SWK\\0\"\n\t\"swa\\0\"\n\t\"tk\\0\"\n\t\"Turkmen\\0\"\n\t\"t\\xc3\\xbcrkmen\\xc3\\xa7\\x65\\0\"\n\t\"TUK\\0\"\n\t\"tuk\\0\"\n\t\"uz\\0\"\n\t\"Uzbek\\0\"\n\t\"o\\xe2\\x80\\x98zbek\\0\"\n\t\"UZB\\0\"\n\t\"uzb\\0\"\n\t\"tt\\0\"\n\t\"Tatar\\0\"\n\t\"\\xd1\\x82\\xd0\\xb0\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"TTT\\0\"\n\t\"tat\\0\"\n\t\"bn\\0\"\n\t\"Bangla\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\x82\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe\\0\"\n\t\"BNG\\0\"\n\t\"ben\\0\"\n\t\"pa\\0\"\n\t\"Punjabi\\0\"\n\t\"\\xe0\\xa8\\xaa\\xe0\\xa9\\xb0\\xe0\\xa8\\x9c\\xe0\\xa8\\xbe\\xe0\\xa8\\xac\\xe0\\xa9\\x80\\0\"\n\t\"PAN\\0\"\n\t\"pan\\0\"\n\t\"gu\\0\"\n\t\"Gujarati\\0\"\n\t\"\\xe0\\xaa\\x97\\xe0\\xab\\x81\\xe0\\xaa\\x9c\\xe0\\xaa\\xb0\\xe0\\xaa\\xbe\\xe0\\xaa\\xa4\\xe0\\xab\\x80\\0\"\n\t\"GUJ\\0\"\n\t\"guj\\0\"\n\t\"or\\0\"\n\t\"Odia\\0\"\n\t\"\\xe0\\xac\\x93\\xe0\\xac\\xa1\\xe0\\xac\\xbc\\xe0\\xac\\xbf\\xe0\\xac\\x86\\0\"\n\t\"ORI\\0\"\n\t\"ori\\0\"\n\t\"ta\\0\"\n\t\"Tamil\\0\"\n\t\"\\xe0\\xae\\xa4\\xe0\\xae\\xae\\xe0\\xae\\xbf\\xe0\\xae\\xb4\\xe0\\xaf\\x8d\\0\"\n\t\"TAI\\0\"\n\t\"tam\\0\"\n\t\"te\\0\"\n\t\"Telugu\\0\"\n\t\"\\xe0\\xb0\\xa4\\xe0\\xb1\\x86\\xe0\\xb0\\xb2\\xe0\\xb1\\x81\\xe0\\xb0\\x97\\xe0\\xb1\\x81\\0\"\n\t\"TEL\\0\"\n\t\"tel\\0\"\n\t\"Kannada\\0\"\n\t\"\\xe0\\xb2\\x95\\xe0\\xb2\\xa8\\xe0\\xb3\\x8d\\xe0\\xb2\\xa8\\xe0\\xb2\\xa1\\0\"\n\t\"KDI\\0\"\n\t\"kan\\0\"\n\t\"ml\\0\"\n\t\"Malayalam\\0\"\n\t\"\\xe0\\xb4\\xae\\xe0\\xb4\\xb2\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\xe0\\xb4\\xb3\\xe0\\xb4\\x82\\0\"\n\t\"MYM\\0\"\n\t\"mal\\0\"\n\t\"as\\0\"\n\t\"Assamese\\0\"\n\t\"\\xe0\\xa6\\x85\\xe0\\xa6\\xb8\\xe0\\xa6\\xae\\xe0\\xa7\\x80\\xe0\\xa6\\xaf\\xe0\\xa6\\xbc\\xe0\\xa6\\xbe\\0\"\n\t\"ASM\\0\"\n\t\"asm\\0\"\n\t\"mr\\0\"\n\t\"Marathi\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\xb0\\xe0\\xa4\\xbe\\xe0\\xa4\\xa0\\xe0\\xa5\\x80\\0\"\n\t\"MAR\\0\"\n\t\"mar\\0\"\n\t\"mn\\0\"\n\t\"Mongolian\\0\"\n\t\"\\xd0\\xbc\\xd0\\xbe\\xd0\\xbd\\xd0\\xb3\\xd0\\xbe\\xd0\\xbb\\0\"\n\t\"MON\\0\"\n\t\"mon\\0\"\n\t\"bo\\0\"\n\t\"Tibetan\\0\"\n\t\"\\xe0\\xbd\\x96\\xe0\\xbd\\xbc\\xe0\\xbd\\x91\\xe0\\xbc\\x8b\\xe0\\xbd\\xa6\\xe0\\xbe\\x90\\xe0\\xbd\\x91\\xe0\\xbc\\x8b\\0\"\n\t\"BOB\\0\"\n\t\"bod\\0\"\n\t\"cy\\0\"\n\t\"Welsh\\0\"\n\t\"Cymraeg\\0\"\n\t\"CYM\\0\"\n\t\"cym\\0\"\n\t\"km\\0\"\n\t\"Khmer\\0\"\n\t\"\\xe1\\x9e\\x81\\xe1\\x9f\\x92\\xe1\\x9e\\x98\\xe1\\x9f\\x82\\xe1\\x9e\\x9a\\0\"\n\t\"KHM\\0\"\n\t\"khm\\0\"\n\t\"lo\\0\"\n\t\"Lao\\0\"\n\t\"\\xe0\\xba\\xa5\\xe0\\xba\\xb2\\xe0\\xba\\xa7\\0\"\n\t\"LAO\\0\"\n\t\"lao\\0\"\n\t\"my\\0\"\n\t\"Burmese\\0\"\n\t\"\\xe1\\x80\\x99\\xe1\\x80\\xbc\\xe1\\x80\\x94\\xe1\\x80\\xba\\xe1\\x80\\x99\\xe1\\x80\\xac\\0\"\n\t\"MYA\\0\"\n\t\"mya\\0\"\n\t\"gl\\0\"\n\t\"Galician\\0\"\n\t\"galego\\0\"\n\t\"GLC\\0\"\n\t\"glg\\0\"\n\t\"kok\\0\"\n\t\"Konkani\\0\"\n\t\"\\xe0\\xa4\\x95\\xe0\\xa5\\x8b\\xe0\\xa4\\x82\\xe0\\xa4\\x95\\xe0\\xa4\\xa3\\xe0\\xa5\\x80\\0\"\n\t\"KNK\\0\"\n\t\"si\\0\"\n\t\"Sinhala\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x92\\xe0\\xb6\\x82\\xe0\\xb7\\x84\\xe0\\xb6\\xbd\\0\"\n\t\"SIN\\0\"\n\t\"sin\\0\"\n\t\"chr\\0\"\n\t\"Cherokee\\0\"\n\t\"\\xe1\\x8f\\xa3\\xe1\\x8e\\xb3\\xe1\\x8e\\xa9\\0\"\n\t\"CRE\\0\"\n\t\"Amharic\\0\"\n\t\"\\xe1\\x8a\\xa0\\xe1\\x88\\x9b\\xe1\\x88\\xad\\xe1\\x8a\\x9b\\0\"\n\t\"AMH\\0\"\n\t\"amh\\0\"\n\t\"tzm\\0\"\n\t\"Central Atlas Tamazight\\0\"\n\t\"Tamazi\\xc9\\xa3t n la\\xe1\\xb9\\xadla\\xe1\\xb9\\xa3\\0\"\n\t\"TZA\\0\"\n\t\"ne\\0\"\n\t\"Nepali\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xb2\\xe0\\xa5\\x80\\0\"\n\t\"NEP\\0\"\n\t\"nep\\0\"\n\t\"fy\\0\"\n\t\"Western Frisian\\0\"\n\t\"West-Frysk\\0\"\n\t\"FYN\\0\"\n\t\"fry\\0\"\n\t\"ps\\0\"\n\t\"Pashto\\0\"\n\t\"\\xd9\\xbe\\xda\\x9a\\xd8\\xaa\\xd9\\x88\\0\"\n\t\"PAS\\0\"\n\t\"pus\\0\"\n\t\"fil\\0\"\n\t\"Filipino\\0\"\n\t\"FPO\\0\"\n\t\"ff\\0\"\n\t\"Fulah\\0\"\n\t\"Pulaar\\0\"\n\t\"FUL\\0\"\n\t\"ful\\0\"\n\t\"ha\\0\"\n\t\"Hausa\\0\"\n\t\"HAU\\0\"\n\t\"hau\\0\"\n\t\"yo\\0\"\n\t\"Yoruba\\0\"\n\t\"\\xc3\\x88\\x64\\xc3\\xa8 Yor\\xc3\\xb9\\x62\\xc3\\xa1\\0\"\n\t\"YOR\\0\"\n\t\"yor\\0\"\n\t\"nso\\0\"\n\t\"Northern Sotho\\0\"\n\t\"Sesotho sa Leboa\\0\"\n\t\"NSO\\0\"\n\t\"lb\\0\"\n\t\"Luxembourgish\\0\"\n\t\"L\\xc3\\xabtzebuergesch\\0\"\n\t\"LBX\\0\"\n\t\"ltz\\0\"\n\t\"kl\\0\"\n\t\"Kalaallisut\\0\"\n\t\"kalaallisut\\0\"\n\t\"KAL\\0\"\n\t\"kal\\0\"\n\t\"ig\\0\"\n\t\"Igbo\\0\"\n\t\"IBO\\0\"\n\t\"ibo\\0\"\n\t\"om\\0\"\n\t\"Oromo\\0\"\n\t\"Oromoo\\0\"\n\t\"ORM\\0\"\n\t\"orm\\0\"\n\t\"ti\\0\"\n\t\"Tigrinya\\0\"\n\t\"\\xe1\\x89\\xb5\\xe1\\x8c\\x8d\\xe1\\x88\\xad\\xe1\\x8a\\x9b\\0\"\n\t\"TIR\\0\"\n\t\"tir\\0\"\n\t\"haw\\0\"\n\t\"Hawaiian\\0\"\n\t\"\\xca\\xbb\\xc5\\x8clelo Hawai\\xca\\xbbi\\0\"\n\t\"HAW\\0\"\n\t\"so\\0\"\n\t\"Somali\\0\"\n\t\"Soomaali\\0\"\n\t\"SOM\\0\"\n\t\"som\\0\"\n\t\"ii\\0\"\n\t\"Sichuan Yi\\0\"\n\t\"\\xea\\x86\\x88\\xea\\x8c\\xa0\\xea\\x89\\x99\\0\"\n\t\"III\\0\"\n\t\"iii\\0\"\n\t\"br\\0\"\n\t\"Breton\\0\"\n\t\"brezhoneg\\0\"\n\t\"BRE\\0\"\n\t\"bre\\0\"\n\t\"ug\\0\"\n\t\"Uyghur\\0\"\n\t\"\\xd8\\xa6\\xdb\\x87\\xd9\\x8a\\xd8\\xba\\xdb\\x87\\xd8\\xb1\\xda\\x86\\xdb\\x95\\0\"\n\t\"UIG\\0\"\n\t\"uig\\0\"\n\t\"gsw\\0\"\n\t\"Swiss German\\0\"\n\t\"Schwiizert\\xc3\\xbc\\xc3\\xbctsch\\0\"\n\t\"GSW\\0\"\n\t\"sah\\0\"\n\t\"Sakha\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd1\\x85\\xd0\\xb0 \\xd1\\x82\\xd1\\x8b\\xd0\\xbb\\xd0\\xb0\\0\"\n\t\"SAH\\0\"\n\t\"rw\\0\"\n\t\"Kinyarwanda\\0\"\n\t\"KIN\\0\"\n\t\"kin\\0\"\n\t\"gd\\0\"\n\t\"Scottish Gaelic\\0\"\n\t\"G\\xc3\\xa0idhlig\\0\"\n\t\"GLA\\0\"\n\t\"gla\\0\"\n\t\"ar-SA\\0\"\n\t\"Arabic (Saudi Arabia)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd9\\x85\\xd9\\x84\\xd9\\x83\\xd8\\xa9 \\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 \\xd8\\xa7\\xd9\\x84\\xd8\\xb3\\xd8\\xb9\\xd9\\x88\\xd8\\xaf\\xd9\\x8a\\xd8\\xa9)\\0\"\n\t\"bg-BG\\0\"\n\t\"Bulgarian (Bulgaria)\\0\"\n\t\"\\xd0\\xb1\\xd1\\x8a\\xd0\\xbb\\xd0\\xb3\\xd0\\xb0\\xd1\\x80\\xd1\\x81\\xd0\\xba\\xd0\\xb8 (\\xd0\\x91\\xd1\\x8a\\xd0\\xbb\\xd0\\xb3\\xd0\\xb0\\xd1\\x80\\xd0\\xb8\\xd1\\x8f)\\0\"\n\t\"BG\\0\"\n\t\"ca-ES\\0\"\n\t\"Catalan (Spain)\\0\"\n\t\"catal\\xc3\\xa0 (Espanya)\\0\"\n\t\"ES\\0\"\n\t\"zh-TW\\0\"\n\t\"Chinese (Traditional)\\0\"\n\t\"\\xe4\\xb8\\xad\\xe6\\x96\\x87 (\\xe5\\x8f\\xb0\\xe6\\xb9\\xbe)\\0\"\n\t\"CHT\\0\"\n\t\"TW\\0\"\n\t\"cs-CZ\\0\"\n\t\"Czech (Czech Republic)\\0\"\n\t\"\\xc4\\x8d\\x65\\xc5\\xa1tina (\\xc4\\x8c\\x65sk\\xc3\\xa1 republika)\\0\"\n\t\"CZ\\0\"\n\t\"da-DK\\0\"\n\t\"Danish (Denmark)\\0\"\n\t\"dansk (Danmark)\\0\"\n\t\"DK\\0\"\n\t\"de-DE\\0\"\n\t\"German (Germany)\\0\"\n\t\"Deutsch (Deutschland)\\0\"\n\t\"DE\\0\"\n\t\"el-GR\\0\"\n\t\"Greek (Greece)\\0\"\n\t\"\\xce\\x95\\xce\\xbb\\xce\\xbb\\xce\\xb7\\xce\\xbd\\xce\\xb9\\xce\\xba\\xce\\xac (\\xce\\x95\\xce\\xbb\\xce\\xbb\\xce\\xac\\xce\\xb4\\xce\\xb1)\\0\"\n\t\"GR\\0\"\n\t\"en-US\\0\"\n\t\"English (United States)\\0\"\n\t\"US\\0\"\n\t\"fi-FI\\0\"\n\t\"Finnish (Finland)\\0\"\n\t\"suomi (Suomi)\\0\"\n\t\"FI\\0\"\n\t\"fr-FR\\0\"\n\t\"French (France)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (France)\\0\"\n\t\"FR\\0\"\n\t\"he-IL\\0\"\n\t\"Hebrew (Israel)\\0\"\n\t\"\\xd7\\xa2\\xd7\\x91\\xd7\\xa8\\xd7\\x99\\xd7\\xaa (\\xd7\\x99\\xd7\\xa9\\xd7\\xa8\\xd7\\x90\\xd7\\x9c)\\0\"\n\t\"IL\\0\"\n\t\"hu-HU\\0\"\n\t\"Hungarian (Hungary)\\0\"\n\t\"magyar (Magyarorsz\\xc3\\xa1g)\\0\"\n\t\"HU\\0\"\n\t\"is-IS\\0\"\n\t\"Icelandic (Iceland)\\0\"\n\t\"\\xc3\\xadslenska (\\xc3\\x8dsland)\\0\"\n\t\"IS\\0\"\n\t\"it-IT\\0\"\n\t\"Italian (Italy)\\0\"\n\t\"italiano (Italia)\\0\"\n\t\"IT\\0\"\n\t\"ja-JP\\0\"\n\t\"Japanese (Japan)\\0\"\n\t\"\\xe6\\x97\\xa5\\xe6\\x9c\\xac\\xe8\\xaa\\x9e (\\xe6\\x97\\xa5\\xe6\\x9c\\xac)\\0\"\n\t\"JP\\0\"\n\t\"ko-KR\\0\"\n\t\"Korean (South Korea)\\0\"\n\t\"\\xed\\x95\\x9c\\xea\\xb5\\xad\\xec\\x96\\xb4 (\\xeb\\x8c\\x80\\xed\\x95\\x9c\\xeb\\xaf\\xbc\\xea\\xb5\\xad)\\0\"\n\t\"KR\\0\"\n\t\"nl-NL\\0\"\n\t\"Dutch (Netherlands)\\0\"\n\t\"Nederlands (Nederland)\\0\"\n\t\"NL\\0\"\n\t\"nb-NO\\0\"\n\t\"Norwegian Bokm\\xc3\\xa5l (Norway)\\0\"\n\t\"norsk bokm\\xc3\\xa5l (Norge)\\0\"\n\t\"NO\\0\"\n\t\"pl-PL\\0\"\n\t\"Polish (Poland)\\0\"\n\t\"polski (Polska)\\0\"\n\t\"PL\\0\"\n\t\"pt-BR\\0\"\n\t\"Portuguese (Brazil)\\0\"\n\t\"portugu\\xc3\\xaas (Brasil)\\0\"\n\t\"BR\\0\"\n\t\"rm-CH\\0\"\n\t\"Romansh (Switzerland)\\0\"\n\t\"rumantsch (Svizra)\\0\"\n\t\"ro-RO\\0\"\n\t\"Romanian (Romania)\\0\"\n\t\"rom\\xc3\\xa2n\\xc4\\x83 (Rom\\xc3\\xa2nia)\\0\"\n\t\"RO\\0\"\n\t\"ru-RU\\0\"\n\t\"Russian (Russia)\\0\"\n\t\"\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\xd0\\xb9 (\\xd0\\xa0\\xd0\\xbe\\xd1\\x81\\xd1\\x81\\xd0\\xb8\\xd1\\x8f)\\0\"\n\t\"RU\\0\"\n\t\"hr-HR\\0\"\n\t\"Croatian (Croatia)\\0\"\n\t\"hrvatski (Hrvatska)\\0\"\n\t\"HR\\0\"\n\t\"sk-SK\\0\"\n\t\"Slovak (Slovakia)\\0\"\n\t\"sloven\\xc4\\x8dina (Slovensko)\\0\"\n\t\"SK\\0\"\n\t\"sq-AL\\0\"\n\t\"Albanian (Albania)\\0\"\n\t\"shqip (Shqip\\xc3\\xabri)\\0\"\n\t\"AL\\0\"\n\t\"sv-SE\\0\"\n\t\"Swedish (Sweden)\\0\"\n\t\"svenska (Sverige)\\0\"\n\t\"SE\\0\"\n\t\"th-TH\\0\"\n\t\"Thai (Thailand)\\0\"\n\t\"\\xe0\\xb9\\x84\\xe0\\xb8\\x97\\xe0\\xb8\\xa2 (\\xe0\\xb9\\x84\\xe0\\xb8\\x97\\xe0\\xb8\\xa2)\\0\"\n\t\"TH\\0\"\n\t\"tr-TR\\0\"\n\t\"Turkish (Turkey)\\0\"\n\t\"T\\xc3\\xbcrk\\xc3\\xa7\\x65 (T\\xc3\\xbcrkiye)\\0\"\n\t\"TR\\0\"\n\t\"ur-PK\\0\"\n\t\"Urdu (Pakistan)\\0\"\n\t\"\\xd8\\xa7\\xd8\\xb1\\xd8\\xaf\\xd9\\x88 (\\xd9\\xbe\\xd8\\xa7\\xda\\xa9\\xd8\\xb3\\xd8\\xaa\\xd8\\xa7\\xd9\\x86)\\0\"\n\t\"PK\\0\"\n\t\"id-ID\\0\"\n\t\"Indonesian (Indonesia)\\0\"\n\t\"Indonesia (Indonesia)\\0\"\n\t\"ID\\0\"\n\t\"uk-UA\\0\"\n\t\"Ukrainian (Ukraine)\\0\"\n\t\"\\xd1\\x83\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x97\\xd0\\xbd\\xd1\\x81\\xd1\\x8c\\xd0\\xba\\xd0\\xb0 (\\xd0\\xa3\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x97\\xd0\\xbd\\xd0\\xb0)\\0\"\n\t\"UA\\0\"\n\t\"be-BY\\0\"\n\t\"Belarusian (Belarus)\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd0\\xba\\xd0\\xb0\\xd1\\x8f (\\xd0\\x91\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd1\\x8c)\\0\"\n\t\"BY\\0\"\n\t\"sl-SI\\0\"\n\t\"Slovenian (Slovenia)\\0\"\n\t\"sloven\\xc5\\xa1\\xc4\\x8dina (Slovenija)\\0\"\n\t\"SI\\0\"\n\t\"et-EE\\0\"\n\t\"Estonian (Estonia)\\0\"\n\t\"eesti (Eesti)\\0\"\n\t\"EE\\0\"\n\t\"lv-LV\\0\"\n\t\"Latvian (Latvia)\\0\"\n\t\"latvie\\xc5\\xa1u (Latvija)\\0\"\n\t\"LV\\0\"\n\t\"lt-LT\\0\"\n\t\"Lithuanian (Lithuania)\\0\"\n\t\"lietuvi\\xc5\\xb3 (Lietuva)\\0\"\n\t\"LT\\0\"\n\t\"tg-Cyrl-TJ\\0\"\n\t\"Tajik (Cyrillic, Tajikistan)\\0\"\n\t\"\\xd0\\xa2\\xd0\\xbe\\xd2\\xb7\\xd0\\xb8\\xd0\\xba\\xd3\\xa3 (\\xd0\\xa2\\xd0\\xbe\\xd2\\xb7\\xd0\\xb8\\xd0\\xba\\xd0\\xb8\\xd1\\x81\\xd1\\x82\\xd0\\xbe\\xd0\\xbd)\\0\"\n\t\"TJ\\0\"\n\t\"fa-IR\\0\"\n\t\"Persian (Iran)\\0\"\n\t\"\\xd9\\x81\\xd8\\xa7\\xd8\\xb1\\xd8\\xb3\\xdb\\x8c (\\xd8\\xa7\\xdb\\x8c\\xd8\\xb1\\xd8\\xa7\\xd9\\x86)\\0\"\n\t\"IR\\0\"\n\t\"vi-VN\\0\"\n\t\"Vietnamese (Vietnam)\\0\"\n\t\"Ti\\xe1\\xba\\xbfng Vi\\xe1\\xbb\\x87t (Vi\\xe1\\xbb\\x87t Nam)\\0\"\n\t\"VN\\0\"\n\t\"hy-AM\\0\"\n\t\"Armenian (Armenia)\\0\"\n\t\"\\xd5\\xb0\\xd5\\xa1\\xd5\\xb5\\xd5\\xa5\\xd6\\x80\\xd5\\xa5\\xd5\\xb6 (\\xd5\\x80\\xd5\\xa1\\xd5\\xb5\\xd5\\xa1\\xd5\\xbd\\xd5\\xbf\\xd5\\xa1\\xd5\\xb6)\\0\"\n\t\"az-Latn-AZ\\0\"\n\t\"Azerbaijani (Latin, Azerbaijan)\\0\"\n\t\"az\\xc9\\x99rbaycan (Az\\xc9\\x99rbaycan)\\0\"\n\t\"AZ\\0\"\n\t\"eu-ES\\0\"\n\t\"Basque (Spain)\\0\"\n\t\"euskara (Espainia)\\0\"\n\t\"hsb-DE\\0\"\n\t\"Upper Sorbian (Germany)\\0\"\n\t\"hornjoserb\\xc5\\xa1\\xc4\\x87ina (N\\xc4\\x9bmska)\\0\"\n\t\"mk-MK\\0\"\n\t\"Macedonian (Macedonia)\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd0\\xba\\xd0\\xb5\\xd0\\xb4\\xd0\\xbe\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8 (\\xd0\\x9c\\xd0\\xb0\\xd0\\xba\\xd0\\xb5\\xd0\\xb4\\xd0\\xbe\\xd0\\xbd\\xd0\\xb8\\xd1\\x98\\xd0\\xb0)\\0\"\n\t\"MK\\0\"\n\t\"st-ZA\\0\"\n\t\"Southern Sotho (South Africa)\\0\"\n\t\"ZA\\0\"\n\t\"ts-ZA\\0\"\n\t\"Tsonga (South Africa)\\0\"\n\t\"tn-ZA\\0\"\n\t\"Tswana (South Africa)\\0\"\n\t\"xh-ZA\\0\"\n\t\"Xhosa (South Africa)\\0\"\n\t\"zu-ZA\\0\"\n\t\"Zulu (South Africa)\\0\"\n\t\"isiZulu (i-South Africa)\\0\"\n\t\"af-ZA\\0\"\n\t\"Afrikaans (South Africa)\\0\"\n\t\"Afrikaans (Suid-Afrika)\\0\"\n\t\"ka-GE\\0\"\n\t\"Georgian (Georgia)\\0\"\n\t\"\\xe1\\x83\\xa5\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x97\\xe1\\x83\\xa3\\xe1\\x83\\x9a\\xe1\\x83\\x98 (\\xe1\\x83\\xa1\\xe1\\x83\\x90\\xe1\\x83\\xa5\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x97\\xe1\\x83\\x95\\xe1\\x83\\x94\\xe1\\x83\\x9a\\xe1\\x83\\x9d)\\0\"\n\t\"GE\\0\"\n\t\"fo-FO\\0\"\n\t\"Faroese (Faroe Islands)\\0\"\n\t\"f\\xc3\\xb8royskt (F\\xc3\\xb8royar)\\0\"\n\t\"FO\\0\"\n\t\"hi-IN\\0\"\n\t\"Hindi (India)\\0\"\n\t\"\\xe0\\xa4\\xb9\\xe0\\xa4\\xbf\\xe0\\xa4\\xa8\\xe0\\xa5\\x8d\\xe0\\xa4\\xa6\\xe0\\xa5\\x80 (\\xe0\\xa4\\xad\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa4\\xa4)\\0\"\n\t\"IN\\0\"\n\t\"mt-MT\\0\"\n\t\"Maltese (Malta)\\0\"\n\t\"Malti (Malta)\\0\"\n\t\"MT\\0\"\n\t\"se-NO\\0\"\n\t\"Northern Sami (Norway)\\0\"\n\t\"davvis\\xc3\\xa1megiella (Norga)\\0\"\n\t\"ms-MY\\0\"\n\t\"Malay (Malaysia)\\0\"\n\t\"Bahasa Melayu (Malaysia)\\0\"\n\t\"MY\\0\"\n\t\"kk-KZ\\0\"\n\t\"Kazakh (Kazakhstan)\\0\"\n\t\"\\xd2\\x9b\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd2\\x9b \\xd1\\x82\\xd1\\x96\\xd0\\xbb\\xd1\\x96 (\\xd2\\x9a\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd2\\x9b\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbd)\\0\"\n\t\"KZ\\0\"\n\t\"ky-KG\\0\"\n\t\"Kyrgyz (Kyrgyzstan)\\0\"\n\t\"\\xd0\\xba\\xd1\\x8b\\xd1\\x80\\xd0\\xb3\\xd1\\x8b\\xd0\\xb7\\xd1\\x87\\xd0\\xb0 (\\xd0\\x9a\\xd1\\x8b\\xd1\\x80\\xd0\\xb3\\xd1\\x8b\\xd0\\xb7\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbd)\\0\"\n\t\"KG\\0\"\n\t\"sw-KE\\0\"\n\t\"Swahili (Kenya)\\0\"\n\t\"Kiswahili (Kenya)\\0\"\n\t\"KE\\0\"\n\t\"tk-TM\\0\"\n\t\"Turkmen (Turkmenistan)\\0\"\n\t\"t\\xc3\\xbcrkmen\\xc3\\xa7\\x65 (T\\xc3\\xbcrkmenistan)\\0\"\n\t\"TM\\0\"\n\t\"uz-Latn-UZ\\0\"\n\t\"Uzbek (Latin, Uzbekistan)\\0\"\n\t\"o\\xe2\\x80\\x98zbek (O\\xca\\xbbzbekiston)\\0\"\n\t\"UZ\\0\"\n\t\"tt-RU\\0\"\n\t\"Tatar (Russia)\\0\"\n\t\"\\xd1\\x82\\xd0\\xb0\\xd1\\x82\\xd0\\xb0\\xd1\\x80 (\\xd0\\xa0\\xd0\\xbe\\xd1\\x81\\xd1\\x81\\xd0\\xb8\\xd1\\x8f)\\0\"\n\t\"bn-IN\\0\"\n\t\"Bangla (India)\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\x82\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe (\\xe0\\xa6\\xad\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\xe0\\xa6\\xa4)\\0\"\n\t\"gu-IN\\0\"\n\t\"Gujarati (India)\\0\"\n\t\"\\xe0\\xaa\\x97\\xe0\\xab\\x81\\xe0\\xaa\\x9c\\xe0\\xaa\\xb0\\xe0\\xaa\\xbe\\xe0\\xaa\\xa4\\xe0\\xab\\x80 (\\xe0\\xaa\\xad\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\xe0\\xaa\\xa4)\\0\"\n\t\"or-IN\\0\"\n\t\"Odia (India)\\0\"\n\t\"\\xe0\\xac\\x93\\xe0\\xac\\xa1\\xe0\\xac\\xbc\\xe0\\xac\\xbf\\xe0\\xac\\x86 (\\xe0\\xac\\xad\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\xe0\\xac\\xa4)\\0\"\n\t\"ta-IN\\0\"\n\t\"Tamil (India)\\0\"\n\t\"\\xe0\\xae\\xa4\\xe0\\xae\\xae\\xe0\\xae\\xbf\\xe0\\xae\\xb4\\xe0\\xaf\\x8d (\\xe0\\xae\\x87\\xe0\\xae\\xa8\\xe0\\xaf\\x8d\\xe0\\xae\\xa4\\xe0\\xae\\xbf\\xe0\\xae\\xaf\\xe0\\xae\\xbe)\\0\"\n\t\"te-IN\\0\"\n\t\"Telugu (India)\\0\"\n\t\"\\xe0\\xb0\\xa4\\xe0\\xb1\\x86\\xe0\\xb0\\xb2\\xe0\\xb1\\x81\\xe0\\xb0\\x97\\xe0\\xb1\\x81 (\\xe0\\xb0\\xad\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\xa4 \\xe0\\xb0\\xa6\\xe0\\xb1\\x87\\xe0\\xb0\\xb6\\xe0\\xb0\\x82)\\0\"\n\t\"kn-IN\\0\"\n\t\"Kannada (India)\\0\"\n\t\"\\xe0\\xb2\\x95\\xe0\\xb2\\xa8\\xe0\\xb3\\x8d\\xe0\\xb2\\xa8\\xe0\\xb2\\xa1 (\\xe0\\xb2\\xad\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\xe0\\xb2\\xa4)\\0\"\n\t\"ml-IN\\0\"\n\t\"Malayalam (India)\\0\"\n\t\"\\xe0\\xb4\\xae\\xe0\\xb4\\xb2\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\xe0\\xb4\\xb3\\xe0\\xb4\\x82 (\\xe0\\xb4\\x87\\xe0\\xb4\\xa8\\xe0\\xb5\\x8d\\xe0\\xb4\\xa4\\xe0\\xb5\\x8d\\xe0\\xb4\\xaf)\\0\"\n\t\"as-IN\\0\"\n\t\"Assamese (India)\\0\"\n\t\"\\xe0\\xa6\\x85\\xe0\\xa6\\xb8\\xe0\\xa6\\xae\\xe0\\xa7\\x80\\xe0\\xa6\\xaf\\xe0\\xa6\\xbc\\xe0\\xa6\\xbe (\\xe0\\xa6\\xad\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\xe0\\xa6\\xa4)\\0\"\n\t\"mr-IN\\0\"\n\t\"Marathi (India)\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\xb0\\xe0\\xa4\\xbe\\xe0\\xa4\\xa0\\xe0\\xa5\\x80 (\\xe0\\xa4\\xad\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa4\\xa4)\\0\"\n\t\"mn-MN\\0\"\n\t\"Mongolian (Mongolia)\\0\"\n\t\"\\xd0\\xbc\\xd0\\xbe\\xd0\\xbd\\xd0\\xb3\\xd0\\xbe\\xd0\\xbb (\\xd0\\x9c\\xd0\\xbe\\xd0\\xbd\\xd0\\xb3\\xd0\\xbe\\xd0\\xbb)\\0\"\n\t\"MNN\\0\"\n\t\"MN\\0\"\n\t\"bo-CN\\0\"\n\t\"Tibetan (China)\\0\"\n\t\"\\xe0\\xbd\\x96\\xe0\\xbd\\xbc\\xe0\\xbd\\x91\\xe0\\xbc\\x8b\\xe0\\xbd\\xa6\\xe0\\xbe\\x90\\xe0\\xbd\\x91\\xe0\\xbc\\x8b (\\xe0\\xbd\\xa2\\xe0\\xbe\\x92\\xe0\\xbe\\xb1\\xe0\\xbc\\x8b\\xe0\\xbd\\x93\\xe0\\xbd\\x82)\\0\"\n\t\"CN\\0\"\n\t\"cy-GB\\0\"\n\t\"Welsh (United Kingdom)\\0\"\n\t\"Cymraeg (Y Deyrnas Unedig)\\0\"\n\t\"GB\\0\"\n\t\"km-KH\\0\"\n\t\"Khmer (Cambodia)\\0\"\n\t\"\\xe1\\x9e\\x81\\xe1\\x9f\\x92\\xe1\\x9e\\x98\\xe1\\x9f\\x82\\xe1\\x9e\\x9a (\\xe1\\x9e\\x80\\xe1\\x9e\\x98\\xe1\\x9f\\x92\\xe1\\x9e\\x96\\xe1\\x9e\\xbb\\xe1\\x9e\\x87\\xe1\\x9e\\xb6)\\0\"\n\t\"KH\\0\"\n\t\"lo-LA\\0\"\n\t\"Lao (Laos)\\0\"\n\t\"\\xe0\\xba\\xa5\\xe0\\xba\\xb2\\xe0\\xba\\xa7 (\\xe0\\xba\\xa5\\xe0\\xba\\xb2\\xe0\\xba\\xa7)\\0\"\n\t\"LA\\0\"\n\t\"my-MM\\0\"\n\t\"Burmese (Myanmar (Burma))\\0\"\n\t\"\\xe1\\x80\\x99\\xe1\\x80\\xbc\\xe1\\x80\\x94\\xe1\\x80\\xba\\xe1\\x80\\x99\\xe1\\x80\\xac (\\xe1\\x80\\x99\\xe1\\x80\\xbc\\xe1\\x80\\x94\\xe1\\x80\\xba\\xe1\\x80\\x99\\xe1\\x80\\xac)\\0\"\n\t\"MM\\0\"\n\t\"gl-ES\\0\"\n\t\"Galician (Spain)\\0\"\n\t\"galego (Espa\\xc3\\xb1\\x61)\\0\"\n\t\"kok-IN\\0\"\n\t\"Konkani (India)\\0\"\n\t\"\\xe0\\xa4\\x95\\xe0\\xa5\\x8b\\xe0\\xa4\\x82\\xe0\\xa4\\x95\\xe0\\xa4\\xa3\\xe0\\xa5\\x80 (\\xe0\\xa4\\xad\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa4\\xa4)\\0\"\n\t\"si-LK\\0\"\n\t\"Sinhala (Sri Lanka)\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x92\\xe0\\xb6\\x82\\xe0\\xb7\\x84\\xe0\\xb6\\xbd (\\xe0\\xb7\\x81\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x93 \\xe0\\xb6\\xbd\\xe0\\xb6\\x82\\xe0\\xb6\\x9a\\xe0\\xb7\\x8f\\xe0\\xb7\\x80)\\0\"\n\t\"LK\\0\"\n\t\"am-ET\\0\"\n\t\"Amharic (Ethiopia)\\0\"\n\t\"\\xe1\\x8a\\xa0\\xe1\\x88\\x9b\\xe1\\x88\\xad\\xe1\\x8a\\x9b (\\xe1\\x8a\\xa2\\xe1\\x89\\xb5\\xe1\\x8b\\xae\\xe1\\x8c\\xb5\\xe1\\x8b\\xab)\\0\"\n\t\"ET\\0\"\n\t\"ne-NP\\0\"\n\t\"Nepali (Nepal)\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xb2\\xe0\\xa5\\x80 (\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xb2)\\0\"\n\t\"NP\\0\"\n\t\"fy-NL\\0\"\n\t\"Western Frisian (Netherlands)\\0\"\n\t\"West-Frysk (Nederl\\xc3\\xa2n)\\0\"\n\t\"ps-AF\\0\"\n\t\"Pashto (Afghanistan)\\0\"\n\t\"\\xd9\\xbe\\xda\\x9a\\xd8\\xaa\\xd9\\x88 (\\xd8\\xa7\\xd9\\x81\\xd8\\xba\\xd8\\xa7\\xd9\\x86\\xd8\\xb3\\xd8\\xaa\\xd8\\xa7\\xd9\\x86)\\0\"\n\t\"AF\\0\"\n\t\"fil-PH\\0\"\n\t\"Filipino (Philippines)\\0\"\n\t\"Filipino (Pilipinas)\\0\"\n\t\"PH\\0\"\n\t\"ha-Latn-NG\\0\"\n\t\"Hausa (Latin, Nigeria)\\0\"\n\t\"Hausa (Najeriya)\\0\"\n\t\"NG\\0\"\n\t\"yo-NG\\0\"\n\t\"Yoruba (Nigeria)\\0\"\n\t\"\\xc3\\x88\\x64\\xc3\\xa8 Yor\\xc3\\xb9\\x62\\xc3\\xa1 (Or\\xc3\\xadl\\xe1\\xba\\xb9\\xcc\\x81\\xc3\\xa8\\x64\\x65 N\\xc3\\xa0\\xc3\\xacj\\xc3\\xadr\\xc3\\xad\\xc3\\xa0)\\0\"\n\t\"nso-ZA\\0\"\n\t\"Northern Sotho (South Africa)\\0\"\n\t\"lb-LU\\0\"\n\t\"Luxembourgish (Luxembourg)\\0\"\n\t\"L\\xc3\\xabtzebuergesch (L\\xc3\\xabtzebuerg)\\0\"\n\t\"LU\\0\"\n\t\"kl-GL\\0\"\n\t\"Kalaallisut (Greenland)\\0\"\n\t\"kalaallisut (Kalaallit Nunaat)\\0\"\n\t\"GL\\0\"\n\t\"ig-NG\\0\"\n\t\"Igbo (Nigeria)\\0\"\n\t\"om-ET\\0\"\n\t\"Oromo (Ethiopia)\\0\"\n\t\"Oromoo (Itoophiyaa)\\0\"\n\t\"ti-ET\\0\"\n\t\"Tigrinya (Ethiopia)\\0\"\n\t\"\\xe1\\x89\\xb5\\xe1\\x8c\\x8d\\xe1\\x88\\xad\\xe1\\x8a\\x9b (\\xe1\\x8a\\xa2\\xe1\\x89\\xb5\\xe1\\x8b\\xae\\xe1\\x8c\\xb5\\xe1\\x8b\\xab)\\0\"\n\t\"TIE\\0\"\n\t\"haw-US\\0\"\n\t\"Hawaiian (United States)\\0\"\n\t\"\\xca\\xbb\\xc5\\x8clelo Hawai\\xca\\xbbi (\\xca\\xbb\\x41melika Hui P\\xc5\\xab \\xca\\xbbIa)\\0\"\n\t\"so-SO\\0\"\n\t\"Somali (Somalia)\\0\"\n\t\"Soomaali (Soomaaliya)\\0\"\n\t\"SO\\0\"\n\t\"ii-CN\\0\"\n\t\"Sichuan Yi (China)\\0\"\n\t\"\\xea\\x86\\x88\\xea\\x8c\\xa0\\xea\\x89\\x99 (\\xea\\x8d\\x8f\\xea\\x87\\xa9)\\0\"\n\t\"br-FR\\0\"\n\t\"Breton (France)\\0\"\n\t\"brezhoneg (Fra\\xc3\\xb1s)\\0\"\n\t\"ug-CN\\0\"\n\t\"Uyghur (China)\\0\"\n\t\"\\xd8\\xa6\\xdb\\x87\\xd9\\x8a\\xd8\\xba\\xdb\\x87\\xd8\\xb1\\xda\\x86\\xdb\\x95 (\\xd8\\xac\\xdb\\x87\\xda\\xad\\xda\\xaf\\xd9\\x88)\\0\"\n\t\"gsw-FR\\0\"\n\t\"Swiss German (France)\\0\"\n\t\"Schwiizert\\xc3\\xbc\\xc3\\xbctsch (Frankriich)\\0\"\n\t\"sah-RU\\0\"\n\t\"Sakha (Russia)\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd1\\x85\\xd0\\xb0 \\xd1\\x82\\xd1\\x8b\\xd0\\xbb\\xd0\\xb0 (\\xd0\\x90\\xd1\\x80\\xd0\\xb0\\xd1\\x81\\xd1\\x81\\xd1\\x8b\\xd1\\x8b\\xd0\\xb9\\xd0\\xb0)\\0\"\n\t\"rw-RW\\0\"\n\t\"Kinyarwanda (Rwanda)\\0\"\n\t\"RW\\0\"\n\t\"gd-GB\\0\"\n\t\"Scottish Gaelic (United Kingdom)\\0\"\n\t\"G\\xc3\\xa0idhlig (An R\\xc3\\xacoghachd Aonaichte)\\0\"\n\t\"ar-IQ\\0\"\n\t\"Arabic (Iraq)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa7\\xd9\\x82)\\0\"\n\t\"ARI\\0\"\n\t\"IQ\\0\"\n\t\"ca-ES-valencia\\0\"\n\t\"VAL\\0\"\n\t\"zh-CN\\0\"\n\t\"\\xe4\\xb8\\xad\\xe6\\x96\\x87 (\\xe4\\xb8\\xad\\xe5\\x9b\\xbd)\\0\"\n\t\"de-CH\\0\"\n\t\"German (Switzerland)\\0\"\n\t\"Deutsch (Schweiz)\\0\"\n\t\"DES\\0\"\n\t\"en-GB\\0\"\n\t\"English (United Kingdom)\\0\"\n\t\"ENG\\0\"\n\t\"es-MX\\0\"\n\t\"Spanish (Mexico)\\0\"\n\t\"espa\\xc3\\xb1ol (M\\xc3\\xa9xico)\\0\"\n\t\"ESM\\0\"\n\t\"MX\\0\"\n\t\"fr-BE\\0\"\n\t\"French (Belgium)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Belgique)\\0\"\n\t\"FRB\\0\"\n\t\"BE\\0\"\n\t\"it-CH\\0\"\n\t\"Italian (Switzerland)\\0\"\n\t\"italiano (Svizzera)\\0\"\n\t\"ITS\\0\"\n\t\"nl-BE\\0\"\n\t\"Dutch (Belgium)\\0\"\n\t\"Nederlands (Belgi\\xc3\\xab)\\0\"\n\t\"NLB\\0\"\n\t\"nn-NO\\0\"\n\t\"Norwegian Nynorsk (Norway)\\0\"\n\t\"nynorsk (Noreg)\\0\"\n\t\"NON\\0\"\n\t\"nno\\0\"\n\t\"nn\\0\"\n\t\"pt-PT\\0\"\n\t\"Portuguese (Portugal)\\0\"\n\t\"portugu\\xc3\\xaas (Portugal)\\0\"\n\t\"PT\\0\"\n\t\"ro-MD\\0\"\n\t\"Romanian (Moldova)\\0\"\n\t\"rom\\xc3\\xa2n\\xc4\\x83 (Republica Moldova)\\0\"\n\t\"ROD\\0\"\n\t\"MD\\0\"\n\t\"ru-MD\\0\"\n\t\"Russian (Moldova)\\0\"\n\t\"\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\xd0\\xb9 (\\xd0\\x9c\\xd0\\xbe\\xd0\\xbb\\xd0\\xb4\\xd0\\xbe\\xd0\\xb2\\xd0\\xb0)\\0\"\n\t\"RUM\\0\"\n\t\"sv-FI\\0\"\n\t\"Swedish (Finland)\\0\"\n\t\"svenska (Finland)\\0\"\n\t\"SVF\\0\"\n\t\"ur-IN\\0\"\n\t\"Urdu (India)\\0\"\n\t\"\\xd8\\xa7\\xd8\\xb1\\xd8\\xaf\\xd9\\x88 (\\xd8\\xa8\\xda\\xbe\\xd8\\xa7\\xd8\\xb1\\xd8\\xaa)\\0\"\n\t\"URI\\0\"\n\t\"az-Cyrl-AZ\\0\"\n\t\"Azerbaijani (Cyrillic, Azerbaijan)\\0\"\n\t\"AZC\\0\"\n\t\"dsb-DE\\0\"\n\t\"Lower Sorbian (Germany)\\0\"\n\t\"dolnoserb\\xc5\\xa1\\xc4\\x87ina (Nimska)\\0\"\n\t\"DSB\\0\"\n\t\"dsb\\0\"\n\t\"tn-BW\\0\"\n\t\"Tswana (Botswana)\\0\"\n\t\"TSB\\0\"\n\t\"BW\\0\"\n\t\"se-SE\\0\"\n\t\"Northern Sami (Sweden)\\0\"\n\t\"davvis\\xc3\\xa1megiella (Ruo\\xc5\\xa7\\xc5\\xa7\\x61)\\0\"\n\t\"SMF\\0\"\n\t\"ga-IE\\0\"\n\t\"Irish (Ireland)\\0\"\n\t\"Gaeilge (\\xc3\\x89ire)\\0\"\n\t\"IE\\0\"\n\t\"ms-BN\\0\"\n\t\"Malay (Brunei)\\0\"\n\t\"Bahasa Melayu (Brunei)\\0\"\n\t\"MSB\\0\"\n\t\"BN\\0\"\n\t\"uz-Cyrl-UZ\\0\"\n\t\"Uzbek (Cyrillic, Uzbekistan)\\0\"\n\t\"UZC\\0\"\n\t\"bn-BD\\0\"\n\t\"Bangla (Bangladesh)\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\x82\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe (\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\x82\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe\\xe0\\xa6\\xa6\\xe0\\xa7\\x87\\xe0\\xa6\\xb6)\\0\"\n\t\"BNB\\0\"\n\t\"BD\\0\"\n\t\"pa-Arab-PK\\0\"\n\t\"Punjabi (Arabic, Pakistan)\\0\"\n\t\"\\xe0\\xa8\\xaa\\xe0\\xa9\\xb0\\xe0\\xa8\\x9c\\xe0\\xa8\\xbe\\xe0\\xa8\\xac\\xe0\\xa9\\x80 (\\xe0\\xa8\\xaa\\xe0\\xa8\\xbe\\xe0\\xa8\\x95\\xe0\\xa8\\xbf\\xe0\\xa8\\xb8\\xe0\\xa8\\xa4\\xe0\\xa8\\xbe\\xe0\\xa8\\xa8)\\0\"\n\t\"PAP\\0\"\n\t\"ta-LK\\0\"\n\t\"Tamil (Sri Lanka)\\0\"\n\t\"\\xe0\\xae\\xa4\\xe0\\xae\\xae\\xe0\\xae\\xbf\\xe0\\xae\\xb4\\xe0\\xaf\\x8d (\\xe0\\xae\\x87\\xe0\\xae\\xb2\\xe0\\xae\\x99\\xe0\\xaf\\x8d\\xe0\\xae\\x95\\xe0\\xaf\\x88)\\0\"\n\t\"TAM\\0\"\n\t\"ne-IN\\0\"\n\t\"Nepali (India)\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xb2\\xe0\\xa5\\x80 (\\xe0\\xa4\\xad\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa4\\xa4)\\0\"\n\t\"NEI\\0\"\n\t\"ti-ER\\0\"\n\t\"Tigrinya (Eritrea)\\0\"\n\t\"\\xe1\\x89\\xb5\\xe1\\x8c\\x8d\\xe1\\x88\\xad\\xe1\\x8a\\x9b (\\xe1\\x8a\\xa4\\xe1\\x88\\xad\\xe1\\x89\\xb5\\xe1\\x88\\xab)\\0\"\n\t\"ER\\0\"\n\t\"ar-EG\\0\"\n\t\"Arabic (Egypt)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd9\\x85\\xd8\\xb5\\xd8\\xb1)\\0\"\n\t\"ARE\\0\"\n\t\"EG\\0\"\n\t\"zh-HK\\0\"\n\t\"Chinese (Traditional, Hong Kong SAR China)\\0\"\n\t\"\\xe4\\xb8\\xad\\xe6\\x96\\x87 (\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\\xe9\\xa6\\x99\\xe6\\xb8\\xaf\\xe7\\x89\\xb9\\xe5\\x88\\xab\\xe8\\xa1\\x8c\\xe6\\x94\\xbf\\xe5\\x8c\\xba)\\0\"\n\t\"ZHH\\0\"\n\t\"HK\\0\"\n\t\"de-AT\\0\"\n\t\"German (Austria)\\0\"\n\t\"Deutsch (\\xc3\\x96sterreich)\\0\"\n\t\"DEA\\0\"\n\t\"AT\\0\"\n\t\"en-AU\\0\"\n\t\"English (Australia)\\0\"\n\t\"ENA\\0\"\n\t\"AU\\0\"\n\t\"es-ES\\0\"\n\t\"Spanish (Spain)\\0\"\n\t\"espa\\xc3\\xb1ol (Espa\\xc3\\xb1\\x61)\\0\"\n\t\"ESN\\0\"\n\t\"fr-CA\\0\"\n\t\"French (Canada)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Canada)\\0\"\n\t\"FRC\\0\"\n\t\"CA\\0\"\n\t\"se-FI\\0\"\n\t\"Northern Sami (Finland)\\0\"\n\t\"davvis\\xc3\\xa1megiella (Suopma)\\0\"\n\t\"SMG\\0\"\n\t\"ar-LY\\0\"\n\t\"Arabic (Libya)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd9\\x84\\xd9\\x8a\\xd8\\xa8\\xd9\\x8a\\xd8\\xa7)\\0\"\n\t\"ARL\\0\"\n\t\"LY\\0\"\n\t\"zh-SG\\0\"\n\t\"Chinese (Simplified, Singapore)\\0\"\n\t\"\\xe4\\xb8\\xad\\xe6\\x96\\x87 (\\xe6\\x96\\xb0\\xe5\\x8a\\xa0\\xe5\\x9d\\xa1)\\0\"\n\t\"ZHI\\0\"\n\t\"SG\\0\"\n\t\"de-LU\\0\"\n\t\"German (Luxembourg)\\0\"\n\t\"Deutsch (Luxemburg)\\0\"\n\t\"DEL\\0\"\n\t\"en-CA\\0\"\n\t\"English (Canada)\\0\"\n\t\"ENC\\0\"\n\t\"es-GT\\0\"\n\t\"Spanish (Guatemala)\\0\"\n\t\"espa\\xc3\\xb1ol (Guatemala)\\0\"\n\t\"ESG\\0\"\n\t\"GT\\0\"\n\t\"fr-CH\\0\"\n\t\"French (Switzerland)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Suisse)\\0\"\n\t\"FRS\\0\"\n\t\"hr-BA\\0\"\n\t\"Croatian (Bosnia & Herzegovina)\\0\"\n\t\"hrvatski (Bosna i Hercegovina)\\0\"\n\t\"HRB\\0\"\n\t\"BA\\0\"\n\t\"ar-DZ\\0\"\n\t\"Arabic (Algeria)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd8\\xac\\xd8\\xb2\\xd8\\xa7\\xd8\\xa6\\xd8\\xb1)\\0\"\n\t\"ARG\\0\"\n\t\"DZ\\0\"\n\t\"zh-MO\\0\"\n\t\"Chinese (Traditional, Macau SAR China)\\0\"\n\t\"\\xe4\\xb8\\xad\\xe6\\x96\\x87 (\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\\xe6\\xbe\\xb3\\xe9\\x97\\xa8\\xe7\\x89\\xb9\\xe5\\x88\\xab\\xe8\\xa1\\x8c\\xe6\\x94\\xbf\\xe5\\x8c\\xba)\\0\"\n\t\"ZHM\\0\"\n\t\"MO\\0\"\n\t\"de-LI\\0\"\n\t\"German (Liechtenstein)\\0\"\n\t\"Deutsch (Liechtenstein)\\0\"\n\t\"DEC\\0\"\n\t\"LI\\0\"\n\t\"en-NZ\\0\"\n\t\"English (New Zealand)\\0\"\n\t\"ENZ\\0\"\n\t\"NZ\\0\"\n\t\"es-CR\\0\"\n\t\"Spanish (Costa Rica)\\0\"\n\t\"espa\\xc3\\xb1ol (Costa Rica)\\0\"\n\t\"ESC\\0\"\n\t\"CR\\0\"\n\t\"fr-LU\\0\"\n\t\"French (Luxembourg)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Luxembourg)\\0\"\n\t\"FRL\\0\"\n\t\"bs-Latn-BA\\0\"\n\t\"Bosnian (Latin, Bosnia & Herzegovina)\\0\"\n\t\"bosanski (Bosna i Hercegovina)\\0\"\n\t\"BSB\\0\"\n\t\"bos\\0\"\n\t\"bs\\0\"\n\t\"ar-MA\\0\"\n\t\"Arabic (Morocco)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd8\\xba\\xd8\\xb1\\xd8\\xa8)\\0\"\n\t\"ARM\\0\"\n\t\"MA\\0\"\n\t\"en-IE\\0\"\n\t\"English (Ireland)\\0\"\n\t\"ENI\\0\"\n\t\"es-PA\\0\"\n\t\"Spanish (Panama)\\0\"\n\t\"espa\\xc3\\xb1ol (Panam\\xc3\\xa1)\\0\"\n\t\"ESA\\0\"\n\t\"PA\\0\"\n\t\"fr-MC\\0\"\n\t\"French (Monaco)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Monaco)\\0\"\n\t\"FRM\\0\"\n\t\"MC\\0\"\n\t\"sr-Latn-BA\\0\"\n\t\"Serbian (Latin, Bosnia & Herzegovina)\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xbf\\xd1\\x81\\xd0\\xba\\xd0\\xb8 (\\xd0\\x91\\xd0\\xbe\\xd1\\x81\\xd0\\xbd\\xd0\\xb0 \\xd0\\xb8 \\xd0\\xa5\\xd0\\xb5\\xd1\\x80\\xd1\\x86\\xd0\\xb5\\xd0\\xb3\\xd0\\xbe\\xd0\\xb2\\xd0\\xb8\\xd0\\xbd\\xd0\\xb0)\\0\"\n\t\"SRS\\0\"\n\t\"srp\\0\"\n\t\"sr\\0\"\n\t\"ar-TN\\0\"\n\t\"Arabic (Tunisia)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xaa\\xd9\\x88\\xd9\\x86\\xd8\\xb3)\\0\"\n\t\"ART\\0\"\n\t\"TN\\0\"\n\t\"en-ZA\\0\"\n\t\"English (South Africa)\\0\"\n\t\"ENS\\0\"\n\t\"es-DO\\0\"\n\t\"Spanish (Dominican Republic)\\0\"\n\t\"espa\\xc3\\xb1ol (Rep\\xc3\\xba\\x62lica Dominicana)\\0\"\n\t\"ESD\\0\"\n\t\"DO\\0\"\n\t\"sr-Cyrl-BA\\0\"\n\t\"Serbian (Cyrillic, Bosnia & Herzegovina)\\0\"\n\t\"SRN\\0\"\n\t\"ar-OM\\0\"\n\t\"Arabic (Oman)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xb9\\xd9\\x8f\\xd9\\x85\\xd8\\xa7\\xd9\\x86)\\0\"\n\t\"ARO\\0\"\n\t\"OM\\0\"\n\t\"en-JM\\0\"\n\t\"English (Jamaica)\\0\"\n\t\"ENJ\\0\"\n\t\"JM\\0\"\n\t\"es-VE\\0\"\n\t\"Spanish (Venezuela)\\0\"\n\t\"espa\\xc3\\xb1ol (Venezuela)\\0\"\n\t\"ESV\\0\"\n\t\"VE\\0\"\n\t\"fr-RE\\0\"\n\t\"French (R\\xc3\\xa9union)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (La R\\xc3\\xa9union)\\0\"\n\t\"FRR\\0\"\n\t\"RE\\0\"\n\t\"bs-Cyrl-BA\\0\"\n\t\"Bosnian (Cyrillic, Bosnia & Herzegovina)\\0\"\n\t\"BSC\\0\"\n\t\"ar-YE\\0\"\n\t\"Arabic (Yemen)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd9\\x8a\\xd9\\x85\\xd9\\x86)\\0\"\n\t\"ARY\\0\"\n\t\"YE\\0\"\n\t\"es-CO\\0\"\n\t\"Spanish (Colombia)\\0\"\n\t\"espa\\xc3\\xb1ol (Colombia)\\0\"\n\t\"ESO\\0\"\n\t\"CO\\0\"\n\t\"fr-CD\\0\"\n\t\"French (Congo - Kinshasa)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Congo-Kinshasa)\\0\"\n\t\"FRD\\0\"\n\t\"CD\\0\"\n\t\"sr-Latn-RS\\0\"\n\t\"Serbian (Latin, Serbia)\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xbf\\xd1\\x81\\xd0\\xba\\xd0\\xb8 (\\xd0\\xa1\\xd1\\x80\\xd0\\xb1\\xd0\\xb8\\xd1\\x98\\xd0\\xb0)\\0\"\n\t\"SRM\\0\"\n\t\"RS\\0\"\n\t\"smn-FI\\0\"\n\t\"Inari Sami (Finland)\\0\"\n\t\"anar\\xc3\\xa2\\xc5\\xa1kiel\\xc3\\xa2 (Suom\\xc3\\xa2)\\0\"\n\t\"SMN\\0\"\n\t\"smn\\0\"\n\t\"ar-SY\\0\"\n\t\"Arabic (Syria)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xb3\\xd9\\x88\\xd8\\xb1\\xd9\\x8a\\xd8\\xa7)\\0\"\n\t\"ARS\\0\"\n\t\"SY\\0\"\n\t\"en-BZ\\0\"\n\t\"English (Belize)\\0\"\n\t\"ENL\\0\"\n\t\"BZ\\0\"\n\t\"es-PE\\0\"\n\t\"Spanish (Peru)\\0\"\n\t\"espa\\xc3\\xb1ol (Per\\xc3\\xba)\\0\"\n\t\"ESR\\0\"\n\t\"PE\\0\"\n\t\"fr-SN\\0\"\n\t\"French (Senegal)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (S\\xc3\\xa9n\\xc3\\xa9gal)\\0\"\n\t\"FRN\\0\"\n\t\"SN\\0\"\n\t\"sr-Cyrl-RS\\0\"\n\t\"Serbian (Cyrillic, Serbia)\\0\"\n\t\"SRO\\0\"\n\t\"ar-JO\\0\"\n\t\"Arabic (Jordan)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd8\\xb1\\xd8\\xaf\\xd9\\x86)\\0\"\n\t\"ARJ\\0\"\n\t\"JO\\0\"\n\t\"en-TT\\0\"\n\t\"English (Trinidad & Tobago)\\0\"\n\t\"ENT\\0\"\n\t\"TT\\0\"\n\t\"es-AR\\0\"\n\t\"Spanish (Argentina)\\0\"\n\t\"espa\\xc3\\xb1ol (Argentina)\\0\"\n\t\"ESS\\0\"\n\t\"AR\\0\"\n\t\"fr-CM\\0\"\n\t\"French (Cameroon)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Cameroun)\\0\"\n\t\"FRE\\0\"\n\t\"CM\\0\"\n\t\"sr-Latn-ME\\0\"\n\t\"Serbian (Latin, Montenegro)\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xbf\\xd1\\x81\\xd0\\xba\\xd0\\xb8 (\\xd0\\xa6\\xd1\\x80\\xd0\\xbd\\xd0\\xb0 \\xd0\\x93\\xd0\\xbe\\xd1\\x80\\xd0\\xb0)\\0\"\n\t\"SRP\\0\"\n\t\"ME\\0\"\n\t\"ar-LB\\0\"\n\t\"Arabic (Lebanon)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd9\\x84\\xd8\\xa8\\xd9\\x86\\xd8\\xa7\\xd9\\x86)\\0\"\n\t\"ARB\\0\"\n\t\"LB\\0\"\n\t\"en-ZW\\0\"\n\t\"English (Zimbabwe)\\0\"\n\t\"ENW\\0\"\n\t\"ZW\\0\"\n\t\"es-EC\\0\"\n\t\"Spanish (Ecuador)\\0\"\n\t\"espa\\xc3\\xb1ol (Ecuador)\\0\"\n\t\"ESF\\0\"\n\t\"EC\\0\"\n\t\"fr-CI\\0\"\n\t\"French (C\\xc3\\xb4te d\\xe2\\x80\\x99Ivoire)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (C\\xc3\\xb4te d\\xe2\\x80\\x99Ivoire)\\0\"\n\t\"FRI\\0\"\n\t\"CI\\0\"\n\t\"sr-Cyrl-ME\\0\"\n\t\"Serbian (Cyrillic, Montenegro)\\0\"\n\t\"SRQ\\0\"\n\t\"ar-KW\\0\"\n\t\"Arabic (Kuwait)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd9\\x83\\xd9\\x88\\xd9\\x8a\\xd8\\xaa)\\0\"\n\t\"ARK\\0\"\n\t\"KW\\0\"\n\t\"en-PH\\0\"\n\t\"English (Philippines)\\0\"\n\t\"ENP\\0\"\n\t\"es-CL\\0\"\n\t\"Spanish (Chile)\\0\"\n\t\"espa\\xc3\\xb1ol (Chile)\\0\"\n\t\"ESL\\0\"\n\t\"CL\\0\"\n\t\"fr-ML\\0\"\n\t\"French (Mali)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Mali)\\0\"\n\t\"FRF\\0\"\n\t\"ML\\0\"\n\t\"ar-AE\\0\"\n\t\"Arabic (United Arab Emirates)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd8\\xa5\\xd9\\x85\\xd8\\xa7\\xd8\\xb1\\xd8\\xa7\\xd8\\xaa \\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 \\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd8\\xaa\\xd8\\xad\\xd8\\xaf\\xd8\\xa9)\\0\"\n\t\"ARU\\0\"\n\t\"AE\\0\"\n\t\"es-UY\\0\"\n\t\"Spanish (Uruguay)\\0\"\n\t\"espa\\xc3\\xb1ol (Uruguay)\\0\"\n\t\"ESY\\0\"\n\t\"UY\\0\"\n\t\"fr-MA\\0\"\n\t\"French (Morocco)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Maroc)\\0\"\n\t\"FRO\\0\"\n\t\"ar-BH\\0\"\n\t\"Arabic (Bahrain)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd8\\xa7\\xd9\\x84\\xd8\\xa8\\xd8\\xad\\xd8\\xb1\\xd9\\x8a\\xd9\\x86)\\0\"\n\t\"ARH\\0\"\n\t\"BH\\0\"\n\t\"en-HK\\0\"\n\t\"English (Hong Kong SAR China)\\0\"\n\t\"ENH\\0\"\n\t\"es-PY\\0\"\n\t\"Spanish (Paraguay)\\0\"\n\t\"espa\\xc3\\xb1ol (Paraguay)\\0\"\n\t\"ESZ\\0\"\n\t\"PY\\0\"\n\t\"fr-HT\\0\"\n\t\"French (Haiti)\\0\"\n\t\"fran\\xc3\\xa7\\x61is (Ha\\xc3\\xafti)\\0\"\n\t\"FRH\\0\"\n\t\"HT\\0\"\n\t\"ar-QA\\0\"\n\t\"Arabic (Qatar)\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 (\\xd9\\x82\\xd8\\xb7\\xd8\\xb1)\\0\"\n\t\"ARQ\\0\"\n\t\"QA\\0\"\n\t\"en-IN\\0\"\n\t\"English (India)\\0\"\n\t\"ENN\\0\"\n\t\"es-BO\\0\"\n\t\"Spanish (Bolivia)\\0\"\n\t\"espa\\xc3\\xb1ol (Bolivia)\\0\"\n\t\"ESB\\0\"\n\t\"BO\\0\"\n\t\"en-MY\\0\"\n\t\"English (Malaysia)\\0\"\n\t\"ENM\\0\"\n\t\"es-SV\\0\"\n\t\"Spanish (El Salvador)\\0\"\n\t\"espa\\xc3\\xb1ol (El Salvador)\\0\"\n\t\"ESE\\0\"\n\t\"SV\\0\"\n\t\"en-SG\\0\"\n\t\"English (Singapore)\\0\"\n\t\"ENE\\0\"\n\t\"es-HN\\0\"\n\t\"Spanish (Honduras)\\0\"\n\t\"espa\\xc3\\xb1ol (Honduras)\\0\"\n\t\"ESH\\0\"\n\t\"HN\\0\"\n\t\"es-NI\\0\"\n\t\"Spanish (Nicaragua)\\0\"\n\t\"espa\\xc3\\xb1ol (Nicaragua)\\0\"\n\t\"ESI\\0\"\n\t\"NI\\0\"\n\t\"es-PR\\0\"\n\t\"Spanish (Puerto Rico)\\0\"\n\t\"espa\\xc3\\xb1ol (Puerto Rico)\\0\"\n\t\"ESU\\0\"\n\t\"PR\\0\"\n\t\"es-US\\0\"\n\t\"Spanish (United States)\\0\"\n\t\"espa\\xc3\\xb1ol (Estados Unidos)\\0\"\n\t\"EST\\0\"\n\t\"es-CU\\0\"\n\t\"Spanish (Cuba)\\0\"\n\t\"espa\\xc3\\xb1ol (Cuba)\\0\"\n\t\"ESK\\0\"\n\t\"CU\\0\"\n\t\"bs-Cyrl\\0\"\n\t\"Bosnian (Cyrillic)\\0\"\n\t\"bosanski\\0\"\n\t\"bs-Latn\\0\"\n\t\"Bosnian (Latin)\\0\"\n\t\"sr-Cyrl\\0\"\n\t\"Serbian (Cyrillic)\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xbf\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\0\"\n\t\"sr-Latn\\0\"\n\t\"Serbian (Latin)\\0\"\n\t\"Inari Sami\\0\"\n\t\"anar\\xc3\\xa2\\xc5\\xa1kiel\\xc3\\xa2\\0\"\n\t\"az-Cyrl\\0\"\n\t\"Azerbaijani (Cyrillic)\\0\"\n\t\"Norwegian Nynorsk\\0\"\n\t\"nynorsk\\0\"\n\t\"Bosnian\\0\"\n\t\"az-Latn\\0\"\n\t\"Azerbaijani (Latin)\\0\"\n\t\"uz-Cyrl\\0\"\n\t\"Uzbek (Cyrillic)\\0\"\n\t\"mn-Cyrl\\0\"\n\t\"Mongolian (Cyrillic)\\0\"\n\t\"zh-Hant\\0\"\n\t\"zh-CHT\\0\"\n\t\"Chinese (Traditional) Legacy\\0\"\n\t\"Norwegian Bokm\\xc3\\xa5l\\0\"\n\t\"norsk bokm\\xc3\\xa5l\\0\"\n\t\"Serbian\\0\"\n\t\"SRB\\0\"\n\t\"tg-Cyrl\\0\"\n\t\"Tajik (Cyrillic)\\0\"\n\t\"Lower Sorbian\\0\"\n\t\"dolnoserb\\xc5\\xa1\\xc4\\x87ina\\0\"\n\t\"uz-Latn\\0\"\n\t\"Uzbek (Latin)\\0\"\n\t\"pa-Arab\\0\"\n\t\"Punjabi (Arabic)\\0\"\n\t\"tzm-Latn\\0\"\n\t\"Central Atlas Tamazight (Latin)\\0\"\n\t\"ha-Latn\\0\"\n\t\"Hausa (Latin)\\0\"\n\t\"af-za\\0\"\n\t\"am-et\\0\"\n\t\"ar-ae\\0\"\n\t\"ar-bh\\0\"\n\t\"ar-dz\\0\"\n\t\"ar-eg\\0\"\n\t\"ar-iq\\0\"\n\t\"ar-jo\\0\"\n\t\"ar-kw\\0\"\n\t\"ar-lb\\0\"\n\t\"ar-ly\\0\"\n\t\"ar-ma\\0\"\n\t\"ar-om\\0\"\n\t\"ar-qa\\0\"\n\t\"ar-sa\\0\"\n\t\"ar-sy\\0\"\n\t\"ar-tn\\0\"\n\t\"ar-ye\\0\"\n\t\"as-in\\0\"\n\t\"az-cyrl\\0\"\n\t\"az-cyrl-az\\0\"\n\t\"az-latn\\0\"\n\t\"az-latn-az\\0\"\n\t\"be-by\\0\"\n\t\"bg-bg\\0\"\n\t\"bn-bd\\0\"\n\t\"bn-in\\0\"\n\t\"bo-cn\\0\"\n\t\"br-fr\\0\"\n\t\"bs-cyrl\\0\"\n\t\"bs-cyrl-ba\\0\"\n\t\"bs-latn\\0\"\n\t\"bs-latn-ba\\0\"\n\t\"ca-es\\0\"\n\t\"ca-es-valencia\\0\"\n\t\"cs-cz\\0\"\n\t\"cy-gb\\0\"\n\t\"da-dk\\0\"\n\t\"de-at\\0\"\n\t\"de-ch\\0\"\n\t\"de-de\\0\"\n\t\"de-li\\0\"\n\t\"de-lu\\0\"\n\t\"dsb-de\\0\"\n\t\"el-gr\\0\"\n\t\"en-au\\0\"\n\t\"en-bz\\0\"\n\t\"en-ca\\0\"\n\t\"en-gb\\0\"\n\t\"en-hk\\0\"\n\t\"en-ie\\0\"\n\t\"en-in\\0\"\n\t\"en-jm\\0\"\n\t\"en-my\\0\"\n\t\"en-nz\\0\"\n\t\"en-ph\\0\"\n\t\"en-sg\\0\"\n\t\"en-tt\\0\"\n\t\"en-us\\0\"\n\t\"en-za\\0\"\n\t\"en-zw\\0\"\n\t\"es-ar\\0\"\n\t\"es-bo\\0\"\n\t\"es-cl\\0\"\n\t\"es-co\\0\"\n\t\"es-cr\\0\"\n\t\"es-cu\\0\"\n\t\"es-do\\0\"\n\t\"es-ec\\0\"\n\t\"es-es\\0\"\n\t\"es-gt\\0\"\n\t\"es-hn\\0\"\n\t\"es-mx\\0\"\n\t\"es-ni\\0\"\n\t\"es-pa\\0\"\n\t\"es-pe\\0\"\n\t\"es-pr\\0\"\n\t\"es-py\\0\"\n\t\"es-sv\\0\"\n\t\"es-us\\0\"\n\t\"es-uy\\0\"\n\t\"es-ve\\0\"\n\t\"et-ee\\0\"\n\t\"eu-es\\0\"\n\t\"fa-ir\\0\"\n\t\"fi-fi\\0\"\n\t\"fil-ph\\0\"\n\t\"fo-fo\\0\"\n\t\"fr-be\\0\"\n\t\"fr-ca\\0\"\n\t\"fr-cd\\0\"\n\t\"fr-ch\\0\"\n\t\"fr-ci\\0\"\n\t\"fr-cm\\0\"\n\t\"fr-fr\\0\"\n\t\"fr-ht\\0\"\n\t\"fr-lu\\0\"\n\t\"fr-ma\\0\"\n\t\"fr-mc\\0\"\n\t\"fr-ml\\0\"\n\t\"fr-re\\0\"\n\t\"fr-sn\\0\"\n\t\"fy-nl\\0\"\n\t\"ga-ie\\0\"\n\t\"gd-gb\\0\"\n\t\"gl-es\\0\"\n\t\"gsw-fr\\0\"\n\t\"gu-in\\0\"\n\t\"ha-latn\\0\"\n\t\"ha-latn-ng\\0\"\n\t\"haw-us\\0\"\n\t\"he-il\\0\"\n\t\"hi-in\\0\"\n\t\"hr-ba\\0\"\n\t\"hr-hr\\0\"\n\t\"hsb-de\\0\"\n\t\"hu-hu\\0\"\n\t\"hy-am\\0\"\n\t\"id-id\\0\"\n\t\"ig-ng\\0\"\n\t\"ii-cn\\0\"\n\t\"is-is\\0\"\n\t\"it-ch\\0\"\n\t\"it-it\\0\"\n\t\"ja-jp\\0\"\n\t\"ka-ge\\0\"\n\t\"kk-kz\\0\"\n\t\"kl-gl\\0\"\n\t\"km-kh\\0\"\n\t\"kn-in\\0\"\n\t\"ko-kr\\0\"\n\t\"kok-in\\0\"\n\t\"ky-kg\\0\"\n\t\"lb-lu\\0\"\n\t\"lo-la\\0\"\n\t\"lt-lt\\0\"\n\t\"lv-lv\\0\"\n\t\"mk-mk\\0\"\n\t\"ml-in\\0\"\n\t\"mn-cyrl\\0\"\n\t\"mn-mn\\0\"\n\t\"mr-in\\0\"\n\t\"ms-bn\\0\"\n\t\"ms-my\\0\"\n\t\"mt-mt\\0\"\n\t\"my-mm\\0\"\n\t\"nb-no\\0\"\n\t\"ne-in\\0\"\n\t\"ne-np\\0\"\n\t\"nl-be\\0\"\n\t\"nl-nl\\0\"\n\t\"nn-no\\0\"\n\t\"nso-za\\0\"\n\t\"om-et\\0\"\n\t\"or-in\\0\"\n\t\"pa-arab\\0\"\n\t\"pa-arab-pk\\0\"\n\t\"pl-pl\\0\"\n\t\"ps-af\\0\"\n\t\"pt-br\\0\"\n\t\"pt-pt\\0\"\n\t\"rm-ch\\0\"\n\t\"ro-md\\0\"\n\t\"ro-ro\\0\"\n\t\"ru-md\\0\"\n\t\"ru-ru\\0\"\n\t\"rw-rw\\0\"\n\t\"sah-ru\\0\"\n\t\"se-fi\\0\"\n\t\"se-no\\0\"\n\t\"se-se\\0\"\n\t\"si-lk\\0\"\n\t\"sk-sk\\0\"\n\t\"sl-si\\0\"\n\t\"smn-fi\\0\"\n\t\"so-so\\0\"\n\t\"sq-al\\0\"\n\t\"sr-cyrl\\0\"\n\t\"sr-cyrl-ba\\0\"\n\t\"sr-cyrl-me\\0\"\n\t\"sr-cyrl-rs\\0\"\n\t\"sr-latn\\0\"\n\t\"sr-latn-ba\\0\"\n\t\"sr-latn-me\\0\"\n\t\"sr-latn-rs\\0\"\n\t\"st-za\\0\"\n\t\"sv-fi\\0\"\n\t\"sv-se\\0\"\n\t\"sw-ke\\0\"\n\t\"ta-in\\0\"\n\t\"ta-lk\\0\"\n\t\"te-in\\0\"\n\t\"tg-cyrl\\0\"\n\t\"tg-cyrl-tj\\0\"\n\t\"th-th\\0\"\n\t\"ti-er\\0\"\n\t\"ti-et\\0\"\n\t\"tk-tm\\0\"\n\t\"tn-bw\\0\"\n\t\"tn-za\\0\"\n\t\"tr-tr\\0\"\n\t\"ts-za\\0\"\n\t\"tt-ru\\0\"\n\t\"tzm-latn\\0\"\n\t\"ug-cn\\0\"\n\t\"uk-ua\\0\"\n\t\"ur-in\\0\"\n\t\"ur-pk\\0\"\n\t\"uz-cyrl\\0\"\n\t\"uz-cyrl-uz\\0\"\n\t\"uz-latn\\0\"\n\t\"uz-latn-uz\\0\"\n\t\"vi-vn\\0\"\n\t\"xh-za\\0\"\n\t\"yo-ng\\0\"\n\t\"zh-chs\\0\"\n\t\"zh-cht\\0\"\n\t\"zh-cn\\0\"\n\t\"zh-hans\\0\"\n\t\"zh-hant\\0\"\n\t\"zh-hk\\0\"\n\t\"zh-mo\\0\"\n\t\"zh-sg\\0\"\n\t\"zh-tw\\0\"\n\t\"zu-za\\0\"\n\t\"United Arab Emirates\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xa5\\xd9\\x85\\xd8\\xa7\\xd8\\xb1\\xd8\\xa7\\xd8\\xaa \\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 \\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd8\\xaa\\xd8\\xad\\xd8\\xaf\\xd8\\xa9\\0\"\n\t\"AED\\0\"\n\t\"United Arab Emirates Dirham\\0\"\n\t\"\\xd8\\xaf\\xd8\\xb1\\xd9\\x87\\xd9\\x85 \\xd8\\xa5\\xd9\\x85\\xd8\\xa7\\xd8\\xb1\\xd8\\xa7\\xd8\\xaa\\xd9\\x8a\\0\"\n\t\"AFG\\0\"\n\t\"Afghanistan\\0\"\n\t\"\\xd8\\xa7\\xd9\\x81\\xd8\\xba\\xd8\\xa7\\xd9\\x86\\xd8\\xb3\\xd8\\xaa\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"AFN\\0\"\n\t\"Afghan Afghani\\0\"\n\t\"\\xd8\\xa7\\xd9\\x81\\xd8\\xba\\xd8\\xa7\\xd9\\x86\\xdb\\x8d\\0\"\n\t\"ALB\\0\"\n\t\"Albania\\0\"\n\t\"Shqip\\xc3\\xabri\\0\"\n\t\"ALL\\0\"\n\t\"Albanian Lek\\0\"\n\t\"Leku shqiptar\\0\"\n\t\"Armenia\\0\"\n\t\"\\xd5\\x80\\xd5\\xa1\\xd5\\xb5\\xd5\\xa1\\xd5\\xbd\\xd5\\xbf\\xd5\\xa1\\xd5\\xb6\\0\"\n\t\"AMD\\0\"\n\t\"Armenian Dram\\0\"\n\t\"\\xd5\\x80\\xd5\\xa1\\xd5\\xb5\\xd5\\xaf\\xd5\\xa1\\xd5\\xaf\\xd5\\xa1\\xd5\\xb6 \\xd5\\xa4\\xd6\\x80\\xd5\\xa1\\xd5\\xb4\\0\"\n\t\"Argentina\\0\"\n\t\"Argentine Peso\\0\"\n\t\"peso argentino\\0\"\n\t\"AUT\\0\"\n\t\"Austria\\0\"\n\t\"\\xc3\\x96sterreich\\0\"\n\t\"EUR\\0\"\n\t\"Euro\\0\"\n\t\"AUS\\0\"\n\t\"Australia\\0\"\n\t\"AUD\\0\"\n\t\"Australian Dollar\\0\"\n\t\"Azerbaijan\\0\"\n\t\"Az\\xc9\\x99rbaycan\\0\"\n\t\"AZN\\0\"\n\t\"Azerbaijani Manat\\0\"\n\t\"Az\\xc9\\x99rbaycan Manat\\xc4\\xb1\\0\"\n\t\"BIH\\0\"\n\t\"Bosnia & Herzegovina\\0\"\n\t\"Bosna i Hercegovina\\0\"\n\t\"BAM\\0\"\n\t\"Bosnia-Herzegovina Convertible Mark\\0\"\n\t\"konvertibilna marka\\0\"\n\t\"BGD\\0\"\n\t\"Bangladesh\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\x82\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe\\xe0\\xa6\\xa6\\xe0\\xa7\\x87\\xe0\\xa6\\xb6\\0\"\n\t\"BDT\\0\"\n\t\"Bangladeshi Taka\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\x82\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe\\xe0\\xa6\\xa6\\xe0\\xa7\\x87\\xe0\\xa6\\xb6\\xe0\\xa7\\x80 \\xe0\\xa6\\x9f\\xe0\\xa6\\xbe\\xe0\\xa6\\x95\\xe0\\xa6\\xbe\\0\"\n\t\"Belgium\\0\"\n\t\"Belgique\\0\"\n\t\"euro\\0\"\n\t\"Bulgaria\\0\"\n\t\"\\xd0\\x91\\xd1\\x8a\\xd0\\xbb\\xd0\\xb3\\xd0\\xb0\\xd1\\x80\\xd0\\xb8\\xd1\\x8f\\0\"\n\t\"BGN\\0\"\n\t\"Bulgarian Lev\\0\"\n\t\"\\xd0\\x91\\xd1\\x8a\\xd0\\xbb\\xd0\\xb3\\xd0\\xb0\\xd1\\x80\\xd1\\x81\\xd0\\xba\\xd0\\xb8 \\xd0\\xbb\\xd0\\xb5\\xd0\\xb2\\0\"\n\t\"BHR\\0\"\n\t\"Bahrain\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xa8\\xd8\\xad\\xd8\\xb1\\xd9\\x8a\\xd9\\x86\\0\"\n\t\"BHD\\0\"\n\t\"Bahraini Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd8\\xa8\\xd8\\xad\\xd8\\xb1\\xd9\\x8a\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"BRN\\0\"\n\t\"Brunei\\0\"\n\t\"BND\\0\"\n\t\"Brunei Dollar\\0\"\n\t\"Dolar Brunei\\0\"\n\t\"BOL\\0\"\n\t\"Bolivia\\0\"\n\t\"Bolivian Boliviano\\0\"\n\t\"boliviano\\0\"\n\t\"BRA\\0\"\n\t\"Brazil\\0\"\n\t\"Brasil\\0\"\n\t\"BRL\\0\"\n\t\"Brazilian Real\\0\"\n\t\"Real brasileiro\\0\"\n\t\"BWA\\0\"\n\t\"Botswana\\0\"\n\t\"BWP\\0\"\n\t\"Botswanan Pula\\0\"\n\t\"BLR\\0\"\n\t\"Belarus\\0\"\n\t\"\\xd0\\x91\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd1\\x8c\\0\"\n\t\"BYN\\0\"\n\t\"Belarusian Ruble\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\xd1\\x80\\xd1\\x83\\xd1\\x81\\xd0\\xba\\xd1\\x96 \\xd1\\x80\\xd1\\x83\\xd0\\xb1\\xd0\\xb5\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"BLZ\\0\"\n\t\"Belize\\0\"\n\t\"BZD\\0\"\n\t\"Belize Dollar\\0\"\n\t\"CAN\\0\"\n\t\"Canada\\0\"\n\t\"CAD\\0\"\n\t\"Canadian Dollar\\0\"\n\t\"dollar canadien\\0\"\n\t\"COD\\0\"\n\t\"Congo - Kinshasa\\0\"\n\t\"Congo-Kinshasa\\0\"\n\t\"CDF\\0\"\n\t\"Congolese Franc\\0\"\n\t\"franc congolais\\0\"\n\t\"CHE\\0\"\n\t\"Switzerland\\0\"\n\t\"Svizra\\0\"\n\t\"Swiss Franc\\0\"\n\t\"franc svizzer\\0\"\n\t\"CIV\\0\"\n\t\"C\\xc3\\xb4te d\\xe2\\x80\\x99Ivoire\\0\"\n\t\"XOF\\0\"\n\t\"West African CFA Franc\\0\"\n\t\"franc CFA (BCEAO)\\0\"\n\t\"CHL\\0\"\n\t\"Chile\\0\"\n\t\"CLP\\0\"\n\t\"Chilean Peso\\0\"\n\t\"Peso chileno\\0\"\n\t\"CMR\\0\"\n\t\"Cameroon\\0\"\n\t\"Cameroun\\0\"\n\t\"XAF\\0\"\n\t\"Central African CFA Franc\\0\"\n\t\"franc CFA (BEAC)\\0\"\n\t\"CHN\\0\"\n\t\"China\\0\"\n\t\"\\xe0\\xbd\\xa2\\xe0\\xbe\\x92\\xe0\\xbe\\xb1\\xe0\\xbc\\x8b\\xe0\\xbd\\x93\\xe0\\xbd\\x82\\0\"\n\t\"CNY\\0\"\n\t\"Chinese Yuan\\0\"\n\t\"\\xe0\\xbd\\xa1\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\xa8\\xe0\\xbd\\x93\\xe0\\xbc\\x8b\\0\"\n\t\"COL\\0\"\n\t\"Colombia\\0\"\n\t\"COP\\0\"\n\t\"Colombian Peso\\0\"\n\t\"peso colombiano\\0\"\n\t\"CRI\\0\"\n\t\"Costa Rica\\0\"\n\t\"CRC\\0\"\n\t\"Costa Rican Col\\xc3\\xb3n\\0\"\n\t\"col\\xc3\\xb3n costarricense\\0\"\n\t\"CUB\\0\"\n\t\"Cuba\\0\"\n\t\"CUP\\0\"\n\t\"Cuban Peso\\0\"\n\t\"peso cubano\\0\"\n\t\"CZE\\0\"\n\t\"Czech Republic\\0\"\n\t\"\\xc4\\x8c\\x65sk\\xc3\\xa1 republika\\0\"\n\t\"CZK\\0\"\n\t\"Czech Republic Koruna\\0\"\n\t\"\\xc4\\x8d\\x65sk\\xc3\\xa1 koruna\\0\"\n\t\"Germany\\0\"\n\t\"Deutschland\\0\"\n\t\"DNK\\0\"\n\t\"Denmark\\0\"\n\t\"Danmark\\0\"\n\t\"DKK\\0\"\n\t\"Danish Krone\\0\"\n\t\"dansk krone\\0\"\n\t\"DOM\\0\"\n\t\"Dominican Republic\\0\"\n\t\"Rep\\xc3\\xba\\x62lica Dominicana\\0\"\n\t\"DOP\\0\"\n\t\"Dominican Peso\\0\"\n\t\"peso dominicano\\0\"\n\t\"DZA\\0\"\n\t\"Algeria\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xac\\xd8\\xb2\\xd8\\xa7\\xd8\\xa6\\xd8\\xb1\\0\"\n\t\"DZD\\0\"\n\t\"Algerian Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd8\\xac\\xd8\\xb2\\xd8\\xa7\\xd8\\xa6\\xd8\\xb1\\xd9\\x8a\\0\"\n\t\"ECU\\0\"\n\t\"Ecuador\\0\"\n\t\"USD\\0\"\n\t\"US Dollar\\0\"\n\t\"d\\xc3\\xb3lar estadounidense\\0\"\n\t\"Estonia\\0\"\n\t\"Eesti\\0\"\n\t\"EGY\\0\"\n\t\"Egypt\\0\"\n\t\"\\xd9\\x85\\xd8\\xb5\\xd8\\xb1\\0\"\n\t\"EGP\\0\"\n\t\"Egyptian Pound\\0\"\n\t\"\\xd8\\xac\\xd9\\x86\\xd9\\x8a\\xd9\\x87 \\xd9\\x85\\xd8\\xb5\\xd8\\xb1\\xd9\\x8a\\0\"\n\t\"ERI\\0\"\n\t\"Eritrea\\0\"\n\t\"\\xe1\\x8a\\xa4\\xe1\\x88\\xad\\xe1\\x89\\xb5\\xe1\\x88\\xab\\0\"\n\t\"ERN\\0\"\n\t\"Eritrean Nakfa\\0\"\n\t\"Spain\\0\"\n\t\"Espanya\\0\"\n\t\"ETH\\0\"\n\t\"Ethiopia\\0\"\n\t\"\\xe1\\x8a\\xa2\\xe1\\x89\\xb5\\xe1\\x8b\\xae\\xe1\\x8c\\xb5\\xe1\\x8b\\xab\\0\"\n\t\"ETB\\0\"\n\t\"Ethiopian Birr\\0\"\n\t\"\\xe1\\x8b\\xa8\\xe1\\x8a\\xa2\\xe1\\x89\\xb5\\xe1\\x8b\\xae\\xe1\\x8c\\xb5\\xe1\\x8b\\xab \\xe1\\x89\\xa5\\xe1\\x88\\xad\\0\"\n\t\"Finland\\0\"\n\t\"Suomi\\0\"\n\t\"Faroe Islands\\0\"\n\t\"F\\xc3\\xb8royar\\0\"\n\t\"donsk kr\\xc3\\xb3na\\0\"\n\t\"France\\0\"\n\t\"GBR\\0\"\n\t\"United Kingdom\\0\"\n\t\"Y Deyrnas Unedig\\0\"\n\t\"GBP\\0\"\n\t\"British Pound\\0\"\n\t\"Punt Prydain\\0\"\n\t\"GEO\\0\"\n\t\"Georgia\\0\"\n\t\"\\xe1\\x83\\xa1\\xe1\\x83\\x90\\xe1\\x83\\xa5\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x97\\xe1\\x83\\x95\\xe1\\x83\\x94\\xe1\\x83\\x9a\\xe1\\x83\\x9d\\0\"\n\t\"GEL\\0\"\n\t\"Georgian Lari\\0\"\n\t\"\\xe1\\x83\\xa5\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x97\\xe1\\x83\\xa3\\xe1\\x83\\x9a\\xe1\\x83\\x98 \\xe1\\x83\\x9a\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"GRL\\0\"\n\t\"Greenland\\0\"\n\t\"Kalaallit Nunaat\\0\"\n\t\"danmarkimut koruuni\\0\"\n\t\"GRC\\0\"\n\t\"Greece\\0\"\n\t\"\\xce\\x95\\xce\\xbb\\xce\\xbb\\xce\\xac\\xce\\xb4\\xce\\xb1\\0\"\n\t\"\\xce\\x95\\xcf\\x85\\xcf\\x81\\xcf\\x8e\\0\"\n\t\"GTM\\0\"\n\t\"Guatemala\\0\"\n\t\"GTQ\\0\"\n\t\"Guatemalan Quetzal\\0\"\n\t\"quetzal\\0\"\n\t\"HKG\\0\"\n\t\"Hong Kong SAR China\\0\"\n\t\"\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\\xe9\\xa6\\x99\\xe6\\xb8\\xaf\\xe7\\x89\\xb9\\xe5\\x88\\xab\\xe8\\xa1\\x8c\\xe6\\x94\\xbf\\xe5\\x8c\\xba\\0\"\n\t\"HKD\\0\"\n\t\"Hong Kong Dollar\\0\"\n\t\"\\xe6\\xb8\\xaf\\xe5\\x85\\x83\\0\"\n\t\"HND\\0\"\n\t\"Honduras\\0\"\n\t\"HNL\\0\"\n\t\"Honduran Lempira\\0\"\n\t\"lempira hondure\\xc3\\xb1o\\0\"\n\t\"Croatia\\0\"\n\t\"Hrvatska\\0\"\n\t\"Croatian Kuna\\0\"\n\t\"hrvatska kuna\\0\"\n\t\"HTI\\0\"\n\t\"Haiti\\0\"\n\t\"Ha\\xc3\\xafti\\0\"\n\t\"HTG\\0\"\n\t\"Haitian Gourde\\0\"\n\t\"gourde ha\\xc3\\xaftienne\\0\"\n\t\"Hungary\\0\"\n\t\"Magyarorsz\\xc3\\xa1g\\0\"\n\t\"HUF\\0\"\n\t\"Hungarian Forint\\0\"\n\t\"magyar forint\\0\"\n\t\"IDN\\0\"\n\t\"IDR\\0\"\n\t\"Indonesian Rupiah\\0\"\n\t\"Rupiah Indonesia\\0\"\n\t\"IRL\\0\"\n\t\"Ireland\\0\"\n\t\"\\xc3\\x89ire\\0\"\n\t\"ISR\\0\"\n\t\"Israel\\0\"\n\t\"\\xd7\\x99\\xd7\\xa9\\xd7\\xa8\\xd7\\x90\\xd7\\x9c\\0\"\n\t\"ILS\\0\"\n\t\"Israeli New Shekel\\0\"\n\t\"\\xd7\\xa9\\xd7\\xa7\\xd7\\x9c \\xd7\\x97\\xd7\\x93\\xd7\\xa9\\0\"\n\t\"India\\0\"\n\t\"\\xe0\\xa4\\xad\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa4\\xa4\\0\"\n\t\"INR\\0\"\n\t\"Indian Rupee\\0\"\n\t\"\\xe0\\xa4\\xad\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa4\\xa4\\xe0\\xa5\\x80\\xe0\\xa4\\xaf \\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\xe0\\xa4\\xaa\\xe0\\xa4\\xaf\\xe0\\xa4\\xbe\\0\"\n\t\"IRQ\\0\"\n\t\"Iraq\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa7\\xd9\\x82\\0\"\n\t\"IQD\\0\"\n\t\"Iraqi Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd8\\xb9\\xd8\\xb1\\xd8\\xa7\\xd9\\x82\\xd9\\x8a\\0\"\n\t\"IRN\\0\"\n\t\"Iran\\0\"\n\t\"\\xd8\\xa7\\xdb\\x8c\\xd8\\xb1\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"IRR\\0\"\n\t\"Iranian Rial\\0\"\n\t\"\\xd8\\xb1\\xdb\\x8c\\xd8\\xa7\\xd9\\x84 \\xd8\\xa7\\xdb\\x8c\\xd8\\xb1\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"Iceland\\0\"\n\t\"\\xc3\\x8dsland\\0\"\n\t\"Icelandic Kr\\xc3\\xb3na\\0\"\n\t\"\\xc3\\xadslensk kr\\xc3\\xb3na\\0\"\n\t\"Italy\\0\"\n\t\"Italia\\0\"\n\t\"JAM\\0\"\n\t\"Jamaica\\0\"\n\t\"JMD\\0\"\n\t\"Jamaican Dollar\\0\"\n\t\"JOR\\0\"\n\t\"Jordan\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd8\\xb1\\xd8\\xaf\\xd9\\x86\\0\"\n\t\"JOD\\0\"\n\t\"Jordanian Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd8\\xa3\\xd8\\xb1\\xd8\\xaf\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"Japan\\0\"\n\t\"\\xe6\\x97\\xa5\\xe6\\x9c\\xac\\0\"\n\t\"JPY\\0\"\n\t\"Japanese Yen\\0\"\n\t\"\\xe6\\x97\\xa5\\xe6\\x9c\\xac\\xe5\\x86\\x86\\0\"\n\t\"KEN\\0\"\n\t\"Kenya\\0\"\n\t\"KES\\0\"\n\t\"Kenyan Shilling\\0\"\n\t\"Shilingi ya Kenya\\0\"\n\t\"KGZ\\0\"\n\t\"Kyrgyzstan\\0\"\n\t\"\\xd0\\x9a\\xd1\\x8b\\xd1\\x80\\xd0\\xb3\\xd1\\x8b\\xd0\\xb7\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"KGS\\0\"\n\t\"Kyrgystani Som\\0\"\n\t\"\\xd0\\x9a\\xd1\\x8b\\xd1\\x80\\xd0\\xb3\\xd1\\x8b\\xd0\\xb7\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbd \\xd1\\x81\\xd0\\xbe\\xd0\\xbc\\xd1\\x83\\0\"\n\t\"Cambodia\\0\"\n\t\"\\xe1\\x9e\\x80\\xe1\\x9e\\x98\\xe1\\x9f\\x92\\xe1\\x9e\\x96\\xe1\\x9e\\xbb\\xe1\\x9e\\x87\\xe1\\x9e\\xb6\\0\"\n\t\"KHR\\0\"\n\t\"Cambodian Riel\\0\"\n\t\"\\xe1\\x9e\\x9a\\xe1\\x9f\\x80\\xe1\\x9e\\x9b\\xe2\\x80\\x8b\\xe1\\x9e\\x80\\xe1\\x9e\\x98\\xe1\\x9f\\x92\\xe1\\x9e\\x96\\xe1\\x9e\\xbb\\xe1\\x9e\\x87\\xe1\\x9e\\xb6\\0\"\n\t\"South Korea\\0\"\n\t\"\\xeb\\x8c\\x80\\xed\\x95\\x9c\\xeb\\xaf\\xbc\\xea\\xb5\\xad\\0\"\n\t\"KRW\\0\"\n\t\"South Korean Won\\0\"\n\t\"\\xeb\\x8c\\x80\\xed\\x95\\x9c\\xeb\\xaf\\xbc\\xea\\xb5\\xad \\xec\\x9b\\x90\\0\"\n\t\"KWT\\0\"\n\t\"Kuwait\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd9\\x83\\xd9\\x88\\xd9\\x8a\\xd8\\xaa\\0\"\n\t\"KWD\\0\"\n\t\"Kuwaiti Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd9\\x83\\xd9\\x88\\xd9\\x8a\\xd8\\xaa\\xd9\\x8a\\0\"\n\t\"KAZ\\0\"\n\t\"Kazakhstan\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd2\\x9b\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"KZT\\0\"\n\t\"Kazakhstani Tenge\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd2\\x9b\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbd \\xd1\\x82\\xd0\\xb5\\xd2\\xa3\\xd0\\xb3\\xd0\\xb5\\xd1\\x81\\xd1\\x96\\0\"\n\t\"Laos\\0\"\n\t\"LAK\\0\"\n\t\"Laotian Kip\\0\"\n\t\"\\xe0\\xba\\xa5\\xe0\\xba\\xb2\\xe0\\xba\\xa7 \\xe0\\xba\\x81\\xe0\\xba\\xb5\\xe0\\xba\\x9a\\0\"\n\t\"LBN\\0\"\n\t\"Lebanon\\0\"\n\t\"\\xd9\\x84\\xd8\\xa8\\xd9\\x86\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"LBP\\0\"\n\t\"Lebanese Pound\\0\"\n\t\"\\xd8\\xac\\xd9\\x86\\xd9\\x8a\\xd9\\x87 \\xd9\\x84\\xd8\\xa8\\xd9\\x86\\xd8\\xa7\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"LIE\\0\"\n\t\"Liechtenstein\\0\"\n\t\"Schweizer Franken\\0\"\n\t\"LKA\\0\"\n\t\"Sri Lanka\\0\"\n\t\"\\xe0\\xb7\\x81\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x93 \\xe0\\xb6\\xbd\\xe0\\xb6\\x82\\xe0\\xb6\\x9a\\xe0\\xb7\\x8f\\xe0\\xb7\\x80\\0\"\n\t\"LKR\\0\"\n\t\"Sri Lankan Rupee\\0\"\n\t\"\\xe0\\xb7\\x81\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x93 \\xe0\\xb6\\xbd\\xe0\\xb6\\x82\\xe0\\xb6\\x9a\\xe0\\xb7\\x8f \\xe0\\xb6\\xbb\\xe0\\xb7\\x94\\xe0\\xb6\\xb4\\xe0\\xb7\\x92\\xe0\\xb6\\xba\\xe0\\xb6\\xbd\\0\"\n\t\"LTU\\0\"\n\t\"Lithuania\\0\"\n\t\"Lietuva\\0\"\n\t\"Euras\\0\"\n\t\"LUX\\0\"\n\t\"Luxembourg\\0\"\n\t\"L\\xc3\\xabtzebuerg\\0\"\n\t\"LVA\\0\"\n\t\"Latvia\\0\"\n\t\"Latvija\\0\"\n\t\"eiro\\0\"\n\t\"LBY\\0\"\n\t\"Libya\\0\"\n\t\"\\xd9\\x84\\xd9\\x8a\\xd8\\xa8\\xd9\\x8a\\xd8\\xa7\\0\"\n\t\"LYD\\0\"\n\t\"Libyan Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd9\\x84\\xd9\\x8a\\xd8\\xa8\\xd9\\x8a\\0\"\n\t\"Morocco\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd8\\xba\\xd8\\xb1\\xd8\\xa8\\0\"\n\t\"Moroccan Dirham\\0\"\n\t\"\\xd8\\xaf\\xd8\\xb1\\xd9\\x87\\xd9\\x85 \\xd9\\x85\\xd8\\xba\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\0\"\n\t\"MCO\\0\"\n\t\"Monaco\\0\"\n\t\"MDA\\0\"\n\t\"Moldova\\0\"\n\t\"Republica Moldova\\0\"\n\t\"MDL\\0\"\n\t\"Moldovan Leu\\0\"\n\t\"leu moldovenesc\\0\"\n\t\"MNE\\0\"\n\t\"Montenegro\\0\"\n\t\"\\xd0\\xa6\\xd1\\x80\\xd0\\xbd\\xd0\\xb0 \\xd0\\x93\\xd0\\xbe\\xd1\\x80\\xd0\\xb0\\0\"\n\t\"Evro\\0\"\n\t\"MKD\\0\"\n\t\"Macedonia\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd0\\xba\\xd0\\xb5\\xd0\\xb4\\xd0\\xbe\\xd0\\xbd\\xd0\\xb8\\xd1\\x98\\xd0\\xb0\\0\"\n\t\"Macedonian Denar\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd0\\xba\\xd0\\xb5\\xd0\\xb4\\xd0\\xbe\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8 \\xd0\\xb4\\xd0\\xb5\\xd0\\xbd\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"MLI\\0\"\n\t\"Mali\\0\"\n\t\"MMR\\0\"\n\t\"Myanmar (Burma)\\0\"\n\t\"MMK\\0\"\n\t\"Myanmar Kyat\\0\"\n\t\"\\xe1\\x80\\x99\\xe1\\x80\\xbc\\xe1\\x80\\x94\\xe1\\x80\\xba\\xe1\\x80\\x99\\xe1\\x80\\xac\\xe1\\x80\\x80\\xe1\\x80\\xbb\\xe1\\x80\\x95\\xe1\\x80\\xba\\0\"\n\t\"MNG\\0\"\n\t\"Mongolia\\0\"\n\t\"\\xd0\\x9c\\xd0\\xbe\\xd0\\xbd\\xd0\\xb3\\xd0\\xbe\\xd0\\xbb\\0\"\n\t\"MNT\\0\"\n\t\"Mongolian Tugrik\\0\"\n\t\"\\xd1\\x82\\xd3\\xa9\\xd0\\xb3\\xd1\\x80\\xd3\\xa9\\xd0\\xb3\\0\"\n\t\"MAC\\0\"\n\t\"Macau SAR China\\0\"\n\t\"\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\\xe6\\xbe\\xb3\\xe9\\x97\\xa8\\xe7\\x89\\xb9\\xe5\\x88\\xab\\xe8\\xa1\\x8c\\xe6\\x94\\xbf\\xe5\\x8c\\xba\\0\"\n\t\"MOP\\0\"\n\t\"Macanese Pataca\\0\"\n\t\"\\xe6\\xbe\\xb3\\xe9\\x96\\x80\\xe5\\x85\\x83\\0\"\n\t\"Malta\\0\"\n\t\"ewro\\0\"\n\t\"MEX\\0\"\n\t\"Mexico\\0\"\n\t\"M\\xc3\\xa9xico\\0\"\n\t\"MXN\\0\"\n\t\"Mexican Peso\\0\"\n\t\"peso mexicano\\0\"\n\t\"MYS\\0\"\n\t\"Malaysia\\0\"\n\t\"MYR\\0\"\n\t\"Malaysian Ringgit\\0\"\n\t\"Ringgit Malaysia\\0\"\n\t\"NGA\\0\"\n\t\"Nigeria\\0\"\n\t\"Najeriya\\0\"\n\t\"NGN\\0\"\n\t\"Nigerian Naira\\0\"\n\t\"Naira\\0\"\n\t\"NIC\\0\"\n\t\"Nicaragua\\0\"\n\t\"NIO\\0\"\n\t\"Nicaraguan C\\xc3\\xb3rdoba\\0\"\n\t\"c\\xc3\\xb3rdoba nicarag\\xc3\\xbc\\x65nse\\0\"\n\t\"Netherlands\\0\"\n\t\"Nederland\\0\"\n\t\"Norway\\0\"\n\t\"Norge\\0\"\n\t\"NOK\\0\"\n\t\"Norwegian Krone\\0\"\n\t\"norske kroner\\0\"\n\t\"NPL\\0\"\n\t\"Nepal\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xb2\\0\"\n\t\"NPR\\0\"\n\t\"Nepalese Rupee\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xb2\\xe0\\xa5\\x80 \\xe0\\xa4\\xb0\\xe0\\xa5\\x82\\xe0\\xa4\\xaa\\xe0\\xa5\\x88\\xe0\\xa4\\xaf\\xe0\\xa4\\xbe\\xe0\\xa4\\x81\\0\"\n\t\"NZL\\0\"\n\t\"New Zealand\\0\"\n\t\"NZD\\0\"\n\t\"New Zealand Dollar\\0\"\n\t\"OMN\\0\"\n\t\"Oman\\0\"\n\t\"\\xd8\\xb9\\xd9\\x8f\\xd9\\x85\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"OMR\\0\"\n\t\"Omani Rial\\0\"\n\t\"\\xd8\\xb1\\xd9\\x8a\\xd8\\xa7\\xd9\\x84 \\xd8\\xb9\\xd9\\x85\\xd8\\xa7\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"Panama\\0\"\n\t\"Panam\\xc3\\xa1\\0\"\n\t\"PAB\\0\"\n\t\"Panamanian Balboa\\0\"\n\t\"balboa paname\\xc3\\xb1o\\0\"\n\t\"PER\\0\"\n\t\"Peru\\0\"\n\t\"Per\\xc3\\xba\\0\"\n\t\"PEN\\0\"\n\t\"Peruvian Sol\\0\"\n\t\"nuevo sol peruano\\0\"\n\t\"PHL\\0\"\n\t\"Philippines\\0\"\n\t\"Pilipinas\\0\"\n\t\"PHP\\0\"\n\t\"Philippine Peso\\0\"\n\t\"Piso ng Pilipinas\\0\"\n\t\"PAK\\0\"\n\t\"Pakistan\\0\"\n\t\"\\xd9\\xbe\\xd8\\xa7\\xda\\xa9\\xd8\\xb3\\xd8\\xaa\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"PKR\\0\"\n\t\"Pakistani Rupee\\0\"\n\t\"\\xd9\\xbe\\xd8\\xa7\\xda\\xa9\\xd8\\xb3\\xd8\\xaa\\xd8\\xa7\\xd9\\x86\\xdb\\x8c \\xd8\\xb1\\xd9\\x88\\xd9\\xbe\\xdb\\x8c\\xdb\\x81\\0\"\n\t\"POL\\0\"\n\t\"Poland\\0\"\n\t\"Polska\\0\"\n\t\"PLN\\0\"\n\t\"Polish Zloty\\0\"\n\t\"z\\xc5\\x82oty polski\\0\"\n\t\"PRI\\0\"\n\t\"Puerto Rico\\0\"\n\t\"PRT\\0\"\n\t\"Portugal\\0\"\n\t\"PRY\\0\"\n\t\"Paraguay\\0\"\n\t\"PYG\\0\"\n\t\"Paraguayan Guarani\\0\"\n\t\"guaran\\xc3\\xad paraguayo\\0\"\n\t\"QAT\\0\"\n\t\"Qatar\\0\"\n\t\"\\xd9\\x82\\xd8\\xb7\\xd8\\xb1\\0\"\n\t\"QAR\\0\"\n\t\"Qatari Rial\\0\"\n\t\"\\xd8\\xb1\\xd9\\x8a\\xd8\\xa7\\xd9\\x84 \\xd9\\x82\\xd8\\xb7\\xd8\\xb1\\xd9\\x8a\\0\"\n\t\"REU\\0\"\n\t\"R\\xc3\\xa9union\\0\"\n\t\"La R\\xc3\\xa9union\\0\"\n\t\"ROU\\0\"\n\t\"Romania\\0\"\n\t\"Rom\\xc3\\xa2nia\\0\"\n\t\"Romanian Leu\\0\"\n\t\"leu rom\\xc3\\xa2nesc\\0\"\n\t\"Serbia\\0\"\n\t\"\\xd0\\xa1\\xd1\\x80\\xd0\\xb1\\xd0\\xb8\\xd1\\x98\\xd0\\xb0\\0\"\n\t\"Serbian Dinar\\0\"\n\t\"Srpski dinar\\0\"\n\t\"Russia\\0\"\n\t\"\\xd0\\xa0\\xd0\\xbe\\xd1\\x81\\xd1\\x81\\xd0\\xb8\\xd1\\x8f\\0\"\n\t\"RUB\\0\"\n\t\"Russian Ruble\\0\"\n\t\"\\xd0\\xa0\\xd0\\xbe\\xd1\\x81\\xd1\\x81\\xd0\\xb8\\xd0\\xb9\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\xd0\\xb9 \\xd1\\x80\\xd1\\x83\\xd0\\xb1\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"RWA\\0\"\n\t\"Rwanda\\0\"\n\t\"RWF\\0\"\n\t\"Rwandan Franc\\0\"\n\t\"SAU\\0\"\n\t\"Saudi Arabia\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd9\\x85\\xd9\\x84\\xd9\\x83\\xd8\\xa9 \\xd8\\xa7\\xd9\\x84\\xd8\\xb9\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xa9 \\xd8\\xa7\\xd9\\x84\\xd8\\xb3\\xd8\\xb9\\xd9\\x88\\xd8\\xaf\\xd9\\x8a\\xd8\\xa9\\0\"\n\t\"SAR\\0\"\n\t\"Saudi Riyal\\0\"\n\t\"\\xd8\\xb1\\xd9\\x8a\\xd8\\xa7\\xd9\\x84 \\xd8\\xb3\\xd8\\xb9\\xd9\\x88\\xd8\\xaf\\xd9\\x8a\\0\"\n\t\"SWE\\0\"\n\t\"Sweden\\0\"\n\t\"Sverige\\0\"\n\t\"SEK\\0\"\n\t\"Swedish Krona\\0\"\n\t\"svensk krona\\0\"\n\t\"SGP\\0\"\n\t\"Singapore\\0\"\n\t\"\\xe6\\x96\\xb0\\xe5\\x8a\\xa0\\xe5\\x9d\\xa1\\0\"\n\t\"SGD\\0\"\n\t\"Singapore Dollar\\0\"\n\t\"\\xe6\\x96\\xb0\\xe5\\x8a\\xa0\\xe5\\x9d\\xa1\\xe5\\x85\\x83\\0\"\n\t\"SVN\\0\"\n\t\"Slovenia\\0\"\n\t\"Slovenija\\0\"\n\t\"evro\\0\"\n\t\"SVK\\0\"\n\t\"Slovakia\\0\"\n\t\"Slovensko\\0\"\n\t\"SEN\\0\"\n\t\"Senegal\\0\"\n\t\"S\\xc3\\xa9n\\xc3\\xa9gal\\0\"\n\t\"Somalia\\0\"\n\t\"Soomaaliya\\0\"\n\t\"SOS\\0\"\n\t\"Somali Shilling\\0\"\n\t\"Shilin soomaali\\0\"\n\t\"El Salvador\\0\"\n\t\"SYR\\0\"\n\t\"Syria\\0\"\n\t\"\\xd8\\xb3\\xd9\\x88\\xd8\\xb1\\xd9\\x8a\\xd8\\xa7\\0\"\n\t\"SYP\\0\"\n\t\"Syrian Pound\\0\"\n\t\"\\xd9\\x84\\xd9\\x8a\\xd8\\xb1\\xd8\\xa9 \\xd8\\xb3\\xd9\\x88\\xd8\\xb1\\xd9\\x8a\\xd8\\xa9\\0\"\n\t\"Thailand\\0\"\n\t\"Thai Baht\\0\"\n\t\"\\xe0\\xb8\\x9a\\xe0\\xb8\\xb2\\xe0\\xb8\\x97\\xe0\\xb9\\x84\\xe0\\xb8\\x97\\xe0\\xb8\\xa2\\0\"\n\t\"TJK\\0\"\n\t\"Tajikistan\\0\"\n\t\"\\xd0\\xa2\\xd0\\xbe\\xd2\\xb7\\xd0\\xb8\\xd0\\xba\\xd0\\xb8\\xd1\\x81\\xd1\\x82\\xd0\\xbe\\xd0\\xbd\\0\"\n\t\"TJS\\0\"\n\t\"Tajikistani Somoni\\0\"\n\t\"\\xd0\\xa1\\xd0\\xbe\\xd0\\xbc\\xd0\\xbe\\xd0\\xbd\\xd3\\xa3\\0\"\n\t\"TKM\\0\"\n\t\"Turkmenistan\\0\"\n\t\"T\\xc3\\xbcrkmenistan\\0\"\n\t\"Turkmenistani Manat\\0\"\n\t\"T\\xc3\\xbcrkmen manaty\\0\"\n\t\"TUN\\0\"\n\t\"Tunisia\\0\"\n\t\"\\xd8\\xaa\\xd9\\x88\\xd9\\x86\\xd8\\xb3\\0\"\n\t\"TND\\0\"\n\t\"Tunisian Dinar\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd8\\xb1 \\xd8\\xaa\\xd9\\x88\\xd9\\x86\\xd8\\xb3\\xd9\\x8a\\0\"\n\t\"TUR\\0\"\n\t\"Turkey\\0\"\n\t\"T\\xc3\\xbcrkiye\\0\"\n\t\"TRY\\0\"\n\t\"Turkish Lira\\0\"\n\t\"T\\xc3\\xbcrk Liras\\xc4\\xb1\\0\"\n\t\"TTO\\0\"\n\t\"Trinidad & Tobago\\0\"\n\t\"TTD\\0\"\n\t\"Trinidad & Tobago Dollar\\0\"\n\t\"TWN\\0\"\n\t\"Taiwan\\0\"\n\t\"\\xe5\\x8f\\xb0\\xe6\\xb9\\xbe\\0\"\n\t\"TWD\\0\"\n\t\"New Taiwan Dollar\\0\"\n\t\"\\xe6\\x96\\xb0\\xe5\\x8f\\xb0\\xe5\\xb9\\xa3\\0\"\n\t\"Ukraine\\0\"\n\t\"\\xd0\\xa3\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x97\\xd0\\xbd\\xd0\\xb0\\0\"\n\t\"UAH\\0\"\n\t\"Ukrainian Hryvnia\\0\"\n\t\"\\xd1\\x83\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x97\\xd0\\xbd\\xd1\\x81\\xd1\\x8c\\xd0\\xba\\xd0\\xb0 \\xd0\\xb3\\xd1\\x80\\xd0\\xb8\\xd0\\xb2\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"USA\\0\"\n\t\"United States\\0\"\n\t\"URY\\0\"\n\t\"Uruguay\\0\"\n\t\"UYU\\0\"\n\t\"Uruguayan Peso\\0\"\n\t\"peso uruguayo\\0\"\n\t\"Uzbekistan\\0\"\n\t\"O\\xca\\xbbzbekiston\\0\"\n\t\"UZS\\0\"\n\t\"Uzbekistani Som\\0\"\n\t\"O\\xe2\\x80\\x98zbekiston so\\xe2\\x80\\x98mi\\0\"\n\t\"VEN\\0\"\n\t\"Venezuela\\0\"\n\t\"VEF\\0\"\n\t\"Venezuelan Bol\\xc3\\xadvar\\0\"\n\t\"bol\\xc3\\xadvar venezolano\\0\"\n\t\"VNM\\0\"\n\t\"Vietnam\\0\"\n\t\"Vi\\xe1\\xbb\\x87t Nam\\0\"\n\t\"VND\\0\"\n\t\"Vietnamese Dong\\0\"\n\t\"\\xc4\\x90\\xe1\\xbb\\x93ng Vi\\xe1\\xbb\\x87t Nam\\0\"\n\t\"YEM\\0\"\n\t\"Yemen\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd9\\x8a\\xd9\\x85\\xd9\\x86\\0\"\n\t\"YER\\0\"\n\t\"Yemeni Rial\\0\"\n\t\"\\xd8\\xb1\\xd9\\x8a\\xd8\\xa7\\xd9\\x84 \\xd9\\x8a\\xd9\\x85\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"ZAF\\0\"\n\t\"South Africa\\0\"\n\t\"ZAR\\0\"\n\t\"South African Rand\\0\"\n\t\"ZWE\\0\"\n\t\"Zimbabwe\\0\"\n};\n\n\nstatic const char patterns [] = {\n\t\"\\0\"\n\t\"dd MMMM\\0\"\n\t\"dd/MM/yy\\0\"\n\t\"dd/MM/yyyy\\0\"\n\t\"dd/MMMM/yyyy\\0\"\n\t\"dddd, dd MMMM, yyyy\\0\"\n\t\"hh:mm tt\\0\"\n\t\"HH:mm\\0\"\n\t\"hh:mm:ss tt\\0\"\n\t\"HH:mm:ss\\0\"\n\t\"MMMM, yyyy\\0\"\n\t\"d MMMM\\0\"\n\t\"d.M.yyyy '\\xd0\\xb3.'\\0\"\n\t\"dd.M.yyyy '\\xd0\\xb3.'\\0\"\n\t\"d.MM.yyyy '\\xd0\\xb3.'\\0\"\n\t\"dd.MM.yyyy '\\xd0\\xb3.'\\0\"\n\t\"dd MMMM yyyy '\\xd0\\xb3.'\\0\"\n\t\"d MMMM yyyy '\\xd0\\xb3.'\\0\"\n\t\"dddd, dd MMMM yyyy '\\xd0\\xb3.'\\0\"\n\t\"dddd, d MMMM yyyy '\\xd0\\xb3.'\\0\"\n\t\"H:mm\\0\"\n\t\"H:mm:ss\\0\"\n\t\"MMMM yyyy '\\xd0\\xb3.'\\0\"\n\t\"d/M/yyyy\\0\"\n\t\"d MMM yyyy\\0\"\n\t\"dddd, d MMMM 'de' yyyy\\0\"\n\t\"d MMMM 'de' yyyy\\0\"\n\t\"MMMM 'de' yyyy\\0\"\n\t\"M\\xe6\\x9c\\x88\\x64\\xe6\\x97\\xa5\\0\"\n\t\"yyyy/M/d\\0\"\n\t\"yyyy-M-d\\0\"\n\t\"yyyy.M.d\\0\"\n\t\"yyyy/MM/dd\\0\"\n\t\"yyyy-MM-dd\\0\"\n\t\"yyyy.MM.dd\\0\"\n\t\"yy/M/d\\0\"\n\t\"yy-M-d\\0\"\n\t\"yy.M.d\\0\"\n\t\"yy/MM/dd\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'M'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5'\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'M'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5', dddd\\0\"\n\t\"dddd, yyyy'\\xe5\\xb9\\xb4'M'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5'\\0\"\n\t\"yyyy\\xe5\\xb9\\xb4MMMd\\xe6\\x97\\xa5\\0\"\n\t\"yyyy\\xe5\\xb9\\xb4MMMd\\xe6\\x97\\xa5, dddd\\0\"\n\t\"tt h:mm\\0\"\n\t\"tt hh:mm\\0\"\n\t\"tt h:mm:ss\\0\"\n\t\"tt hh:mm:ss\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'M'\\xe6\\x9c\\x88'\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMM\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMMM\\0\"\n\t\"yyyy.M\\0\"\n\t\"d. MMMM\\0\"\n\t\"dd.MM.yyyy\\0\"\n\t\"d. M. yyyy\\0\"\n\t\"dddd d. MMMM yyyy\\0\"\n\t\"d. MMMM yyyy\\0\"\n\t\"MMMM yyyy\\0\"\n\t\"dd-MM-yyyy\\0\"\n\t\"dd-MM-yy\\0\"\n\t\"yyyy MM dd\\0\"\n\t\"dd.MM.yy\\0\"\n\t\"dd. MMM. yyyy\\0\"\n\t\"dddd, d. MMMM yyyy\\0\"\n\t\"d. MMM. yyyy\\0\"\n\t\"HH:mm' Uhr'\\0\"\n\t\"HH:mm:ss' Uhr'\\0\"\n\t\"d/M/yy\\0\"\n\t\"dd/MMM/yyyy\\0\"\n\t\"dddd, d MMMM yyyy\\0\"\n\t\"d MMMM yyyy\\0\"\n\t\"h:mm tt\\0\"\n\t\"h:mm:ss tt\\0\"\n\t\"MMMM d\\0\"\n\t\"M/d/yyyy\\0\"\n\t\"M/d/yy\\0\"\n\t\"MM/dd/yy\\0\"\n\t\"MM/dd/yyyy\\0\"\n\t\"dd-MMM-yy\\0\"\n\t\"dddd, MMMM d, yyyy\\0\"\n\t\"MMMM d, yyyy\\0\"\n\t\"dddd, d MMMM, yyyy\\0\"\n\t\"d MMMM, yyyy\\0\"\n\t\"d 'de' MMMM\\0\"\n\t\"d/MM/yy\\0\"\n\t\"d-M-yy\\0\"\n\t\"dddd, d' de 'MMMM' de 'yyyy\\0\"\n\t\"dddd d' de 'MMMM' de 'yyyy\\0\"\n\t\"d' de 'MMMM' de 'yyyy\\0\"\n\t\"H.mm\\0\"\n\t\"HH.mm\\0\"\n\t\"HH'H'mm\\0\"\n\t\"H.mm.ss\\0\"\n\t\"HH.mm.ss\\0\"\n\t\"HH'H'mm.ss\\0\"\n\t\"MMMM' de 'yyyy\\0\"\n\t\"d.M.yyyy\\0\"\n\t\"dddd d MMMM yyyy\\0\"\n\t\"d MMM yy\\0\"\n\t\"HH' h 'mm\\0\"\n\t\"HH'h'mm\\0\"\n\t\"dd MMMM yyyy\\0\"\n\t\"dd-MMMM-yyyy\\0\"\n\t\"dd '\\xd7\\x91'MMMM yyyy\\0\"\n\t\"dd MMM yy\\0\"\n\t\"dddd dd MMMM yyyy\\0\"\n\t\"dddd dd '\\xd7\\x91'MMMM yyyy\\0\"\n\t\"ddd dd '\\xd7\\x91'MMMM yyyy\\0\"\n\t\"MMMM d.\\0\"\n\t\"yyyy. MM. dd.\\0\"\n\t\"yyyy. MMM d.\\0\"\n\t\"yyyy. MMMM d., dddd\\0\"\n\t\"yyyy. MMMM d.\\0\"\n\t\"yyyy. MMMM\\0\"\n\t\"d. MMM yyyy\\0\"\n\t\"dd.M.yy\\0\"\n\t\"d-MMM-yy\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MM'\\xe6\\x9c\\x88'dd'\\xe6\\x97\\xa5'\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'M'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5 'dddd\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MM'\\xe6\\x9c\\x88'dd'\\xe6\\x97\\xa5 'dddd\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMM'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5'\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMM'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5 'dddd\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMMMd'\\xe6\\x97\\xa5'\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMMMd'\\xe6\\x97\\xa5 'dddd\\0\"\n\t\"yyyy'\\xe5\\xb9\\xb4'MMM'\\xe6\\x9c\\x88'\\0\"\n\t\"M\\xec\\x9b\\x94 d\\xec\\x9d\\xbc\\0\"\n\t\"yy-MM-dd\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' M'\\xec\\x9b\\x94' d'\\xec\\x9d\\xbc' dddd\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' M'\\xec\\x9b\\x94' d'\\xec\\x9d\\xbc'\\0\"\n\t\"yy'\\xeb\\x85\\x84' M'\\xec\\x9b\\x94' d'\\xec\\x9d\\xbc' dddd\\0\"\n\t\"yy'\\xeb\\x85\\x84' M'\\xec\\x9b\\x94' d'\\xec\\x9d\\xbc'\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' MM'\\xec\\x9b\\x94' dd'\\xec\\x9d\\xbc' dddd\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' MM'\\xec\\x9b\\x94' dd'\\xec\\x9d\\xbc'\\0\"\n\t\"yyyy'\\xeb\\x85\\x84 'MMM'\\xec\\x9b\\x94 'd'\\xec\\x9d\\xbc 'dddd\\0\"\n\t\"yyyy'\\xeb\\x85\\x84 'MMM'\\xec\\x9b\\x94 'd'\\xec\\x9d\\xbc'\\0\"\n\t\"yyyy'\\xeb\\x85\\x84 'MMMM d'\\xec\\x9d\\xbc 'dddd\\0\"\n\t\"yyyy'\\xeb\\x85\\x84 'MMMM d'\\xec\\x9d\\xbc'\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' M'\\xec\\x9b\\x94'\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' MMM'\\xec\\x9b\\x94'\\0\"\n\t\"yyyy'\\xeb\\x85\\x84' MMMM\\0\"\n\t\"d-M-yyyy\\0\"\n\t\"dd.MMM.yyyy\\0\"\n\t\"HH.mm' uur'\\0\"\n\t\"HH:mm' uur'\\0\"\n\t\"HH.mm.ss' uur'\\0\"\n\t\"HH:mm:ss' uur'\\0\"\n\t\"d.MMMM.\\0\"\n\t\"d.M.yy\\0\"\n\t\"dddd, 'ils' d 'da' MMMM yyyy\\0\"\n\t\"d 'da' MMMM yyyy\\0\"\n\t\"d.M.yyyy.\\0\"\n\t\"d.M.yy.\\0\"\n\t\"d. M. yyyy.\\0\"\n\t\"dd.MM.yyyy.\\0\"\n\t\"d. M. yy.\\0\"\n\t\"dd.MM.yy.\\0\"\n\t\"dd. MM. yy.\\0\"\n\t\"d. MMMM yyyy.\\0\"\n\t\"dd. MMMM yyyy.\\0\"\n\t\"dddd, d. MMMM yyyy.\\0\"\n\t\"'den 'd MMMM\\0\"\n\t\"'den 'd MMMM yyyy\\0\"\n\t\"dddd' den 'd MMMM yyyy\\0\"\n\t\"'kl 'H:mm\\0\"\n\t\"'kl 'H:mm:ss\\0\"\n\t\"dd MMM yyyy\\0\"\n\t\"ddd d MMMM yyyy\\0\"\n\t\"'\\xe0\\xb8\\xa7\\xe0\\xb8\\xb1\\xe0\\xb8\\x99'dddd'\\xe0\\xb8\\x97\\xe0\\xb8\\xb5\\xe0\\xb9\\x88' d MMMM gg yyyy\\0\"\n\t\"d.MM.yyyy\\0\"\n\t\"d MMMM yyyy dddd\\0\"\n\t\"dd MMMM, yyyy\\0\"\n\t\"dddd, dd MMMM yyyy\\0\"\n\t\"d MMMM yyyy' \\xd1\\x80.'\\0\"\n\t\"MMMM yyyy' \\xd1\\x80.'\\0\"\n\t\"MMMM yyyy \\xd0\\xb3.\\0\"\n\t\"d. MM. yyyy\\0\"\n\t\"dddd, dd. MMMM yyyy\\0\"\n\t\"dd. MMMM yyyy\\0\"\n\t\"H:mm.ss\\0\"\n\t\"yyyy. 'gada' d. MMM\\0\"\n\t\"dddd, yyyy. 'gada' d. MMMM\\0\"\n\t\"yyyy. 'gada' d. MMMM\\0\"\n\t\"yyyy. 'g'. MMMM\\0\"\n\t\"yyyy 'm'. MMMM d 'd'., dddd\\0\"\n\t\"yyyy 'm'. MMMM d 'd'.\\0\"\n\t\"yyyy MMMM\\0\"\n\t\"d MMMM yyyy' \\xd1\\x81.'\\0\"\n\t\"dd MMMM yyyy' \\xd1\\x81.'\\0\"\n\t\"d/MM/yyyy\\0\"\n\t\"d/MMM/yyyy\\0\"\n\t\"d-MMM-yyyy\\0\"\n\t\"dd-MMM-yyyy\\0\"\n\t\"ddd, d-MMMM-yyyy\\0\"\n\t\"ddd, dd-MMMM-yyyy\\0\"\n\t\"d MMMM yyyy, dddd\\0\"\n\t\"yyyy MMM d\\0\"\n\t\"yyyy('e')'ko' MMMM d, dddd\\0\"\n\t\"yyyy('e')'ko' MMMM d\\0\"\n\t\"yyyy('e')'ko' MMMM\\0\"\n\t\"H:mm 'hod\\xc5\\xba'.\\0\"\n\t\"dd.M.yyyy\\0\"\n\t\"MMMM yyyy '\\xd0\\xb3'.\\0\"\n\t\"yyyy MMMM d, dddd\\0\"\n\t\"yyyy MMMM d\\0\"\n\t\"MMM d, yyyy\\0\"\n\t\"d MMM, yyyy\\0\"\n\t\"d 'ta'\\xe2\\x80\\x99 MMMM\\0\"\n\t\"dddd, d 'ta'\\xe2\\x80\\x99 MMMM yyyy\\0\"\n\t\"d 'ta'\\xe2\\x80\\x99 MMMM yyyy\\0\"\n\t\"MMMM 'ta'\\xe2\\x80\\x99 yyyy\\0\"\n\t\"yyyy, dd-MMM\\0\"\n\t\"d-MMMM\\0\"\n\t\"d-MMM yy\\0\"\n\t\"dd-MMMM yyyy'-\\xd0\\xb6.'\\0\"\n\t\"MMMM yyyy'-\\xd0\\xb6.'\\0\"\n\t\"dd.MM.yy '\\xc3\\xbd.'\\0\"\n\t\"yyyy'-nji \\xc3\\xbdyly\\xc5\\x88 'd'-nji 'MMMM\\0\"\n\t\"yyyy '\\xc3\\xbd.' MMMM\\0\"\n\t\"dddd, yyyy MMMM dd\\0\"\n\t\"dd MMMM yyyy' \\xd0\\xb5\\xd0\\xbb'\\0\"\n\t\"MMMM yyyy' \\xd0\\xb5\\xd0\\xbb'\\0\"\n\t\"tt hh.mm\\0\"\n\t\"tt h.mm\\0\"\n\t\"tt hh.mm.ss\\0\"\n\t\"tt h.mm.ss\\0\"\n\t\"dd MMMM yyyy dddd\\0\"\n\t\"MMMM dd\\0\"\n\t\"yyyy,MMMM dd, dddd\\0\"\n\t\"MMMM,yy\\0\"\n\t\"MMMM,yyyy\\0\"\n\t\"dddd, yyyy '\\xd0\\xbe\\xd0\\xbd\\xd1\\x8b' MM '\\xd1\\x81\\xd0\\xb0\\xd1\\x80\\xd1\\x8b\\xd0\\xbd' d\\0\"\n\t\"yyyy '\\xd0\\xbe\\xd0\\xbd\\xd1\\x8b' MM '\\xd1\\x81\\xd0\\xb0\\xd1\\x80\\xd1\\x8b\\xd0\\xbd' d\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8bM\\xe0\\xbd\\x9a\\xe0\\xbd\\xba\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\x64\\0\"\n\t\"yyyy'\\xe0\\xbd\\xa3\\xe0\\xbd\\xbc\\xe0\\xbd\\xa0\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3' M'\\xe0\\xbd\\x9a\\xe0\\xbd\\xba\\xe0\\xbd\\xa6' d\\0\"\n\t\"yyyy'\\xe0\\xbd\\xa3\\xe0\\xbd\\xbc\\xe0\\xbd\\xa0\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3' M'\\xe0\\xbd\\x9a\\xe0\\xbd\\xba\\xe0\\xbd\\xa6' d dddd\\0\"\n\t\"yyyy\\xe0\\xbd\\xa3\\xe0\\xbd\\xbc\\xe0\\xbd\\xa0\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3 MMM d\\0\"\n\t\"yyyy\\xe0\\xbd\\xa3\\xe0\\xbd\\xbc\\xe0\\xbd\\xa0\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3 MMM d dddd\\0\"\n\t\"yyyy'\\xe0\\xbd\\xa3\\xe0\\xbd\\xbc\\xe0\\xbd\\xa0\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b' M\\0\"\n\t\"'\\xe1\\x9e\\x81\\xe1\\x9f\\x82' MM '\\xe1\\x9e\\x86\\xe1\\x9f\\x92\\xe1\\x9e\\x93\\xe1\\x9e\\xb6\\xe1\\x9f\\x86' yyyy\\0\"\n\t\"dddd \\xe0\\xba\\x97\\xe0\\xba\\xb5 d MMMM gg yyyy\\0\"\n\t\"dddd\\xe1\\x81\\x8a dd MMMM yyyy\\0\"\n\t\"dddd, MMMM dd,yyyy\\0\"\n\t\"MMMM dd,yyyy\\0\"\n\t\"dddd, MMMM dd, yyyy\\0\"\n\t\"MMMM dd, yyyy\\0\"\n\t\"dd. MMMM\\0\"\n\t\"dd. MMMMyyyy\\0\"\n\t\"dddd,' den 'd. MMMM yyyy\\0\"\n\t\"dddd,' den 'dd. MMMM yyyy\\0\"\n\t\"H.mm' Auer'\\0\"\n\t\"H:mm:ss' Auer'\\0\"\n\t\"HH:mm:ss' Auer'\\0\"\n\t\"MMMM d'.-at'\\0\"\n\t\"MMMM d'.-at, 'yyyy\\0\"\n\t\"dddd\\xe1\\x8d\\xa1 dd MMMM \\xe1\\x88\\x98\\xe1\\x8b\\x93\\xe1\\x88\\x8d\\xe1\\x89\\xb2 yyyy gg\\0\"\n\t\"M\\xe2\\x80\\x99 \\xea\\x86\\xaa\\xe2\\x80\\x99\\x64\\xe2\\x80\\x99 \\xea\\x91\\x8d\\xe2\\x80\\x99\\0\"\n\t\"yyyy'\\xea\\x88\\x8e' M'\\xea\\x86\\xaa' d'\\xea\\x91\\x8d'\\0\"\n\t\"dddd, yyyy'\\xea\\x88\\x8e' M'\\xea\\x86\\xaa' d'\\xea\\x91\\x8d'\\0\"\n\t\"yyyy'\\xea\\x88\\x8e' M'\\xea\\x86\\xaa' d'\\xea\\x91\\x8d', dddd\\0\"\n\t\"yyyy\\xea\\x88\\x8e MMM d\\xea\\x91\\x8d\\0\"\n\t\"dddd, yyyy\\xea\\x88\\x8e MMM d\\xea\\x91\\x8d\\0\"\n\t\"yyyy'\\xea\\x88\\x8e' M'\\xea\\x86\\xaa'\\0\"\n\t\"yyyy-'\\xd9\\x8a\\xd9\\x89\\xd9\\x84' d-MMMM\\0\"\n\t\"yyyy-'\\xd9\\x8a\\xd9\\x89\\xd9\\x84' d-MMMM dddd\\0\"\n\t\"yyyy-'\\xd9\\x8a\\xd9\\x89\\xd9\\x84\\xd9\\x89' MMM'\\xd9\\x86\\xd9\\x89\\xda\\xad' d'-\\xd9\\x83\\xdb\\x88\\xd9\\x86\\xd9\\x89'\\0\"\n\t\"yyyy-'\\xd9\\x8a\\xd9\\x89\\xd9\\x84\\xd9\\x89' MMM'\\xd9\\x86\\xd9\\x89\\xda\\xad' d'-\\xd9\\x83\\xdb\\x88\\xd9\\x86\\xd9\\x89' dddd\\0\"\n\t\"yyyy-M-d dddd\\0\"\n\t\"yyyy-'\\xd9\\x8a\\xd9\\x89\\xd9\\x84\\xd9\\x89' MMMM\\0\"\n\t\"MMMM d \\xd0\\xba\\xd2\\xaf\\xd0\\xbd\\xd1\\x8d\\0\"\n\t\"yyyy MM d\\0\"\n\t\"dd yyyy MM d\\0\"\n\t\"dddd, yyyy '\\xd1\\x81.' MMMM d '\\xd0\\xba\\xd2\\xaf\\xd0\\xbd\\xd1\\x8d'\\0\"\n\t\"yyyy '\\xd1\\x81.' MMMM d '\\xd0\\xba\\xd2\\xaf\\xd0\\xbd\\xd1\\x8d'\\0\"\n\t\"dddd, MMMM d '\\xd0\\xba\\xd2\\xaf\\xd0\\xbd\\xd1\\x8d' yyyy '\\xd1\\x81.'\\0\"\n\t\"yyyy '\\xd1\\x81.' MMMM\\0\"\n\t\"d'mh' MMMM\\0\"\n\t\"dddd, d'mh' MMMM yyyy\\0\"\n\t\"d'mh' MMMM yyyy\\0\"\n\t\"dddd yyyy\\xe5\\xb9\\xb4MMMd\\xe6\\x97\\xa5\\0\"\n\t\"dddd\\xe1\\x8d\\xa3 dd MMMM \\xe1\\x88\\x98\\xe1\\x8b\\x93\\xe1\\x88\\x8d\\xe1\\x89\\xb2 yyyy gg\\0\"\n\t\"dd.MMMM.\\0\"\n\t\"dd.MMMM\\0\"\n\t\"MMMM.yyyy\\0\"\n\t\"H.mm' u.'\\0\"\n\t\"yy.MM.dd\\0\"\n\t\"d MMM yyyy '\\xd0\\xb3'.\\0\"\n\t\"dddd, d MMMM yyyy '\\xd0\\xb3'.\\0\"\n\t\"d MMMM yyyy '\\xd0\\xb3'.\\0\"\n\t\"d. M. yy\\0\"\n\t\"H:mm' g\\xc3\\xb3\\xc5\\xba.'\\0\"\n\t\"'zeger 'H:mm\\0\"\n\t\"H:mm:ss' g\\xc3\\xb3\\xc5\\xba.'\\0\"\n\t\"'zeger 'H:mm:ss\\0\"\n\t\"MMMM d'. b.'\\0\"\n\t\"dddd, MMMM d'. b. 'yyyy\\0\"\n\t\"MMMM d'. b. 'yyyy\\0\"\n\t\"h.mm tt\\0\"\n\t\"h.mm.ss tt\\0\"\n\t\"yy MM dd\\0\"\n\t\"dddd', 'MMMM d'. b. 'yyyy\\0\"\n\t\"M/dd/yy\\0\"\n\t\"MMMM-dd-yy\\0\"\n\t\"dd-MMMM\\0\"\n\t\"dddd, d 'de' MMMM 'de' yyyy\\0\"\n\t\"d 'de' MMMM 'de' yyyy\\0\"\n\t\"d. MMM yyyy.\\0\"\n\t\"MMMM yyyy.\\0\"\n\t\"dddd yyyy'\\xe5\\xb9\\xb4'M'\\xe6\\x9c\\x88'd'\\xe6\\x97\\xa5'\\0\"\n\t\"dddd yyyy MM dd\\0\"\n\t\"d/MMMM\\0\"\n\t\"MMMM/yyyy\\0\"\n\t\"dd. MMM. yyyy.\\0\"\n\t\"dddd, dd. MMMM yyyy.\\0\"\n\t\"MMMM/dd\\0\"\n\t\"dd. MM. yy\\0\"\n\t\"MMMM d'. p. '\\0\"\n\t\"MMMM d'. p. 'yyyy\\0\"\n\t\"MMMM-yyyy\\0\"\n\t\"dd MMM,yyyy\\0\"\n\t\"yyyy-MM-dd.\\0\"\n\t\"dddd dd 'de' MMMM 'de' yyyy\\0\"\n\t\"dd 'de' MMMM 'de' yyyy\\0\"\n};\n\n\nstatic const char datetime_strings [] = {\n\t\"\\0\"\n\t\"\\xd9\\x85\\xd8\\xad\\xd8\\xb1\\xd9\\x85\\0\"\n\t\"\\xd8\\xb5\\xd9\\x81\\xd8\\xb1\\0\"\n\t\"\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xb9 \\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd9\\x88\\xd9\\x84\\0\"\n\t\"\\xd8\\xb1\\xd8\\xa8\\xd9\\x8a\\xd8\\xb9 \\xd8\\xa7\\xd9\\x84\\xd8\\xa2\\xd8\\xae\\xd8\\xb1\\0\"\n\t\"\\xd8\\xac\\xd9\\x85\\xd8\\xa7\\xd8\\xaf\\xd9\\x89 \\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd9\\x88\\xd9\\x84\\xd9\\x89\\0\"\n\t\"\\xd8\\xac\\xd9\\x85\\xd8\\xa7\\xd8\\xaf\\xd9\\x89 \\xd8\\xa7\\xd9\\x84\\xd8\\xa2\\xd8\\xae\\xd8\\xb1\\xd8\\xa9\\0\"\n\t\"\\xd8\\xb1\\xd8\\xac\\xd8\\xa8\\0\"\n\t\"\\xd8\\xb4\\xd8\\xb9\\xd8\\xa8\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"\\xd8\\xb1\\xd9\\x85\\xd8\\xb6\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"\\xd8\\xb4\\xd9\\x88\\xd8\\xa7\\xd9\\x84\\0\"\n\t\"\\xd8\\xb0\\xd9\\x88 \\xd8\\xa7\\xd9\\x84\\xd9\\x82\\xd8\\xb9\\xd8\\xaf\\xd8\\xa9\\0\"\n\t\"\\xd8\\xb0\\xd9\\x88 \\xd8\\xa7\\xd9\\x84\\xd8\\xad\\xd8\\xac\\xd8\\xa9\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd0\\xbb\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd0\\xbb\\xd0\\xbd\\xd0\\xb8\\xd0\\xba\\0\"\n\t\"\\xd0\\xb2\\xd1\\x82\\xd0\\xbe\\xd1\\x80\\xd0\\xbd\\xd0\\xb8\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd1\\x8f\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82\\xd0\\xb2\\xd1\\x8a\\xd1\\x80\\xd1\\x82\\xd1\\x8a\\xd0\\xba\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb5\\xd1\\x82\\xd1\\x8a\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd1\\x8a\\xd0\\xb1\\xd0\\xbe\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb4\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbd\\0\"\n\t\"\\xd0\\xb2\\xd1\\x82\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\0\"\n\t\"\\xd1\\x87\\xd1\\x82\\0\"\n\t\"\\xd0\\xbf\\xd1\\x82\\0\"\n\t\"\\xd1\\x81\\xd0\\xb1\\0\"\n\t\"\\xd0\\xbd\\0\"\n\t\"\\xd0\\xbf\\0\"\n\t\"\\xd0\\xb2\\0\"\n\t\"\\xd1\\x81\\0\"\n\t\"\\xd1\\x87\\0\"\n\t\"\\xd1\\x8f\\xd0\\xbd\\xd1\\x83\\xd0\\xb0\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2\\xd1\\x80\\xd1\\x83\\xd0\\xb0\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\xd1\\x82\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbf\\xd1\\x80\\xd0\\xb8\\xd0\\xbb\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd0\\xb9\\0\"\n\t\"\\xd1\\x8e\\xd0\\xbd\\xd0\\xb8\\0\"\n\t\"\\xd1\\x8e\\xd0\\xbb\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb0\\xd0\\xb2\\xd0\\xb3\\xd1\\x83\\xd1\\x81\\xd1\\x82\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbf\\xd1\\x82\\xd0\\xb5\\xd0\\xbc\\xd0\\xb2\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\xd0\\xbe\\xd0\\xbc\\xd0\\xb2\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd0\\xb5\\xd0\\xbc\\xd0\\xb2\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xba\\xd0\\xb5\\xd0\\xbc\\xd0\\xb2\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd1\\x8f\\xd0\\xbd\\xd1\\x83\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbf\\xd1\\x80\\0\"\n\t\"\\xd0\\xb0\\xd0\\xb2\\xd0\\xb3\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbf\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd0\\xb5\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xba\\0\"\n\t\"diumenge\\0\"\n\t\"dilluns\\0\"\n\t\"dimarts\\0\"\n\t\"dimecres\\0\"\n\t\"dijous\\0\"\n\t\"divendres\\0\"\n\t\"dissabte\\0\"\n\t\"dg.\\0\"\n\t\"dl.\\0\"\n\t\"dt.\\0\"\n\t\"dc.\\0\"\n\t\"dj.\\0\"\n\t\"dv.\\0\"\n\t\"ds.\\0\"\n\t\"dg\\0\"\n\t\"dl\\0\"\n\t\"dt\\0\"\n\t\"dc\\0\"\n\t\"dj\\0\"\n\t\"dv\\0\"\n\t\"ds\\0\"\n\t\"gener\\0\"\n\t\"febrer\\0\"\n\t\"mar\\xc3\\xa7\\0\"\n\t\"abril\\0\"\n\t\"maig\\0\"\n\t\"juny\\0\"\n\t\"juliol\\0\"\n\t\"agost\\0\"\n\t\"setembre\\0\"\n\t\"octubre\\0\"\n\t\"novembre\\0\"\n\t\"desembre\\0\"\n\t\"de gener\\0\"\n\t\"de febrer\\0\"\n\t\"de mar\\xc3\\xa7\\0\"\n\t\"d\\xe2\\x80\\x99\\x61\\x62ril\\0\"\n\t\"de maig\\0\"\n\t\"de juny\\0\"\n\t\"de juliol\\0\"\n\t\"d\\xe2\\x80\\x99\\x61gost\\0\"\n\t\"de setembre\\0\"\n\t\"d\\xe2\\x80\\x99octubre\\0\"\n\t\"de novembre\\0\"\n\t\"de desembre\\0\"\n\t\"gen.\\0\"\n\t\"febr.\\0\"\n\t\"abr.\\0\"\n\t\"jul.\\0\"\n\t\"ag.\\0\"\n\t\"set.\\0\"\n\t\"oct.\\0\"\n\t\"nov.\\0\"\n\t\"des.\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe6\\x97\\xa5\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xb8\\x80\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x8c\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xb8\\x89\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe5\\x9b\\x9b\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x94\\0\"\n\t\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe5\\x85\\xad\\0\"\n\t\"\\xe5\\x91\\xa8\\xe6\\x97\\xa5\\0\"\n\t\"\\xe5\\x91\\xa8\\xe4\\xb8\\x80\\0\"\n\t\"\\xe5\\x91\\xa8\\xe4\\xba\\x8c\\0\"\n\t\"\\xe5\\x91\\xa8\\xe4\\xb8\\x89\\0\"\n\t\"\\xe5\\x91\\xa8\\xe5\\x9b\\x9b\\0\"\n\t\"\\xe5\\x91\\xa8\\xe4\\xba\\x94\\0\"\n\t\"\\xe5\\x91\\xa8\\xe5\\x85\\xad\\0\"\n\t\"\\xe6\\x97\\xa5\\0\"\n\t\"\\xe4\\xb8\\x80\\0\"\n\t\"\\xe4\\xba\\x8c\\0\"\n\t\"\\xe4\\xb8\\x89\\0\"\n\t\"\\xe5\\x9b\\x9b\\0\"\n\t\"\\xe4\\xba\\x94\\0\"\n\t\"\\xe5\\x85\\xad\\0\"\n\t\"\\xe4\\xb8\\x80\\xe6\\x9c\\x88\\0\"\n\t\"\\xe4\\xba\\x8c\\xe6\\x9c\\x88\\0\"\n\t\"\\xe4\\xb8\\x89\\xe6\\x9c\\x88\\0\"\n\t\"\\xe5\\x9b\\x9b\\xe6\\x9c\\x88\\0\"\n\t\"\\xe4\\xba\\x94\\xe6\\x9c\\x88\\0\"\n\t\"\\xe5\\x85\\xad\\xe6\\x9c\\x88\\0\"\n\t\"\\xe4\\xb8\\x83\\xe6\\x9c\\x88\\0\"\n\t\"\\xe5\\x85\\xab\\xe6\\x9c\\x88\\0\"\n\t\"\\xe4\\xb9\\x9d\\xe6\\x9c\\x88\\0\"\n\t\"\\xe5\\x8d\\x81\\xe6\\x9c\\x88\\0\"\n\t\"\\xe5\\x8d\\x81\\xe4\\xb8\\x80\\xe6\\x9c\\x88\\0\"\n\t\"\\xe5\\x8d\\x81\\xe4\\xba\\x8c\\xe6\\x9c\\x88\\0\"\n\t\"1\\xe6\\x9c\\x88\\0\"\n\t\"2\\xe6\\x9c\\x88\\0\"\n\t\"3\\xe6\\x9c\\x88\\0\"\n\t\"4\\xe6\\x9c\\x88\\0\"\n\t\"5\\xe6\\x9c\\x88\\0\"\n\t\"6\\xe6\\x9c\\x88\\0\"\n\t\"7\\xe6\\x9c\\x88\\0\"\n\t\"8\\xe6\\x9c\\x88\\0\"\n\t\"9\\xe6\\x9c\\x88\\0\"\n\t\"10\\xe6\\x9c\\x88\\0\"\n\t\"11\\xe6\\x9c\\x88\\0\"\n\t\"12\\xe6\\x9c\\x88\\0\"\n\t\"ned\\xc4\\x9ble\\0\"\n\t\"pond\\xc4\\x9bl\\xc3\\xad\\0\"\n\t\"\\xc3\\xbater\\xc3\\xbd\\0\"\n\t\"st\\xc5\\x99\\x65\\x64\\x61\\0\"\n\t\"\\xc4\\x8dtvrtek\\0\"\n\t\"p\\xc3\\xa1tek\\0\"\n\t\"sobota\\0\"\n\t\"ne\\0\"\n\t\"po\\0\"\n\t\"\\xc3\\xbat\\0\"\n\t\"st\\0\"\n\t\"\\xc4\\x8dt\\0\"\n\t\"p\\xc3\\xa1\\0\"\n\t\"so\\0\"\n\t\"N\\0\"\n\t\"P\\0\"\n\t\"\\xc3\\x9a\\0\"\n\t\"S\\0\"\n\t\"\\xc4\\x8c\\0\"\n\t\"leden\\0\"\n\t\"\\xc3\\xbanor\\0\"\n\t\"b\\xc5\\x99\\x65zen\\0\"\n\t\"duben\\0\"\n\t\"kv\\xc4\\x9bten\\0\"\n\t\"\\xc4\\x8d\\x65rven\\0\"\n\t\"\\xc4\\x8d\\x65rvenec\\0\"\n\t\"srpen\\0\"\n\t\"z\\xc3\\xa1\\xc5\\x99\\xc3\\xad\\0\"\n\t\"\\xc5\\x99\\xc3\\xadjen\\0\"\n\t\"listopad\\0\"\n\t\"prosinec\\0\"\n\t\"ledna\\0\"\n\t\"\\xc3\\xbanora\\0\"\n\t\"b\\xc5\\x99\\x65zna\\0\"\n\t\"dubna\\0\"\n\t\"kv\\xc4\\x9btna\\0\"\n\t\"\\xc4\\x8d\\x65rvna\\0\"\n\t\"\\xc4\\x8d\\x65rvence\\0\"\n\t\"srpna\\0\"\n\t\"\\xc5\\x99\\xc3\\xadjna\\0\"\n\t\"listopadu\\0\"\n\t\"prosince\\0\"\n\t\"led\\0\"\n\t\"\\xc3\\xbano\\0\"\n\t\"b\\xc5\\x99\\x65\\0\"\n\t\"dub\\0\"\n\t\"kv\\xc4\\x9b\\0\"\n\t\"\\xc4\\x8dvn\\0\"\n\t\"\\xc4\\x8dvc\\0\"\n\t\"srp\\0\"\n\t\"z\\xc3\\xa1\\xc5\\x99\\0\"\n\t\"\\xc5\\x99\\xc3\\xadj\\0\"\n\t\"lis\\0\"\n\t\"pro\\0\"\n\t\"s\\xc3\\xb8ndag\\0\"\n\t\"mandag\\0\"\n\t\"tirsdag\\0\"\n\t\"onsdag\\0\"\n\t\"torsdag\\0\"\n\t\"fredag\\0\"\n\t\"l\\xc3\\xb8rdag\\0\"\n\t\"s\\xc3\\xb8n\\0\"\n\t\"man\\0\"\n\t\"tir\\0\"\n\t\"ons\\0\"\n\t\"tor\\0\"\n\t\"fre\\0\"\n\t\"l\\xc3\\xb8r\\0\"\n\t\"M\\0\"\n\t\"T\\0\"\n\t\"O\\0\"\n\t\"F\\0\"\n\t\"L\\0\"\n\t\"januar\\0\"\n\t\"februar\\0\"\n\t\"marts\\0\"\n\t\"april\\0\"\n\t\"maj\\0\"\n\t\"juni\\0\"\n\t\"juli\\0\"\n\t\"august\\0\"\n\t\"september\\0\"\n\t\"oktober\\0\"\n\t\"november\\0\"\n\t\"december\\0\"\n\t\"jan.\\0\"\n\t\"feb.\\0\"\n\t\"mar.\\0\"\n\t\"apr.\\0\"\n\t\"jun.\\0\"\n\t\"aug.\\0\"\n\t\"sep.\\0\"\n\t\"okt.\\0\"\n\t\"dec.\\0\"\n\t\"Sonntag\\0\"\n\t\"Montag\\0\"\n\t\"Dienstag\\0\"\n\t\"Mittwoch\\0\"\n\t\"Donnerstag\\0\"\n\t\"Freitag\\0\"\n\t\"Samstag\\0\"\n\t\"So\\0\"\n\t\"Mo\\0\"\n\t\"Di\\0\"\n\t\"Mi\\0\"\n\t\"Do\\0\"\n\t\"Fr\\0\"\n\t\"Sa\\0\"\n\t\"D\\0\"\n\t\"Januar\\0\"\n\t\"Februar\\0\"\n\t\"M\\xc3\\xa4rz\\0\"\n\t\"April\\0\"\n\t\"Mai\\0\"\n\t\"Juni\\0\"\n\t\"Juli\\0\"\n\t\"August\\0\"\n\t\"September\\0\"\n\t\"Oktober\\0\"\n\t\"November\\0\"\n\t\"Dezember\\0\"\n\t\"Jan\\0\"\n\t\"Feb\\0\"\n\t\"M\\xc3\\xa4r\\0\"\n\t\"Apr\\0\"\n\t\"Jun\\0\"\n\t\"Jul\\0\"\n\t\"Aug\\0\"\n\t\"Sep\\0\"\n\t\"Okt\\0\"\n\t\"Nov\\0\"\n\t\"Dez\\0\"\n\t\"\\xce\\x9a\\xcf\\x85\\xcf\\x81\\xce\\xb9\\xce\\xb1\\xce\\xba\\xce\\xae\\0\"\n\t\"\\xce\\x94\\xce\\xb5\\xcf\\x85\\xcf\\x84\\xce\\xad\\xcf\\x81\\xce\\xb1\\0\"\n\t\"\\xce\\xa4\\xcf\\x81\\xce\\xaf\\xcf\\x84\\xce\\xb7\\0\"\n\t\"\\xce\\xa4\\xce\\xb5\\xcf\\x84\\xce\\xac\\xcf\\x81\\xcf\\x84\\xce\\xb7\\0\"\n\t\"\\xce\\xa0\\xce\\xad\\xce\\xbc\\xcf\\x80\\xcf\\x84\\xce\\xb7\\0\"\n\t\"\\xce\\xa0\\xce\\xb1\\xcf\\x81\\xce\\xb1\\xcf\\x83\\xce\\xba\\xce\\xb5\\xcf\\x85\\xce\\xae\\0\"\n\t\"\\xce\\xa3\\xce\\xac\\xce\\xb2\\xce\\xb2\\xce\\xb1\\xcf\\x84\\xce\\xbf\\0\"\n\t\"\\xce\\x9a\\xcf\\x85\\xcf\\x81\\0\"\n\t\"\\xce\\x94\\xce\\xb5\\xcf\\x85\\0\"\n\t\"\\xce\\xa4\\xcf\\x81\\xce\\xaf\\0\"\n\t\"\\xce\\xa4\\xce\\xb5\\xcf\\x84\\0\"\n\t\"\\xce\\xa0\\xce\\xad\\xce\\xbc\\0\"\n\t\"\\xce\\xa0\\xce\\xb1\\xcf\\x81\\0\"\n\t\"\\xce\\xa3\\xce\\xac\\xce\\xb2\\0\"\n\t\"\\xce\\x9a\\0\"\n\t\"\\xce\\x94\\0\"\n\t\"\\xce\\xa4\\0\"\n\t\"\\xce\\xa0\\0\"\n\t\"\\xce\\xa3\\0\"\n\t\"\\xce\\x99\\xce\\xb1\\xce\\xbd\\xce\\xbf\\xcf\\x85\\xce\\xac\\xcf\\x81\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\xa6\\xce\\xb5\\xce\\xb2\\xcf\\x81\\xce\\xbf\\xcf\\x85\\xce\\xac\\xcf\\x81\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x9c\\xce\\xac\\xcf\\x81\\xcf\\x84\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x91\\xcf\\x80\\xcf\\x81\\xce\\xaf\\xce\\xbb\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x9c\\xce\\xac\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x99\\xce\\xbf\\xcf\\x8d\\xce\\xbd\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x99\\xce\\xbf\\xcf\\x8d\\xce\\xbb\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x91\\xcf\\x8d\\xce\\xb3\\xce\\xbf\\xcf\\x85\\xcf\\x83\\xcf\\x84\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\xa3\\xce\\xb5\\xcf\\x80\\xcf\\x84\\xce\\xad\\xce\\xbc\\xce\\xb2\\xcf\\x81\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x9f\\xce\\xba\\xcf\\x84\\xcf\\x8e\\xce\\xb2\\xcf\\x81\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x9d\\xce\\xbf\\xce\\xad\\xce\\xbc\\xce\\xb2\\xcf\\x81\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x94\\xce\\xb5\\xce\\xba\\xce\\xad\\xce\\xbc\\xce\\xb2\\xcf\\x81\\xce\\xb9\\xce\\xbf\\xcf\\x82\\0\"\n\t\"\\xce\\x99\\xce\\xb1\\xce\\xbd\\xce\\xbf\\xcf\\x85\\xce\\xb1\\xcf\\x81\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\xa6\\xce\\xb5\\xce\\xb2\\xcf\\x81\\xce\\xbf\\xcf\\x85\\xce\\xb1\\xcf\\x81\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x9c\\xce\\xb1\\xcf\\x81\\xcf\\x84\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x91\\xcf\\x80\\xcf\\x81\\xce\\xb9\\xce\\xbb\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x9c\\xce\\xb1\\xce\\x90\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x99\\xce\\xbf\\xcf\\x85\\xce\\xbd\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x99\\xce\\xbf\\xcf\\x85\\xce\\xbb\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x91\\xcf\\x85\\xce\\xb3\\xce\\xbf\\xcf\\x8d\\xcf\\x83\\xcf\\x84\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\xa3\\xce\\xb5\\xcf\\x80\\xcf\\x84\\xce\\xb5\\xce\\xbc\\xce\\xb2\\xcf\\x81\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x9f\\xce\\xba\\xcf\\x84\\xcf\\x89\\xce\\xb2\\xcf\\x81\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x9d\\xce\\xbf\\xce\\xb5\\xce\\xbc\\xce\\xb2\\xcf\\x81\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x94\\xce\\xb5\\xce\\xba\\xce\\xb5\\xce\\xbc\\xce\\xb2\\xcf\\x81\\xce\\xaf\\xce\\xbf\\xcf\\x85\\0\"\n\t\"\\xce\\x99\\xce\\xb1\\xce\\xbd\\0\"\n\t\"\\xce\\xa6\\xce\\xb5\\xce\\xb2\\0\"\n\t\"\\xce\\x9c\\xce\\xac\\xcf\\x81\\0\"\n\t\"\\xce\\x91\\xcf\\x80\\xcf\\x81\\0\"\n\t\"\\xce\\x9c\\xce\\xac\\xce\\xb9\\0\"\n\t\"\\xce\\x99\\xce\\xbf\\xcf\\x8d\\xce\\xbd\\0\"\n\t\"\\xce\\x99\\xce\\xbf\\xcf\\x8d\\xce\\xbb\\0\"\n\t\"\\xce\\x91\\xcf\\x8d\\xce\\xb3\\0\"\n\t\"\\xce\\xa3\\xce\\xb5\\xcf\\x80\\0\"\n\t\"\\xce\\x9f\\xce\\xba\\xcf\\x84\\0\"\n\t\"\\xce\\x9d\\xce\\xbf\\xce\\xad\\0\"\n\t\"\\xce\\x94\\xce\\xb5\\xce\\xba\\0\"\n\t\"Sunday\\0\"\n\t\"Monday\\0\"\n\t\"Tuesday\\0\"\n\t\"Wednesday\\0\"\n\t\"Thursday\\0\"\n\t\"Friday\\0\"\n\t\"Saturday\\0\"\n\t\"Sun\\0\"\n\t\"Mon\\0\"\n\t\"Tue\\0\"\n\t\"Wed\\0\"\n\t\"Thu\\0\"\n\t\"Fri\\0\"\n\t\"Sat\\0\"\n\t\"W\\0\"\n\t\"January\\0\"\n\t\"February\\0\"\n\t\"March\\0\"\n\t\"May\\0\"\n\t\"June\\0\"\n\t\"July\\0\"\n\t\"October\\0\"\n\t\"December\\0\"\n\t\"Mar\\0\"\n\t\"Oct\\0\"\n\t\"Dec\\0\"\n\t\"domingo\\0\"\n\t\"lunes\\0\"\n\t\"martes\\0\"\n\t\"mi\\xc3\\xa9rcoles\\0\"\n\t\"jueves\\0\"\n\t\"viernes\\0\"\n\t\"s\\xc3\\xa1\\x62\\x61\\x64o\\0\"\n\t\"dom.\\0\"\n\t\"lun.\\0\"\n\t\"mi\\xc3\\xa9.\\0\"\n\t\"jue.\\0\"\n\t\"vie.\\0\"\n\t\"s\\xc3\\xa1\\x62.\\0\"\n\t\"X\\0\"\n\t\"J\\0\"\n\t\"V\\0\"\n\t\"enero\\0\"\n\t\"febrero\\0\"\n\t\"marzo\\0\"\n\t\"mayo\\0\"\n\t\"junio\\0\"\n\t\"julio\\0\"\n\t\"agosto\\0\"\n\t\"septiembre\\0\"\n\t\"noviembre\\0\"\n\t\"diciembre\\0\"\n\t\"ene.\\0\"\n\t\"may.\\0\"\n\t\"ago.\\0\"\n\t\"sept.\\0\"\n\t\"dic.\\0\"\n\t\"sunnuntaina\\0\"\n\t\"maanantaina\\0\"\n\t\"tiistaina\\0\"\n\t\"keskiviikkona\\0\"\n\t\"torstaina\\0\"\n\t\"perjantaina\\0\"\n\t\"lauantaina\\0\"\n\t\"su\\0\"\n\t\"ma\\0\"\n\t\"ti\\0\"\n\t\"ke\\0\"\n\t\"to\\0\"\n\t\"pe\\0\"\n\t\"la\\0\"\n\t\"K\\0\"\n\t\"tammikuu\\0\"\n\t\"helmikuu\\0\"\n\t\"maaliskuu\\0\"\n\t\"huhtikuu\\0\"\n\t\"toukokuu\\0\"\n\t\"kes\\xc3\\xa4kuu\\0\"\n\t\"hein\\xc3\\xa4kuu\\0\"\n\t\"elokuu\\0\"\n\t\"syyskuu\\0\"\n\t\"lokakuu\\0\"\n\t\"marraskuu\\0\"\n\t\"joulukuu\\0\"\n\t\"tammikuuta\\0\"\n\t\"helmikuuta\\0\"\n\t\"maaliskuuta\\0\"\n\t\"huhtikuuta\\0\"\n\t\"toukokuuta\\0\"\n\t\"kes\\xc3\\xa4kuuta\\0\"\n\t\"hein\\xc3\\xa4kuuta\\0\"\n\t\"elokuuta\\0\"\n\t\"syyskuuta\\0\"\n\t\"lokakuuta\\0\"\n\t\"marraskuuta\\0\"\n\t\"joulukuuta\\0\"\n\t\"tammi\\0\"\n\t\"helmi\\0\"\n\t\"maalis\\0\"\n\t\"huhti\\0\"\n\t\"touko\\0\"\n\t\"kes\\xc3\\xa4\\0\"\n\t\"hein\\xc3\\xa4\\0\"\n\t\"elo\\0\"\n\t\"syys\\0\"\n\t\"loka\\0\"\n\t\"marras\\0\"\n\t\"joulu\\0\"\n\t\"dimanche\\0\"\n\t\"lundi\\0\"\n\t\"mardi\\0\"\n\t\"mercredi\\0\"\n\t\"jeudi\\0\"\n\t\"vendredi\\0\"\n\t\"samedi\\0\"\n\t\"dim.\\0\"\n\t\"mer.\\0\"\n\t\"jeu.\\0\"\n\t\"ven.\\0\"\n\t\"sam.\\0\"\n\t\"janvier\\0\"\n\t\"f\\xc3\\xa9vrier\\0\"\n\t\"mars\\0\"\n\t\"avril\\0\"\n\t\"mai\\0\"\n\t\"juin\\0\"\n\t\"juillet\\0\"\n\t\"ao\\xc3\\xbbt\\0\"\n\t\"septembre\\0\"\n\t\"octobre\\0\"\n\t\"d\\xc3\\xa9\\x63\\x65mbre\\0\"\n\t\"janv.\\0\"\n\t\"f\\xc3\\xa9vr.\\0\"\n\t\"avr.\\0\"\n\t\"juil.\\0\"\n\t\"d\\xc3\\xa9\\x63.\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\xa8\\xd7\\x90\\xd7\\xa9\\xd7\\x95\\xd7\\x9f\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\xa9\\xd7\\xa0\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\xa9\\xd7\\x9c\\xd7\\x99\\xd7\\xa9\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\xa8\\xd7\\x91\\xd7\\x99\\xd7\\xa2\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x97\\xd7\\x9e\\xd7\\x99\\xd7\\xa9\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\xa9\\xd7\\x99\\xd7\\xa9\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\xa9\\xd7\\x91\\xd7\\xaa\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x90\\xd7\\xb3\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x91\\xd7\\xb3\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x92\\xd7\\xb3\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x93\\xd7\\xb3\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x94\\xd7\\xb3\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9d \\xd7\\x95\\xd7\\xb3\\0\"\n\t\"\\xd7\\xa9\\xd7\\x91\\xd7\\xaa\\0\"\n\t\"\\xd7\\x90\\xd7\\xb3\\0\"\n\t\"\\xd7\\x91\\xd7\\xb3\\0\"\n\t\"\\xd7\\x92\\xd7\\xb3\\0\"\n\t\"\\xd7\\x93\\xd7\\xb3\\0\"\n\t\"\\xd7\\x94\\xd7\\xb3\\0\"\n\t\"\\xd7\\x95\\xd7\\xb3\\0\"\n\t\"\\xd7\\xa9\\xd7\\xb3\\0\"\n\t\"\\xd7\\x99\\xd7\\xa0\\xd7\\x95\\xd7\\x90\\xd7\\xa8\\0\"\n\t\"\\xd7\\xa4\\xd7\\x91\\xd7\\xa8\\xd7\\x95\\xd7\\x90\\xd7\\xa8\\0\"\n\t\"\\xd7\\x9e\\xd7\\xa8\\xd7\\xa5\\0\"\n\t\"\\xd7\\x90\\xd7\\xa4\\xd7\\xa8\\xd7\\x99\\xd7\\x9c\\0\"\n\t\"\\xd7\\x9e\\xd7\\x90\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\xa0\\xd7\\x99\\0\"\n\t\"\\xd7\\x99\\xd7\\x95\\xd7\\x9c\\xd7\\x99\\0\"\n\t\"\\xd7\\x90\\xd7\\x95\\xd7\\x92\\xd7\\x95\\xd7\\xa1\\xd7\\x98\\0\"\n\t\"\\xd7\\xa1\\xd7\\xa4\\xd7\\x98\\xd7\\x9e\\xd7\\x91\\xd7\\xa8\\0\"\n\t\"\\xd7\\x90\\xd7\\x95\\xd7\\xa7\\xd7\\x98\\xd7\\x95\\xd7\\x91\\xd7\\xa8\\0\"\n\t\"\\xd7\\xa0\\xd7\\x95\\xd7\\x91\\xd7\\x9e\\xd7\\x91\\xd7\\xa8\\0\"\n\t\"\\xd7\\x93\\xd7\\xa6\\xd7\\x9e\\xd7\\x91\\xd7\\xa8\\0\"\n\t\"\\xd7\\x99\\xd7\\xa0\\xd7\\x95\\xd7\\xb3\\0\"\n\t\"\\xd7\\xa4\\xd7\\x91\\xd7\\xa8\\xd7\\xb3\\0\"\n\t\"\\xd7\\x90\\xd7\\xa4\\xd7\\xa8\\xd7\\xb3\\0\"\n\t\"\\xd7\\x90\\xd7\\x95\\xd7\\x92\\xd7\\xb3\\0\"\n\t\"\\xd7\\xa1\\xd7\\xa4\\xd7\\x98\\xd7\\xb3\\0\"\n\t\"\\xd7\\x90\\xd7\\x95\\xd7\\xa7\\xd7\\xb3\\0\"\n\t\"\\xd7\\xa0\\xd7\\x95\\xd7\\x91\\xd7\\xb3\\0\"\n\t\"\\xd7\\x93\\xd7\\xa6\\xd7\\x9e\\xd7\\xb3\\0\"\n\t\"vas\\xc3\\xa1rnap\\0\"\n\t\"h\\xc3\\xa9tf\\xc5\\x91\\0\"\n\t\"kedd\\0\"\n\t\"szerda\\0\"\n\t\"cs\\xc3\\xbct\\xc3\\xb6rt\\xc3\\xb6k\\0\"\n\t\"p\\xc3\\xa9ntek\\0\"\n\t\"szombat\\0\"\n\t\"H\\0\"\n\t\"Sze\\0\"\n\t\"Cs\\0\"\n\t\"Szo\\0\"\n\t\"Sz\\0\"\n\t\"janu\\xc3\\xa1r\\0\"\n\t\"febru\\xc3\\xa1r\\0\"\n\t\"m\\xc3\\xa1rcius\\0\"\n\t\"\\xc3\\xa1prilis\\0\"\n\t\"m\\xc3\\xa1jus\\0\"\n\t\"j\\xc3\\xbanius\\0\"\n\t\"j\\xc3\\xbalius\\0\"\n\t\"augusztus\\0\"\n\t\"szeptember\\0\"\n\t\"okt\\xc3\\xb3\\x62\\x65r\\0\"\n\t\"m\\xc3\\xa1rc.\\0\"\n\t\"\\xc3\\xa1pr.\\0\"\n\t\"m\\xc3\\xa1j.\\0\"\n\t\"j\\xc3\\xban.\\0\"\n\t\"j\\xc3\\xbal.\\0\"\n\t\"szept.\\0\"\n\t\"sunnudagur\\0\"\n\t\"m\\xc3\\xa1nudagur\\0\"\n\t\"\\xc3\\xberi\\xc3\\xb0judagur\\0\"\n\t\"mi\\xc3\\xb0vikudagur\\0\"\n\t\"fimmtudagur\\0\"\n\t\"f\\xc3\\xb6studagur\\0\"\n\t\"laugardagur\\0\"\n\t\"sun.\\0\"\n\t\"m\\xc3\\xa1n.\\0\"\n\t\"\\xc3\\xberi.\\0\"\n\t\"mi\\xc3\\xb0.\\0\"\n\t\"fim.\\0\"\n\t\"f\\xc3\\xb6s.\\0\"\n\t\"lau.\\0\"\n\t\"\\xc3\\x9e\\0\"\n\t\"jan\\xc3\\xba\\x61r\\0\"\n\t\"febr\\xc3\\xba\\x61r\\0\"\n\t\"apr\\xc3\\xadl\\0\"\n\t\"ma\\xc3\\xad\\0\"\n\t\"j\\xc3\\xban\\xc3\\xad\\0\"\n\t\"j\\xc3\\xbal\\xc3\\xad\\0\"\n\t\"\\xc3\\xa1g\\xc3\\xbast\\0\"\n\t\"n\\xc3\\xb3vember\\0\"\n\t\"desember\\0\"\n\t\"\\xc3\\xa1g\\xc3\\xba.\\0\"\n\t\"n\\xc3\\xb3v.\\0\"\n\t\"domenica\\0\"\n\t\"luned\\xc3\\xac\\0\"\n\t\"marted\\xc3\\xac\\0\"\n\t\"mercoled\\xc3\\xac\\0\"\n\t\"gioved\\xc3\\xac\\0\"\n\t\"venerd\\xc3\\xac\\0\"\n\t\"sabato\\0\"\n\t\"dom\\0\"\n\t\"lun\\0\"\n\t\"mar\\0\"\n\t\"mer\\0\"\n\t\"gio\\0\"\n\t\"ven\\0\"\n\t\"sab\\0\"\n\t\"G\\0\"\n\t\"gennaio\\0\"\n\t\"febbraio\\0\"\n\t\"aprile\\0\"\n\t\"maggio\\0\"\n\t\"giugno\\0\"\n\t\"luglio\\0\"\n\t\"settembre\\0\"\n\t\"ottobre\\0\"\n\t\"dicembre\\0\"\n\t\"gen\\0\"\n\t\"feb\\0\"\n\t\"apr\\0\"\n\t\"mag\\0\"\n\t\"giu\\0\"\n\t\"lug\\0\"\n\t\"ago\\0\"\n\t\"set\\0\"\n\t\"ott\\0\"\n\t\"nov\\0\"\n\t\"dic\\0\"\n\t\"\\xe6\\x97\\xa5\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe6\\x9c\\x88\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe7\\x81\\xab\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe6\\xb0\\xb4\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe6\\x9c\\xa8\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe9\\x87\\x91\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe5\\x9c\\x9f\\xe6\\x9b\\x9c\\xe6\\x97\\xa5\\0\"\n\t\"\\xe6\\x9c\\x88\\0\"\n\t\"\\xe7\\x81\\xab\\0\"\n\t\"\\xe6\\xb0\\xb4\\0\"\n\t\"\\xe6\\x9c\\xa8\\0\"\n\t\"\\xe9\\x87\\x91\\0\"\n\t\"\\xe5\\x9c\\x9f\\0\"\n\t\"1\\0\"\n\t\"2\\0\"\n\t\"3\\0\"\n\t\"4\\0\"\n\t\"5\\0\"\n\t\"6\\0\"\n\t\"7\\0\"\n\t\"8\\0\"\n\t\"9\\0\"\n\t\"10\\0\"\n\t\"11\\0\"\n\t\"12\\0\"\n\t\"\\xec\\x9d\\xbc\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xec\\x9b\\x94\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xed\\x99\\x94\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xec\\x88\\x98\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xeb\\xaa\\xa9\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xea\\xb8\\x88\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xed\\x86\\xa0\\xec\\x9a\\x94\\xec\\x9d\\xbc\\0\"\n\t\"\\xec\\x9d\\xbc\\0\"\n\t\"\\xec\\x9b\\x94\\0\"\n\t\"\\xed\\x99\\x94\\0\"\n\t\"\\xec\\x88\\x98\\0\"\n\t\"\\xeb\\xaa\\xa9\\0\"\n\t\"\\xea\\xb8\\x88\\0\"\n\t\"\\xed\\x86\\xa0\\0\"\n\t\"1\\xec\\x9b\\x94\\0\"\n\t\"2\\xec\\x9b\\x94\\0\"\n\t\"3\\xec\\x9b\\x94\\0\"\n\t\"4\\xec\\x9b\\x94\\0\"\n\t\"5\\xec\\x9b\\x94\\0\"\n\t\"6\\xec\\x9b\\x94\\0\"\n\t\"7\\xec\\x9b\\x94\\0\"\n\t\"8\\xec\\x9b\\x94\\0\"\n\t\"9\\xec\\x9b\\x94\\0\"\n\t\"10\\xec\\x9b\\x94\\0\"\n\t\"11\\xec\\x9b\\x94\\0\"\n\t\"12\\xec\\x9b\\x94\\0\"\n\t\"zondag\\0\"\n\t\"maandag\\0\"\n\t\"dinsdag\\0\"\n\t\"woensdag\\0\"\n\t\"donderdag\\0\"\n\t\"vrijdag\\0\"\n\t\"zaterdag\\0\"\n\t\"zo\\0\"\n\t\"di\\0\"\n\t\"wo\\0\"\n\t\"do\\0\"\n\t\"vr\\0\"\n\t\"za\\0\"\n\t\"Z\\0\"\n\t\"januari\\0\"\n\t\"februari\\0\"\n\t\"maart\\0\"\n\t\"mei\\0\"\n\t\"augustus\\0\"\n\t\"mrt.\\0\"\n\t\"s\\xc3\\xb8n.\\0\"\n\t\"man.\\0\"\n\t\"tir.\\0\"\n\t\"ons.\\0\"\n\t\"tor.\\0\"\n\t\"fre.\\0\"\n\t\"l\\xc3\\xb8r.\\0\"\n\t\"jan\\0\"\n\t\"jun\\0\"\n\t\"jul\\0\"\n\t\"aug\\0\"\n\t\"sep\\0\"\n\t\"okt\\0\"\n\t\"des\\0\"\n\t\"niedziela\\0\"\n\t\"poniedzia\\xc5\\x82\\x65k\\0\"\n\t\"wtorek\\0\"\n\t\"\\xc5\\x9broda\\0\"\n\t\"czwartek\\0\"\n\t\"pi\\xc4\\x85tek\\0\"\n\t\"niedz.\\0\"\n\t\"pon.\\0\"\n\t\"wt.\\0\"\n\t\"\\xc5\\x9br.\\0\"\n\t\"czw.\\0\"\n\t\"pt.\\0\"\n\t\"sob.\\0\"\n\t\"\\xc5\\x9a\\0\"\n\t\"C\\0\"\n\t\"stycze\\xc5\\x84\\0\"\n\t\"luty\\0\"\n\t\"marzec\\0\"\n\t\"kwiecie\\xc5\\x84\\0\"\n\t\"czerwiec\\0\"\n\t\"lipiec\\0\"\n\t\"sierpie\\xc5\\x84\\0\"\n\t\"wrzesie\\xc5\\x84\\0\"\n\t\"pa\\xc5\\xba\\x64ziernik\\0\"\n\t\"grudzie\\xc5\\x84\\0\"\n\t\"stycznia\\0\"\n\t\"lutego\\0\"\n\t\"marca\\0\"\n\t\"kwietnia\\0\"\n\t\"maja\\0\"\n\t\"czerwca\\0\"\n\t\"lipca\\0\"\n\t\"sierpnia\\0\"\n\t\"wrze\\xc5\\x9bnia\\0\"\n\t\"pa\\xc5\\xba\\x64ziernika\\0\"\n\t\"listopada\\0\"\n\t\"grudnia\\0\"\n\t\"sty\\0\"\n\t\"lut\\0\"\n\t\"kwi\\0\"\n\t\"cze\\0\"\n\t\"lip\\0\"\n\t\"sie\\0\"\n\t\"wrz\\0\"\n\t\"pa\\xc5\\xba\\0\"\n\t\"gru\\0\"\n\t\"segunda-feira\\0\"\n\t\"ter\\xc3\\xa7\\x61-feira\\0\"\n\t\"quarta-feira\\0\"\n\t\"quinta-feira\\0\"\n\t\"sexta-feira\\0\"\n\t\"seg\\0\"\n\t\"ter\\0\"\n\t\"qua\\0\"\n\t\"qui\\0\"\n\t\"sex\\0\"\n\t\"s\\xc3\\xa1\\x62\\0\"\n\t\"Q\\0\"\n\t\"janeiro\\0\"\n\t\"fevereiro\\0\"\n\t\"mar\\xc3\\xa7o\\0\"\n\t\"maio\\0\"\n\t\"junho\\0\"\n\t\"julho\\0\"\n\t\"setembro\\0\"\n\t\"outubro\\0\"\n\t\"novembro\\0\"\n\t\"dezembro\\0\"\n\t\"fev\\0\"\n\t\"abr\\0\"\n\t\"out\\0\"\n\t\"dez\\0\"\n\t\"dumengia\\0\"\n\t\"glindesdi\\0\"\n\t\"mesemna\\0\"\n\t\"gievgia\\0\"\n\t\"venderdi\\0\"\n\t\"sonda\\0\"\n\t\"du\\0\"\n\t\"gli\\0\"\n\t\"me\\0\"\n\t\"gie\\0\"\n\t\"ve\\0\"\n\t\"schaner\\0\"\n\t\"favrer\\0\"\n\t\"avrigl\\0\"\n\t\"matg\\0\"\n\t\"zercladur\\0\"\n\t\"fanadur\\0\"\n\t\"avust\\0\"\n\t\"settember\\0\"\n\t\"october\\0\"\n\t\"schan.\\0\"\n\t\"favr.\\0\"\n\t\"zercl.\\0\"\n\t\"fan.\\0\"\n\t\"sett.\\0\"\n\t\"duminic\\xc4\\x83\\0\"\n\t\"luni\\0\"\n\t\"mar\\xc8\\x9bi\\0\"\n\t\"miercuri\\0\"\n\t\"joi\\0\"\n\t\"vineri\\0\"\n\t\"s\\xc3\\xa2mb\\xc4\\x83t\\xc4\\x83\\0\"\n\t\"dum.\\0\"\n\t\"mie.\\0\"\n\t\"vin.\\0\"\n\t\"s\\xc3\\xa2m.\\0\"\n\t\"ianuarie\\0\"\n\t\"februarie\\0\"\n\t\"martie\\0\"\n\t\"aprilie\\0\"\n\t\"iunie\\0\"\n\t\"iulie\\0\"\n\t\"septembrie\\0\"\n\t\"octombrie\\0\"\n\t\"noiembrie\\0\"\n\t\"decembrie\\0\"\n\t\"ian.\\0\"\n\t\"iun.\\0\"\n\t\"iul.\\0\"\n\t\"\\xd0\\xb2\\xd0\\xbe\\xd1\\x81\\xd0\\xba\\xd1\\x80\\xd0\\xb5\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\xd0\\xb5\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd0\\xbb\\xd1\\x8c\\xd0\\xbd\\xd0\\xb8\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xb5\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xb3\\0\"\n\t\"\\xd0\\xbf\\xd1\\x8f\\xd1\\x82\\xd0\\xbd\\xd0\\xb8\\xd1\\x86\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd1\\x83\\xd0\\xb1\\xd0\\xb1\\xd0\\xbe\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb2\\xd1\\x81\\0\"\n\t\"\\xd0\\x92\\0\"\n\t\"\\xd0\\x9f\\0\"\n\t\"\\xd0\\xa1\\0\"\n\t\"\\xd0\\xa7\\0\"\n\t\"\\xd1\\x8f\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2\\xd1\\x80\\xd0\\xb0\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbf\\xd1\\x80\\xd0\\xb5\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb8\\xd1\\x8e\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb8\\xd1\\x8e\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xba\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd1\\x8f\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\xd1\\x8f\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2\\xd1\\x80\\xd0\\xb0\\xd0\\xbb\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbf\\xd1\\x80\\xd0\\xb5\\xd0\\xbb\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb8\\xd1\\x8e\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb8\\xd1\\x8e\\xd0\\xbb\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb0\\xd0\\xb2\\xd0\\xb3\\xd1\\x83\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xba\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\xd1\\x8f\\0\"\n\t\"\\xd1\\x8f\\xd0\\xbd\\xd0\\xb2.\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2\\xd1\\x80.\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbf\\xd1\\x80.\\0\"\n\t\"\\xd0\\xb0\\xd0\\xb2\\xd0\\xb3.\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x82.\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82.\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd1\\x8f\\xd0\\xb1.\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xba.\\0\"\n\t\"nedjelja\\0\"\n\t\"ponedjeljak\\0\"\n\t\"utorak\\0\"\n\t\"srijeda\\0\"\n\t\"\\xc4\\x8d\\x65tvrtak\\0\"\n\t\"petak\\0\"\n\t\"subota\\0\"\n\t\"ned\\0\"\n\t\"pon\\0\"\n\t\"uto\\0\"\n\t\"sri\\0\"\n\t\"\\xc4\\x8d\\x65t\\0\"\n\t\"pet\\0\"\n\t\"sub\\0\"\n\t\"n\\0\"\n\t\"p\\0\"\n\t\"u\\0\"\n\t\"s\\0\"\n\t\"\\xc4\\x8d\\0\"\n\t\"sije\\xc4\\x8d\\x61nj\\0\"\n\t\"velja\\xc4\\x8d\\x61\\0\"\n\t\"o\\xc5\\xbeujak\\0\"\n\t\"travanj\\0\"\n\t\"svibanj\\0\"\n\t\"lipanj\\0\"\n\t\"srpanj\\0\"\n\t\"kolovoz\\0\"\n\t\"rujan\\0\"\n\t\"studeni\\0\"\n\t\"prosinac\\0\"\n\t\"sije\\xc4\\x8dnja\\0\"\n\t\"velja\\xc4\\x8d\\x65\\0\"\n\t\"o\\xc5\\xbeujka\\0\"\n\t\"travnja\\0\"\n\t\"svibnja\\0\"\n\t\"lipnja\\0\"\n\t\"srpnja\\0\"\n\t\"kolovoza\\0\"\n\t\"rujna\\0\"\n\t\"studenoga\\0\"\n\t\"prosinca\\0\"\n\t\"sij\\0\"\n\t\"velj\\0\"\n\t\"o\\xc5\\xbeu\\0\"\n\t\"tra\\0\"\n\t\"svi\\0\"\n\t\"kol\\0\"\n\t\"ruj\\0\"\n\t\"stu\\0\"\n\t\"nede\\xc4\\xbe\\x61\\0\"\n\t\"pondelok\\0\"\n\t\"utorok\\0\"\n\t\"streda\\0\"\n\t\"\\xc5\\xa1tvrtok\\0\"\n\t\"piatok\\0\"\n\t\"ut\\0\"\n\t\"\\xc5\\xa1t\\0\"\n\t\"pi\\0\"\n\t\"\\xc5\\xa1\\0\"\n\t\"marec\\0\"\n\t\"m\\xc3\\xa1j\\0\"\n\t\"j\\xc3\\xban\\0\"\n\t\"j\\xc3\\xbal\\0\"\n\t\"janu\\xc3\\xa1ra\\0\"\n\t\"febru\\xc3\\xa1ra\\0\"\n\t\"apr\\xc3\\xadla\\0\"\n\t\"m\\xc3\\xa1ja\\0\"\n\t\"j\\xc3\\xbana\\0\"\n\t\"j\\xc3\\xbala\\0\"\n\t\"augusta\\0\"\n\t\"septembra\\0\"\n\t\"okt\\xc3\\xb3\\x62ra\\0\"\n\t\"novembra\\0\"\n\t\"decembra\\0\"\n\t\"dec\\0\"\n\t\"e diel\\0\"\n\t\"e h\\xc3\\xabn\\xc3\\xab\\0\"\n\t\"e mart\\xc3\\xab\\0\"\n\t\"e m\\xc3\\xabrkur\\xc3\\xab\\0\"\n\t\"e enjte\\0\"\n\t\"e premte\\0\"\n\t\"e shtun\\xc3\\xab\\0\"\n\t\"Die\\0\"\n\t\"H\\xc3\\xabn\\0\"\n\t\"M\\xc3\\xabr\\0\"\n\t\"Enj\\0\"\n\t\"Pre\\0\"\n\t\"Sht\\0\"\n\t\"E\\0\"\n\t\"Janar\\0\"\n\t\"Shkurt\\0\"\n\t\"Mars\\0\"\n\t\"Prill\\0\"\n\t\"Maj\\0\"\n\t\"Qershor\\0\"\n\t\"Korrik\\0\"\n\t\"Gusht\\0\"\n\t\"Shtator\\0\"\n\t\"Tetor\\0\"\n\t\"N\\xc3\\xabntor\\0\"\n\t\"Dhjetor\\0\"\n\t\"janar\\0\"\n\t\"shkurt\\0\"\n\t\"prill\\0\"\n\t\"qershor\\0\"\n\t\"korrik\\0\"\n\t\"gusht\\0\"\n\t\"shtator\\0\"\n\t\"tetor\\0\"\n\t\"n\\xc3\\xabntor\\0\"\n\t\"dhjetor\\0\"\n\t\"Shk\\0\"\n\t\"Pri\\0\"\n\t\"Qer\\0\"\n\t\"Kor\\0\"\n\t\"Gsh\\0\"\n\t\"Tet\\0\"\n\t\"N\\xc3\\xabn\\0\"\n\t\"Dhj\\0\"\n\t\"s\\xc3\\xb6ndag\\0\"\n\t\"m\\xc3\\xa5ndag\\0\"\n\t\"tisdag\\0\"\n\t\"l\\xc3\\xb6rdag\\0\"\n\t\"s\\xc3\\xb6n\\0\"\n\t\"m\\xc3\\xa5n\\0\"\n\t\"tis\\0\"\n\t\"tors\\0\"\n\t\"l\\xc3\\xb6r\\0\"\n\t\"augusti\\0\"\n\t\"Pazar\\0\"\n\t\"Pazartesi\\0\"\n\t\"Sal\\xc4\\xb1\\0\"\n\t\"\\xc3\\x87\\x61r\\xc5\\x9f\\x61mba\\0\"\n\t\"Per\\xc5\\x9f\\x65mbe\\0\"\n\t\"Cuma\\0\"\n\t\"Cumartesi\\0\"\n\t\"Paz\\0\"\n\t\"Pzt\\0\"\n\t\"Sal\\0\"\n\t\"\\xc3\\x87\\x61r\\0\"\n\t\"Per\\0\"\n\t\"Cum\\0\"\n\t\"Cmt\\0\"\n\t\"\\xc3\\x87\\0\"\n\t\"Ocak\\0\"\n\t\"\\xc5\\x9eubat\\0\"\n\t\"Mart\\0\"\n\t\"Nisan\\0\"\n\t\"May\\xc4\\xb1s\\0\"\n\t\"Haziran\\0\"\n\t\"Temmuz\\0\"\n\t\"A\\xc4\\x9fustos\\0\"\n\t\"Eyl\\xc3\\xbcl\\0\"\n\t\"Ekim\\0\"\n\t\"Kas\\xc4\\xb1m\\0\"\n\t\"Aral\\xc4\\xb1k\\0\"\n\t\"Oca\\0\"\n\t\"\\xc5\\x9eub\\0\"\n\t\"Nis\\0\"\n\t\"Haz\\0\"\n\t\"Tem\\0\"\n\t\"A\\xc4\\x9fu\\0\"\n\t\"Eyl\\0\"\n\t\"Eki\\0\"\n\t\"Kas\\0\"\n\t\"Ara\\0\"\n\t\"\\xd8\\xa7\\xd8\\xaa\\xd9\\x88\\xd8\\xa7\\xd8\\xb1\\0\"\n\t\"\\xd8\\xb3\\xd9\\x88\\xd9\\x85\\xd9\\x88\\xd8\\xa7\\xd8\\xb1\\0\"\n\t\"\\xd9\\x85\\xd9\\x86\\xda\\xaf\\xd9\\x84\\0\"\n\t\"\\xd8\\xa8\\xd8\\xaf\\xda\\xbe\\0\"\n\t\"\\xd8\\xac\\xd9\\x85\\xd8\\xb9\\xd8\\xb1\\xd8\\xa7\\xd8\\xaa\\0\"\n\t\"\\xd8\\xac\\xd9\\x85\\xd8\\xb9\\xdb\\x81\\0\"\n\t\"\\xdb\\x81\\xd9\\x81\\xd8\\xaa\\xdb\\x81\\0\"\n\t\"\\xd8\\xac\\xd9\\x86\\xd9\\x88\\xd8\\xb1\\xdb\\x8c\\0\"\n\t\"\\xd9\\x81\\xd8\\xb1\\xd9\\x88\\xd8\\xb1\\xdb\\x8c\\0\"\n\t\"\\xd9\\x85\\xd8\\xa7\\xd8\\xb1\\xda\\x86\\0\"\n\t\"\\xd8\\xa7\\xd9\\xbe\\xd8\\xb1\\xdb\\x8c\\xd9\\x84\\0\"\n\t\"\\xd9\\x85\\xd8\\xa6\\xdb\\x8c\\0\"\n\t\"\\xd8\\xac\\xd9\\x88\\xd9\\x86\\0\"\n\t\"\\xd8\\xac\\xd9\\x88\\xd9\\x84\\xd8\\xa7\\xd8\\xa6\\xdb\\x8c\\0\"\n\t\"\\xd8\\xa7\\xda\\xaf\\xd8\\xb3\\xd8\\xaa\\0\"\n\t\"\\xd8\\xb3\\xd8\\xaa\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xa7\\xda\\xa9\\xd8\\xaa\\xd9\\x88\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd9\\x86\\xd9\\x88\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xaf\\xd8\\xb3\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"Minggu\\0\"\n\t\"Senin\\0\"\n\t\"Selasa\\0\"\n\t\"Rabu\\0\"\n\t\"Kamis\\0\"\n\t\"Jumat\\0\"\n\t\"Sabtu\\0\"\n\t\"Min\\0\"\n\t\"Sen\\0\"\n\t\"Sel\\0\"\n\t\"Rab\\0\"\n\t\"Kam\\0\"\n\t\"Jum\\0\"\n\t\"Sab\\0\"\n\t\"R\\0\"\n\t\"Januari\\0\"\n\t\"Februari\\0\"\n\t\"Maret\\0\"\n\t\"Mei\\0\"\n\t\"Agustus\\0\"\n\t\"Desember\\0\"\n\t\"Agt\\0\"\n\t\"Des\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd1\\x96\\xd0\\xbb\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd1\\x96\\xd0\\xbb\\xd0\\xbe\\xd0\\xba\\0\"\n\t\"\\xd0\\xb2\\xd1\\x96\\xd0\\xb2\\xd1\\x82\\xd0\\xbe\\xd1\\x80\\xd0\\xbe\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd1\\x80\\xd0\\xb5\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\0\"\n\t\"\\xd0\\xbf\\xca\\xbc\\xd1\\x8f\\xd1\\x82\\xd0\\xbd\\xd0\\xb8\\xd1\\x86\\xd1\\x8f\\0\"\n\t\"\\xd1\\x81\\xd1\\x83\\xd0\\xb1\\xd0\\xbe\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd0\\x9d\\0\"\n\t\"\\xd1\\x81\\xd1\\x96\\xd1\\x87\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbb\\xd1\\x8e\\xd1\\x82\\xd0\\xb8\\xd0\\xb9\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd1\\x80\\xd0\\xb5\\xd0\\xb7\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xba\\xd0\\xb2\\xd1\\x96\\xd1\\x82\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd1\\x82\\xd1\\x80\\xd0\\xb0\\xd0\\xb2\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x80\\xd0\\xb2\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb8\\xd0\\xbf\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd1\\x80\\xd0\\xbf\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xb5\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb6\\xd0\\xbe\\xd0\\xb2\\xd1\\x82\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb8\\xd1\\x81\\xd1\\x82\\xd0\\xbe\\xd0\\xbf\\xd0\\xb0\\xd0\\xb4\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd1\\x83\\xd0\\xb4\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd1\\x81\\xd1\\x96\\xd1\\x87\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbb\\xd1\\x8e\\xd1\\x82\\xd0\\xbe\\xd0\\xb3\\xd0\\xbe\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd1\\x80\\xd0\\xb5\\xd0\\xb7\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xba\\xd0\\xb2\\xd1\\x96\\xd1\\x82\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd1\\x82\\xd1\\x80\\xd0\\xb0\\xd0\\xb2\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x80\\xd0\\xb2\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb8\\xd0\\xbf\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd1\\x80\\xd0\\xbf\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xb5\\xd1\\x81\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb6\\xd0\\xbe\\xd0\\xb2\\xd1\\x82\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb8\\xd1\\x81\\xd1\\x82\\xd0\\xbe\\xd0\\xbf\\xd0\\xb0\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd1\\x83\\xd0\\xb4\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd1\\x81\\xd1\\x96\\xd1\\x87\\0\"\n\t\"\\xd0\\xbb\\xd1\\x8e\\xd1\\x82\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd1\\x80\\0\"\n\t\"\\xd0\\xba\\xd0\\xb2\\xd1\\x96\\0\"\n\t\"\\xd1\\x82\\xd1\\x80\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x80\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb8\\xd0\\xbf\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd1\\x80\\0\"\n\t\"\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\0\"\n\t\"\\xd0\\xb6\\xd0\\xbe\\xd0\\xb2\\0\"\n\t\"\\xd0\\xbb\\xd0\\xb8\\xd1\\x81\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd1\\x83\\0\"\n\t\"\\xd0\\xbd\\xd1\\x8f\\xd0\\xb4\\xd0\\xb7\\xd0\\xb5\\xd0\\xbb\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb0\\xd0\\xbd\\xd1\\x8f\\xd0\\xb4\\xd0\\xb7\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd0\\xb0\\xd1\\x9e\\xd1\\x82\\xd0\\xbe\\xd1\\x80\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd1\\x80\\xd0\\xb0\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb0\\xd1\\x86\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\0\"\n\t\"\\xd0\\xbf\\xd1\\x8f\\xd1\\x82\\xd0\\xbd\\xd1\\x96\\xd1\\x86\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb0\\xd1\\x9e\\0\"\n\t\"\\xd1\\x87\\xd1\\x86\\0\"\n\t\"\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd1\\x82\\xd1\\x83\\xd0\\xb4\\xd0\\xb7\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbb\\xd1\\x8e\\xd1\\x82\\xd1\\x8b\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xba\\xd0\\xb0\\xd0\\xb2\\xd1\\x96\\xd0\\xba\\0\"\n\t\"\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x81\\xd0\\xb0\\xd0\\xb2\\xd1\\x96\\xd0\\xba\\0\"\n\t\"\\xd1\\x87\\xd1\\x8d\\xd1\\x80\\xd0\\xb2\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xbb\\xd1\\x96\\xd0\\xbf\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb6\\xd0\\xbd\\xd1\\x96\\xd0\\xb2\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xb0\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\xba\\xd0\\xb0\\xd1\\x81\\xd1\\x82\\xd1\\x80\\xd1\\x8b\\xd1\\x87\\xd0\\xbd\\xd1\\x96\\xd0\\xba\\0\"\n\t\"\\xd0\\xbb\\xd1\\x96\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbf\\xd0\\xb0\\xd0\\xb4\\0\"\n\t\"\\xd1\\x81\\xd0\\xbd\\xd0\\xb5\\xd0\\xb6\\xd0\\xb0\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd1\\x81\\xd1\\x82\\xd1\\x83\\xd0\\xb4\\xd0\\xb7\\xd0\\xb5\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbb\\xd1\\x8e\\xd1\\x82\\xd0\\xb0\\xd0\\xb3\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xba\\xd0\\xb0\\xd0\\xb2\\xd1\\x96\\xd0\\xba\\xd0\\xb0\\0\"\n\t\"\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\xd1\\x81\\xd0\\xb0\\xd0\\xb2\\xd1\\x96\\xd0\\xba\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd1\\x8d\\xd1\\x80\\xd0\\xb2\\xd0\\xb5\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xbb\\xd1\\x96\\xd0\\xbf\\xd0\\xb5\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb6\\xd0\\xbd\\xd1\\x96\\xd1\\x9e\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xb0\\xd1\\x81\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd0\\xba\\xd0\\xb0\\xd1\\x81\\xd1\\x82\\xd1\\x80\\xd1\\x8b\\xd1\\x87\\xd0\\xbd\\xd1\\x96\\xd0\\xba\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbb\\xd1\\x96\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd0\\xbf\\xd0\\xb0\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd0\\xbd\\xd0\\xb5\\xd0\\xb6\\xd0\\xbd\\xd1\\x8f\\0\"\n\t\"\\xd1\\x81\\xd1\\x82\\xd1\\x83\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd0\\xba\\xd1\\x80\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd1\\x8d\\xd1\\x80\\0\"\n\t\"\\xd0\\xbb\\xd1\\x96\\xd0\\xbf\\0\"\n\t\"\\xd0\\xb6\\xd0\\xbd\\xd1\\x96\\0\"\n\t\"\\xd0\\xba\\xd0\\xb0\\xd1\\x81\\0\"\n\t\"\\xd0\\xbb\\xd1\\x96\\xd1\\x81\\0\"\n\t\"\\xd1\\x81\\xd0\\xbd\\xd0\\xb5\\0\"\n\t\"nedelja\\0\"\n\t\"ponedeljek\\0\"\n\t\"torek\\0\"\n\t\"sreda\\0\"\n\t\"\\xc4\\x8d\\x65trtek\\0\"\n\t\"petek\\0\"\n\t\"ned.\\0\"\n\t\"sre.\\0\"\n\t\"\\xc4\\x8d\\x65t.\\0\"\n\t\"pet.\\0\"\n\t\"t\\0\"\n\t\"junij\\0\"\n\t\"julij\\0\"\n\t\"avgust\\0\"\n\t\"avg.\\0\"\n\t\"p\\xc3\\xbchap\\xc3\\xa4\\x65v\\0\"\n\t\"esmasp\\xc3\\xa4\\x65v\\0\"\n\t\"teisip\\xc3\\xa4\\x65v\\0\"\n\t\"kolmap\\xc3\\xa4\\x65v\\0\"\n\t\"neljap\\xc3\\xa4\\x65v\\0\"\n\t\"reede\\0\"\n\t\"laup\\xc3\\xa4\\x65v\\0\"\n\t\"jaanuar\\0\"\n\t\"veebruar\\0\"\n\t\"m\\xc3\\xa4rts\\0\"\n\t\"aprill\\0\"\n\t\"juuni\\0\"\n\t\"juuli\\0\"\n\t\"oktoober\\0\"\n\t\"detsember\\0\"\n\t\"jaan\\0\"\n\t\"veebr\\0\"\n\t\"sept\\0\"\n\t\"dets\\0\"\n\t\"sv\\xc4\\x93tdiena\\0\"\n\t\"pirmdiena\\0\"\n\t\"otrdiena\\0\"\n\t\"tre\\xc5\\xa1\\x64iena\\0\"\n\t\"ceturtdiena\\0\"\n\t\"piektdiena\\0\"\n\t\"sestdiena\\0\"\n\t\"Sv\\xc4\\x93td.\\0\"\n\t\"Pirmd.\\0\"\n\t\"Otrd.\\0\"\n\t\"Tre\\xc5\\xa1\\x64.\\0\"\n\t\"Ceturtd.\\0\"\n\t\"Piektd.\\0\"\n\t\"Sestd.\\0\"\n\t\"janv\\xc4\\x81ris\\0\"\n\t\"febru\\xc4\\x81ris\\0\"\n\t\"apr\\xc4\\xablis\\0\"\n\t\"maijs\\0\"\n\t\"j\\xc5\\xabnijs\\0\"\n\t\"j\\xc5\\xablijs\\0\"\n\t\"augusts\\0\"\n\t\"septembris\\0\"\n\t\"oktobris\\0\"\n\t\"novembris\\0\"\n\t\"decembris\\0\"\n\t\"j\\xc5\\xabn.\\0\"\n\t\"j\\xc5\\xabl.\\0\"\n\t\"sekmadienis\\0\"\n\t\"pirmadienis\\0\"\n\t\"antradienis\\0\"\n\t\"tre\\xc4\\x8diadienis\\0\"\n\t\"ketvirtadienis\\0\"\n\t\"penktadienis\\0\"\n\t\"\\xc5\\xa1\\x65\\xc5\\xa1tadienis\\0\"\n\t\"sk\\0\"\n\t\"pr\\0\"\n\t\"an\\0\"\n\t\"tr\\0\"\n\t\"kt\\0\"\n\t\"pn\\0\"\n\t\"A\\0\"\n\t\"\\xc5\\xa0\\0\"\n\t\"sausis\\0\"\n\t\"vasaris\\0\"\n\t\"kovas\\0\"\n\t\"balandis\\0\"\n\t\"gegu\\xc5\\xbe\\xc4\\x97\\0\"\n\t\"bir\\xc5\\xbe\\x65lis\\0\"\n\t\"liepa\\0\"\n\t\"rugpj\\xc5\\xabtis\\0\"\n\t\"rugs\\xc4\\x97jis\\0\"\n\t\"spalis\\0\"\n\t\"lapkritis\\0\"\n\t\"gruodis\\0\"\n\t\"sausio\\0\"\n\t\"vasario\\0\"\n\t\"kovo\\0\"\n\t\"baland\\xc5\\xbeio\\0\"\n\t\"gegu\\xc5\\xbe\\xc4\\x97s\\0\"\n\t\"bir\\xc5\\xbe\\x65lio\\0\"\n\t\"liepos\\0\"\n\t\"rugpj\\xc5\\xab\\xc4\\x8dio\\0\"\n\t\"rugs\\xc4\\x97jo\\0\"\n\t\"spalio\\0\"\n\t\"lapkri\\xc4\\x8dio\\0\"\n\t\"gruod\\xc5\\xbeio\\0\"\n\t\"saus.\\0\"\n\t\"vas.\\0\"\n\t\"kov.\\0\"\n\t\"bal.\\0\"\n\t\"geg.\\0\"\n\t\"bir\\xc5\\xbe.\\0\"\n\t\"liep.\\0\"\n\t\"rugp.\\0\"\n\t\"rugs.\\0\"\n\t\"spal.\\0\"\n\t\"lapkr.\\0\"\n\t\"gruod.\\0\"\n\t\"\\xd0\\xaf\\xd0\\xba\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\x94\\xd1\\x83\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb5\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\xa7\\xd0\\xbe\\xd1\\x80\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\x9f\\xd0\\xb0\\xd0\\xbd\\xd2\\xb7\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd2\\xb6\\xd1\\x83\\xd0\\xbc\\xd1\\x8a\\xd0\\xb0\\0\"\n\t\"\\xd0\\xa8\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\xaf\\xd1\\x88\\xd0\\xb1\\0\"\n\t\"\\xd0\\x94\\xd1\\x88\\xd0\\xb1\\0\"\n\t\"\\xd0\\xa1\\xd1\\x88\\xd0\\xb1\\0\"\n\t\"\\xd0\\xa7\\xd1\\x88\\xd0\\xb1\\0\"\n\t\"\\xd0\\x9f\\xd1\\x88\\xd0\\xb1\\0\"\n\t\"\\xd2\\xb6\\xd0\\xbc\\xd1\\x8a\\0\"\n\t\"\\xd0\\xa8\\xd0\\xbd\\xd0\\xb1\\0\"\n\t\"\\xd0\\xaf\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xa4\\xd0\\xb5\\xd0\\xb2\\xd1\\x80\\xd0\\xb0\\xd0\\xbb\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd1\\x80\\xd1\\x82\\0\"\n\t\"\\xd0\\x90\\xd0\\xbf\\xd1\\x80\\xd0\\xb5\\xd0\\xbb\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd0\\xb9\\0\"\n\t\"\\xd0\\x98\\xd1\\x8e\\xd0\\xbd\\0\"\n\t\"\\xd0\\x98\\xd1\\x8e\\xd0\\xbb\\0\"\n\t\"\\xd0\\x90\\xd0\\xb2\\xd0\\xb3\\xd1\\x83\\xd1\\x81\\xd1\\x82\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\x9e\\xd0\\xba\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\x9d\\xd0\\xbe\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\x94\\xd0\\xb5\\xd0\\xba\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\xaf\\xd0\\xbd\\xd0\\xb2\\0\"\n\t\"\\xd0\\xa4\\xd0\\xb5\\xd0\\xb2\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x90\\xd0\\xbf\\xd1\\x80\\0\"\n\t\"\\xd0\\x90\\xd0\\xb2\\xd0\\xb3\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb5\\xd0\\xbd\\0\"\n\t\"\\xd0\\x9e\\xd0\\xba\\xd1\\x82\\0\"\n\t\"\\xd0\\x9d\\xd0\\xbe\\xd1\\x8f\\0\"\n\t\"\\xd0\\x94\\xd0\\xb5\\xd0\\xba\\0\"\n\t\"\\xdb\\x8c\\xda\\xa9\\xd8\\xb4\\xd9\\x86\\xd8\\xa8\\xd9\\x87\\0\"\n\t\"\\xd8\\xaf\\xd9\\x88\\xd8\\xb4\\xd9\\x86\\xd8\\xa8\\xd9\\x87\\0\"\n\t\"\\xd8\\xb3\\xd9\\x87\\xe2\\x80\\x8c\\xd8\\xb4\\xd9\\x86\\xd8\\xa8\\xd9\\x87\\0\"\n\t\"\\xda\\x86\\xd9\\x87\\xd8\\xa7\\xd8\\xb1\\xd8\\xb4\\xd9\\x86\\xd8\\xa8\\xd9\\x87\\0\"\n\t\"\\xd9\\xbe\\xd9\\x86\\xd8\\xac\\xd8\\xb4\\xd9\\x86\\xd8\\xa8\\xd9\\x87\\0\"\n\t\"\\xd8\\xac\\xd9\\x85\\xd8\\xb9\\xd9\\x87\\0\"\n\t\"\\xd8\\xb4\\xd9\\x86\\xd8\\xa8\\xd9\\x87\\0\"\n\t\"\\xdb\\x8c\\0\"\n\t\"\\xd8\\xaf\\0\"\n\t\"\\xd8\\xb3\\0\"\n\t\"\\xda\\x86\\0\"\n\t\"\\xd9\\xbe\\0\"\n\t\"\\xd8\\xac\\0\"\n\t\"\\xd8\\xb4\\0\"\n\t\"\\xda\\x98\\xd8\\xa7\\xd9\\x86\\xd9\\x88\\xdb\\x8c\\xd9\\x87\\0\"\n\t\"\\xd9\\x81\\xd9\\x88\\xd8\\xb1\\xdb\\x8c\\xd9\\x87\\0\"\n\t\"\\xd9\\x85\\xd8\\xa7\\xd8\\xb1\\xd8\\xb3\\0\"\n\t\"\\xd8\\xa2\\xd9\\x88\\xd8\\xb1\\xdb\\x8c\\xd9\\x84\\0\"\n\t\"\\xd9\\x85\\xd9\\x87\\0\"\n\t\"\\xda\\x98\\xd9\\x88\\xd8\\xa6\\xd9\\x86\\0\"\n\t\"\\xda\\x98\\xd9\\x88\\xd8\\xa6\\xdb\\x8c\\xd9\\x87\\0\"\n\t\"\\xd8\\xa7\\xd9\\x88\\xd8\\xaa\\0\"\n\t\"\\xd8\\xb3\\xd9\\xbe\\xd8\\xaa\\xd8\\xa7\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xa7\\xda\\xa9\\xd8\\xaa\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd9\\x86\\xd9\\x88\\xd8\\xa7\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xaf\\xd8\\xb3\\xd8\\xa7\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xda\\x98\\xd8\\xa7\\xd9\\x86\\xd9\\x88\\xdb\\x8c\\xd9\\x87\\xd9\\x94\\0\"\n\t\"\\xd9\\x81\\xd9\\x88\\xd8\\xb1\\xdb\\x8c\\xd9\\x87\\xd9\\x94\\0\"\n\t\"\\xd9\\x85\\xd9\\x87\\xd9\\x94\\0\"\n\t\"\\xda\\x98\\xd9\\x88\\xd8\\xa6\\xdb\\x8c\\xd9\\x87\\xd9\\x94\\0\"\n\t\"Ch\\xe1\\xbb\\xa7 Nh\\xe1\\xba\\xadt\\0\"\n\t\"Th\\xe1\\xbb\\xa9 Hai\\0\"\n\t\"Th\\xe1\\xbb\\xa9 Ba\\0\"\n\t\"Th\\xe1\\xbb\\xa9 T\\xc6\\xb0\\0\"\n\t\"Th\\xe1\\xbb\\xa9 N\\xc4\\x83m\\0\"\n\t\"Th\\xe1\\xbb\\xa9 S\\xc3\\xa1u\\0\"\n\t\"Th\\xe1\\xbb\\xa9 B\\xe1\\xba\\xa3y\\0\"\n\t\"CN\\0\"\n\t\"Th 2\\0\"\n\t\"Th 3\\0\"\n\t\"Th 4\\0\"\n\t\"Th 5\\0\"\n\t\"Th 6\\0\"\n\t\"Th 7\\0\"\n\t\"T2\\0\"\n\t\"T3\\0\"\n\t\"T4\\0\"\n\t\"T5\\0\"\n\t\"T6\\0\"\n\t\"T7\\0\"\n\t\"Th\\xc3\\xa1ng 1\\0\"\n\t\"Th\\xc3\\xa1ng 2\\0\"\n\t\"Th\\xc3\\xa1ng 3\\0\"\n\t\"Th\\xc3\\xa1ng 4\\0\"\n\t\"Th\\xc3\\xa1ng 5\\0\"\n\t\"Th\\xc3\\xa1ng 6\\0\"\n\t\"Th\\xc3\\xa1ng 7\\0\"\n\t\"Th\\xc3\\xa1ng 8\\0\"\n\t\"Th\\xc3\\xa1ng 9\\0\"\n\t\"Th\\xc3\\xa1ng 10\\0\"\n\t\"Th\\xc3\\xa1ng 11\\0\"\n\t\"Th\\xc3\\xa1ng 12\\0\"\n\t\"th\\xc3\\xa1ng 1\\0\"\n\t\"th\\xc3\\xa1ng 2\\0\"\n\t\"th\\xc3\\xa1ng 3\\0\"\n\t\"th\\xc3\\xa1ng 4\\0\"\n\t\"th\\xc3\\xa1ng 5\\0\"\n\t\"th\\xc3\\xa1ng 6\\0\"\n\t\"th\\xc3\\xa1ng 7\\0\"\n\t\"th\\xc3\\xa1ng 8\\0\"\n\t\"th\\xc3\\xa1ng 9\\0\"\n\t\"th\\xc3\\xa1ng 10\\0\"\n\t\"th\\xc3\\xa1ng 11\\0\"\n\t\"th\\xc3\\xa1ng 12\\0\"\n\t\"Thg 1\\0\"\n\t\"Thg 2\\0\"\n\t\"Thg 3\\0\"\n\t\"Thg 4\\0\"\n\t\"Thg 5\\0\"\n\t\"Thg 6\\0\"\n\t\"Thg 7\\0\"\n\t\"Thg 8\\0\"\n\t\"Thg 9\\0\"\n\t\"Thg 10\\0\"\n\t\"Thg 11\\0\"\n\t\"Thg 12\\0\"\n\t\"\\xd5\\xaf\\xd5\\xab\\xd6\\x80\\xd5\\xa1\\xd5\\xaf\\xd5\\xab\\0\"\n\t\"\\xd5\\xa5\\xd6\\x80\\xd5\\xaf\\xd5\\xb8\\xd6\\x82\\xd5\\xb7\\xd5\\xa1\\xd5\\xa2\\xd5\\xa9\\xd5\\xab\\0\"\n\t\"\\xd5\\xa5\\xd6\\x80\\xd5\\xa5\\xd6\\x84\\xd5\\xb7\\xd5\\xa1\\xd5\\xa2\\xd5\\xa9\\xd5\\xab\\0\"\n\t\"\\xd5\\xb9\\xd5\\xb8\\xd6\\x80\\xd5\\xa5\\xd6\\x84\\xd5\\xb7\\xd5\\xa1\\xd5\\xa2\\xd5\\xa9\\xd5\\xab\\0\"\n\t\"\\xd5\\xb0\\xd5\\xab\\xd5\\xb6\\xd5\\xa3\\xd5\\xb7\\xd5\\xa1\\xd5\\xa2\\xd5\\xa9\\xd5\\xab\\0\"\n\t\"\\xd5\\xb8\\xd6\\x82\\xd6\\x80\\xd5\\xa2\\xd5\\xa1\\xd5\\xa9\\0\"\n\t\"\\xd5\\xb7\\xd5\\xa1\\xd5\\xa2\\xd5\\xa1\\xd5\\xa9\\0\"\n\t\"\\xd5\\xaf\\xd5\\xab\\xd6\\x80\\0\"\n\t\"\\xd5\\xa5\\xd6\\x80\\xd5\\xaf\\0\"\n\t\"\\xd5\\xa5\\xd6\\x80\\xd6\\x84\\0\"\n\t\"\\xd5\\xb9\\xd6\\x80\\xd6\\x84\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb6\\xd5\\xa3\\0\"\n\t\"\\xd5\\xb8\\xd6\\x82\\xd6\\x80\\0\"\n\t\"\\xd5\\xb7\\xd5\\xa2\\xd5\\xa9\\0\"\n\t\"\\xd4\\xbf\\0\"\n\t\"\\xd4\\xb5\\0\"\n\t\"\\xd5\\x89\\0\"\n\t\"\\xd5\\x80\\0\"\n\t\"\\xd5\\x88\\0\"\n\t\"\\xd5\\x87\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd6\\x82\\xd5\\xb6\\xd5\\xbe\\xd5\\xa1\\xd6\\x80\\0\"\n\t\"\\xd6\\x83\\xd5\\xa5\\xd5\\xbf\\xd6\\x80\\xd5\\xbe\\xd5\\xa1\\xd6\\x80\\0\"\n\t\"\\xd5\\xb4\\xd5\\xa1\\xd6\\x80\\xd5\\xbf\\0\"\n\t\"\\xd5\\xa1\\xd5\\xba\\xd6\\x80\\xd5\\xab\\xd5\\xac\\0\"\n\t\"\\xd5\\xb4\\xd5\\xa1\\xd5\\xb5\\xd5\\xab\\xd5\\xbd\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd6\\x82\\xd5\\xb6\\xd5\\xab\\xd5\\xbd\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd6\\x82\\xd5\\xac\\xd5\\xab\\xd5\\xbd\\0\"\n\t\"\\xd6\\x85\\xd5\\xa3\\xd5\\xb8\\xd5\\xbd\\xd5\\xbf\\xd5\\xb8\\xd5\\xbd\\0\"\n\t\"\\xd5\\xbd\\xd5\\xa5\\xd5\\xba\\xd5\\xbf\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd5\\xaf\\xd5\\xbf\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\0\"\n\t\"\\xd5\\xb6\\xd5\\xb8\\xd5\\xb5\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\0\"\n\t\"\\xd5\\xa4\\xd5\\xa5\\xd5\\xaf\\xd5\\xbf\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd6\\x82\\xd5\\xb6\\xd5\\xbe\\xd5\\xa1\\xd6\\x80\\xd5\\xab\\0\"\n\t\"\\xd6\\x83\\xd5\\xa5\\xd5\\xbf\\xd6\\x80\\xd5\\xbe\\xd5\\xa1\\xd6\\x80\\xd5\\xab\\0\"\n\t\"\\xd5\\xb4\\xd5\\xa1\\xd6\\x80\\xd5\\xbf\\xd5\\xab\\0\"\n\t\"\\xd5\\xa1\\xd5\\xba\\xd6\\x80\\xd5\\xab\\xd5\\xac\\xd5\\xab\\0\"\n\t\"\\xd5\\xb4\\xd5\\xa1\\xd5\\xb5\\xd5\\xab\\xd5\\xbd\\xd5\\xab\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd6\\x82\\xd5\\xb6\\xd5\\xab\\xd5\\xbd\\xd5\\xab\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd6\\x82\\xd5\\xac\\xd5\\xab\\xd5\\xbd\\xd5\\xab\\0\"\n\t\"\\xd6\\x85\\xd5\\xa3\\xd5\\xb8\\xd5\\xbd\\xd5\\xbf\\xd5\\xb8\\xd5\\xbd\\xd5\\xab\\0\"\n\t\"\\xd5\\xbd\\xd5\\xa5\\xd5\\xba\\xd5\\xbf\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\xd5\\xab\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd5\\xaf\\xd5\\xbf\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\xd5\\xab\\0\"\n\t\"\\xd5\\xb6\\xd5\\xb8\\xd5\\xb5\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\xd5\\xab\\0\"\n\t\"\\xd5\\xa4\\xd5\\xa5\\xd5\\xaf\\xd5\\xbf\\xd5\\xa5\\xd5\\xb4\\xd5\\xa2\\xd5\\xa5\\xd6\\x80\\xd5\\xab\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb6\\xd5\\xbe\\0\"\n\t\"\\xd6\\x83\\xd5\\xbf\\xd5\\xbe\\0\"\n\t\"\\xd5\\xb4\\xd6\\x80\\xd5\\xbf\\0\"\n\t\"\\xd5\\xa1\\xd5\\xba\\xd6\\x80\\0\"\n\t\"\\xd5\\xb4\\xd5\\xb5\\xd5\\xbd\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb6\\xd5\\xbd\\0\"\n\t\"\\xd5\\xb0\\xd5\\xac\\xd5\\xbd\\0\"\n\t\"\\xd6\\x85\\xd5\\xa3\\xd5\\xbd\\0\"\n\t\"\\xd5\\xbd\\xd5\\xa5\\xd5\\xba\\0\"\n\t\"\\xd5\\xb0\\xd5\\xb8\\xd5\\xaf\\0\"\n\t\"\\xd5\\xb6\\xd5\\xb8\\xd5\\xb5\\0\"\n\t\"\\xd5\\xa4\\xd5\\xa5\\xd5\\xaf\\0\"\n\t\"bazar\\0\"\n\t\"bazar ert\\xc9\\x99si\\0\"\n\t\"\\xc3\\xa7\\xc9\\x99r\\xc5\\x9f\\xc9\\x99nb\\xc9\\x99 ax\\xc5\\x9f\\x61m\\xc4\\xb1\\0\"\n\t\"\\xc3\\xa7\\xc9\\x99r\\xc5\\x9f\\xc9\\x99nb\\xc9\\x99\\0\"\n\t\"c\\xc3\\xbcm\\xc9\\x99 ax\\xc5\\x9f\\x61m\\xc4\\xb1\\0\"\n\t\"c\\xc3\\xbcm\\xc9\\x99\\0\"\n\t\"\\xc5\\x9f\\xc9\\x99nb\\xc9\\x99\\0\"\n\t\"B.\\0\"\n\t\"B.E.\\0\"\n\t\"\\xc3\\x87.A.\\0\"\n\t\"\\xc3\\x87.\\0\"\n\t\"C.A.\\0\"\n\t\"C.\\0\"\n\t\"\\xc5\\x9e.\\0\"\n\t\"Yanvar\\0\"\n\t\"Fevral\\0\"\n\t\"Aprel\\0\"\n\t\"\\xc4\\xb0yun\\0\"\n\t\"\\xc4\\xb0yul\\0\"\n\t\"Avqust\\0\"\n\t\"Sentyabr\\0\"\n\t\"Oktyabr\\0\"\n\t\"Noyabr\\0\"\n\t\"Dekabr\\0\"\n\t\"yanvar\\0\"\n\t\"fevral\\0\"\n\t\"mart\\0\"\n\t\"aprel\\0\"\n\t\"may\\0\"\n\t\"iyun\\0\"\n\t\"iyul\\0\"\n\t\"avqust\\0\"\n\t\"sentyabr\\0\"\n\t\"oktyabr\\0\"\n\t\"noyabr\\0\"\n\t\"dekabr\\0\"\n\t\"yan\\0\"\n\t\"iyn\\0\"\n\t\"iyl\\0\"\n\t\"avq\\0\"\n\t\"sen\\0\"\n\t\"noy\\0\"\n\t\"dek\\0\"\n\t\"igandea\\0\"\n\t\"astelehena\\0\"\n\t\"asteartea\\0\"\n\t\"asteazkena\\0\"\n\t\"osteguna\\0\"\n\t\"ostirala\\0\"\n\t\"larunbata\\0\"\n\t\"ig.\\0\"\n\t\"al.\\0\"\n\t\"ar.\\0\"\n\t\"az.\\0\"\n\t\"og.\\0\"\n\t\"or.\\0\"\n\t\"lr.\\0\"\n\t\"I\\0\"\n\t\"urtarrila\\0\"\n\t\"Otsaila\\0\"\n\t\"Martxoa\\0\"\n\t\"Apirila\\0\"\n\t\"Maiatza\\0\"\n\t\"Ekaina\\0\"\n\t\"Uztaila\\0\"\n\t\"Abuztua\\0\"\n\t\"Iraila\\0\"\n\t\"Urria\\0\"\n\t\"Azaroa\\0\"\n\t\"Abendua\\0\"\n\t\"otsaila\\0\"\n\t\"martxoa\\0\"\n\t\"apirila\\0\"\n\t\"maiatza\\0\"\n\t\"ekaina\\0\"\n\t\"uztaila\\0\"\n\t\"abuztua\\0\"\n\t\"iraila\\0\"\n\t\"urria\\0\"\n\t\"azaroa\\0\"\n\t\"abendua\\0\"\n\t\"urt.\\0\"\n\t\"ots.\\0\"\n\t\"api.\\0\"\n\t\"mai.\\0\"\n\t\"eka.\\0\"\n\t\"uzt.\\0\"\n\t\"abu.\\0\"\n\t\"ira.\\0\"\n\t\"urr.\\0\"\n\t\"aza.\\0\"\n\t\"abe.\\0\"\n\t\"njed\\xc5\\xba\\x65la\\0\"\n\t\"p\\xc3\\xb3nd\\xc5\\xba\\x65la\\0\"\n\t\"wutora\\0\"\n\t\"srjeda\\0\"\n\t\"\\xc5\\xa1tw\\xc3\\xb3rtk\\0\"\n\t\"pjatk\\0\"\n\t\"nje\\0\"\n\t\"p\\xc3\\xb3n\\0\"\n\t\"wut\\0\"\n\t\"srj\\0\"\n\t\"\\xc5\\xa1tw\\0\"\n\t\"pja\\0\"\n\t\"sob\\0\"\n\t\"w\\0\"\n\t\"m\\xc4\\x9brc\\0\"\n\t\"apryl\\0\"\n\t\"meja\\0\"\n\t\"awgust\\0\"\n\t\"nowember\\0\"\n\t\"januara\\0\"\n\t\"februara\\0\"\n\t\"m\\xc4\\x9brca\\0\"\n\t\"apryla\\0\"\n\t\"meje\\0\"\n\t\"junija\\0\"\n\t\"julija\\0\"\n\t\"awgusta\\0\"\n\t\"oktobra\\0\"\n\t\"nowembra\\0\"\n\t\"m\\xc4\\x9br\\0\"\n\t\"mej\\0\"\n\t\"awg\\0\"\n\t\"now\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd0\\xbb\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82\\xd0\\xb2\\xd1\\x80\\xd1\\x82\\xd0\\xbe\\xd0\\xba\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb5\\xd1\\x82\\xd0\\xbe\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xb1\\xd0\\xbe\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4.\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbd.\\0\"\n\t\"\\xd0\\xb2\\xd1\\x82\\xd0\\xbe.\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xb5.\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82.\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb5\\xd1\\x82.\\0\"\n\t\"\\xd1\\x81\\xd0\\xb0\\xd0\\xb1.\\0\"\n\t\"\\xd1\\x98\\xd0\\xb0\\xd0\\xbd\\xd1\\x83\\xd0\\xb0\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x98\\0\"\n\t\"\\xd1\\x98\\xd1\\x83\\xd0\\xbd\\xd0\\xb8\\0\"\n\t\"\\xd1\\x98\\xd1\\x83\\xd0\\xbb\\xd0\\xb8\\0\"\n\t\"\\xd1\\x98\\xd0\\xb0\\xd0\\xbd.\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2.\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x80.\\0\"\n\t\"\\xd1\\x98\\xd1\\x83\\xd0\\xbd.\\0\"\n\t\"\\xd1\\x98\\xd1\\x83\\xd0\\xbb.\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbf\\xd1\\x82.\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd0\\xb5\\xd0\\xbc.\\0\"\n\t\"Sontaha\\0\"\n\t\"Mmantaha\\0\"\n\t\"Labobedi\\0\"\n\t\"Laboraru\\0\"\n\t\"Labone\\0\"\n\t\"Labohlane\\0\"\n\t\"Moqebelo\\0\"\n\t\"Son\\0\"\n\t\"Mma\\0\"\n\t\"Bed\\0\"\n\t\"Rar\\0\"\n\t\"Ne\\0\"\n\t\"Hla\\0\"\n\t\"Moq\\0\"\n\t\"Phesekgong\\0\"\n\t\"Hlakola\\0\"\n\t\"Hlakubele\\0\"\n\t\"Mmese\\0\"\n\t\"Motsheanong\\0\"\n\t\"Phupjane\\0\"\n\t\"Phupu\\0\"\n\t\"Phata\\0\"\n\t\"Leotshe\\0\"\n\t\"Mphalane\\0\"\n\t\"Pundungwane\\0\"\n\t\"Tshitwe\\0\"\n\t\"Phe\\0\"\n\t\"Kol\\0\"\n\t\"Ube\\0\"\n\t\"Mme\\0\"\n\t\"Mot\\0\"\n\t\"Upu\\0\"\n\t\"Pha\\0\"\n\t\"Leo\\0\"\n\t\"Mph\\0\"\n\t\"Pun\\0\"\n\t\"Tsh\\0\"\n\t\"Sonto\\0\"\n\t\"Musumbhunuku\\0\"\n\t\"Ravumbirhi\\0\"\n\t\"Ravunharhu\\0\"\n\t\"Ravumune\\0\"\n\t\"Ravuntlhanu\\0\"\n\t\"Mugqivela\\0\"\n\t\"Mus\\0\"\n\t\"Bir\\0\"\n\t\"Har\\0\"\n\t\"Tlh\\0\"\n\t\"Mug\\0\"\n\t\"Sunguti\\0\"\n\t\"Nyenyenyani\\0\"\n\t\"Nyenyankulu\\0\"\n\t\"Dzivamisoko\\0\"\n\t\"Mudyaxihi\\0\"\n\t\"Khotavuxika\\0\"\n\t\"Mawuwani\\0\"\n\t\"Mhawuri\\0\"\n\t\"Ndzhati\\0\"\n\t\"Nhlangula\\0\"\n\t\"Hukuri\\0\"\n\t\"N'wendzamhala\\0\"\n\t\"Yan\\0\"\n\t\"Kul\\0\"\n\t\"Dzi\\0\"\n\t\"Mud\\0\"\n\t\"Kho\\0\"\n\t\"Maw\\0\"\n\t\"Mha\\0\"\n\t\"Ndz\\0\"\n\t\"Nhl\\0\"\n\t\"Huk\\0\"\n\t\"N'w\\0\"\n\t\"Tshipi\\0\"\n\t\"Mosopulogo\\0\"\n\t\"Laboraro\\0\"\n\t\"Labotlhano\\0\"\n\t\"Matlhatso\\0\"\n\t\"Mos\\0\"\n\t\"Tla\\0\"\n\t\"Mat\\0\"\n\t\"Ferikgong\\0\"\n\t\"Tlhakole\\0\"\n\t\"Mopitlo\\0\"\n\t\"Moranang\\0\"\n\t\"Motsheganang\\0\"\n\t\"Seetebosigo\\0\"\n\t\"Phukwi\\0\"\n\t\"Phatwe\\0\"\n\t\"Lwetse\\0\"\n\t\"Diphalane\\0\"\n\t\"Ngwanatsele\\0\"\n\t\"Sedimonthole\\0\"\n\t\"Fer\\0\"\n\t\"Mop\\0\"\n\t\"Mor\\0\"\n\t\"See\\0\"\n\t\"Phu\\0\"\n\t\"Lwe\\0\"\n\t\"Dip\\0\"\n\t\"Ngw\\0\"\n\t\"Sed\\0\"\n\t\"Cawe\\0\"\n\t\"Mvulo\\0\"\n\t\"Lwesibini\\0\"\n\t\"Lwesithathu\\0\"\n\t\"Lwesine\\0\"\n\t\"Lwesihlanu\\0\"\n\t\"Mgqibelo\\0\"\n\t\"Caw\\0\"\n\t\"Mvu\\0\"\n\t\"Bin\\0\"\n\t\"Tha\\0\"\n\t\"Sin\\0\"\n\t\"Mgq\\0\"\n\t\"Janyuwari\\0\"\n\t\"Februwari\\0\"\n\t\"Matshi\\0\"\n\t\"Epreli\\0\"\n\t\"Meyi\\0\"\n\t\"Julayi\\0\"\n\t\"Agasti\\0\"\n\t\"Septemba\\0\"\n\t\"Okthoba\\0\"\n\t\"Novemba\\0\"\n\t\"Disemba\\0\"\n\t\"Epr\\0\"\n\t\"Mey\\0\"\n\t\"Aga\\0\"\n\t\"Dis\\0\"\n\t\"ISonto\\0\"\n\t\"UMsombuluko\\0\"\n\t\"ULwesibili\\0\"\n\t\"ULwesithathu\\0\"\n\t\"ULwesine\\0\"\n\t\"ULwesihlanu\\0\"\n\t\"UMgqibelo\\0\"\n\t\"Mso\\0\"\n\t\"Bil\\0\"\n\t\"B\\0\"\n\t\"Januwari\\0\"\n\t\"Mashi\\0\"\n\t\"Ephreli\\0\"\n\t\"Septhemba\\0\"\n\t\"UMasingana\\0\"\n\t\"Mas\\0\"\n\t\"Eph\\0\"\n\t\"Sondag\\0\"\n\t\"Maandag\\0\"\n\t\"Dinsdag\\0\"\n\t\"Woensdag\\0\"\n\t\"Donderdag\\0\"\n\t\"Vrydag\\0\"\n\t\"Saterdag\\0\"\n\t\"So.\\0\"\n\t\"Ma.\\0\"\n\t\"Di.\\0\"\n\t\"Wo.\\0\"\n\t\"Do.\\0\"\n\t\"Vr.\\0\"\n\t\"Sa.\\0\"\n\t\"Januarie\\0\"\n\t\"Februarie\\0\"\n\t\"Maart\\0\"\n\t\"Junie\\0\"\n\t\"Julie\\0\"\n\t\"Augustus\\0\"\n\t\"Jan.\\0\"\n\t\"Feb.\\0\"\n\t\"Mrt.\\0\"\n\t\"Apr.\\0\"\n\t\"Jun.\\0\"\n\t\"Jul.\\0\"\n\t\"Aug.\\0\"\n\t\"Sep.\\0\"\n\t\"Okt.\\0\"\n\t\"Nov.\\0\"\n\t\"Des.\\0\"\n\t\"\\xe1\\x83\\x99\\xe1\\x83\\x95\\xe1\\x83\\x98\\xe1\\x83\\xa0\\xe1\\x83\\x90\\0\"\n\t\"\\xe1\\x83\\x9d\\xe1\\x83\\xa0\\xe1\\x83\\xa8\\xe1\\x83\\x90\\xe1\\x83\\x91\\xe1\\x83\\x90\\xe1\\x83\\x97\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\xa1\\xe1\\x83\\x90\\xe1\\x83\\x9b\\xe1\\x83\\xa8\\xe1\\x83\\x90\\xe1\\x83\\x91\\xe1\\x83\\x90\\xe1\\x83\\x97\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9d\\xe1\\x83\\x97\\xe1\\x83\\xae\\xe1\\x83\\xa8\\xe1\\x83\\x90\\xe1\\x83\\x91\\xe1\\x83\\x90\\xe1\\x83\\x97\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\xae\\xe1\\x83\\xa3\\xe1\\x83\\x97\\xe1\\x83\\xa8\\xe1\\x83\\x90\\xe1\\x83\\x91\\xe1\\x83\\x90\\xe1\\x83\\x97\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9e\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x90\\xe1\\x83\\xa1\\xe1\\x83\\x99\\xe1\\x83\\x94\\xe1\\x83\\x95\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\xa8\\xe1\\x83\\x90\\xe1\\x83\\x91\\xe1\\x83\\x90\\xe1\\x83\\x97\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x99\\xe1\\x83\\x95\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9d\\xe1\\x83\\xa0\\xe1\\x83\\xa8\\0\"\n\t\"\\xe1\\x83\\xa1\\xe1\\x83\\x90\\xe1\\x83\\x9b\\0\"\n\t\"\\xe1\\x83\\x9d\\xe1\\x83\\x97\\xe1\\x83\\xae\\0\"\n\t\"\\xe1\\x83\\xae\\xe1\\x83\\xa3\\xe1\\x83\\x97\\0\"\n\t\"\\xe1\\x83\\x9e\\xe1\\x83\\x90\\xe1\\x83\\xa0\\0\"\n\t\"\\xe1\\x83\\xa8\\xe1\\x83\\x90\\xe1\\x83\\x91\\0\"\n\t\"\\xe1\\x83\\x99\\0\"\n\t\"\\xe1\\x83\\x9d\\0\"\n\t\"\\xe1\\x83\\xa1\\0\"\n\t\"\\xe1\\x83\\xae\\0\"\n\t\"\\xe1\\x83\\x9e\\0\"\n\t\"\\xe1\\x83\\xa8\\0\"\n\t\"\\xe1\\x83\\x98\\xe1\\x83\\x90\\xe1\\x83\\x9c\\xe1\\x83\\x95\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x97\\xe1\\x83\\x94\\xe1\\x83\\x91\\xe1\\x83\\x94\\xe1\\x83\\xa0\\xe1\\x83\\x95\\xe1\\x83\\x90\\xe1\\x83\\x9a\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9b\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\xa2\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x90\\xe1\\x83\\x9e\\xe1\\x83\\xa0\\xe1\\x83\\x98\\xe1\\x83\\x9a\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9b\\xe1\\x83\\x90\\xe1\\x83\\x98\\xe1\\x83\\xa1\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x98\\xe1\\x83\\x95\\xe1\\x83\\x9c\\xe1\\x83\\x98\\xe1\\x83\\xa1\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x98\\xe1\\x83\\x95\\xe1\\x83\\x9a\\xe1\\x83\\x98\\xe1\\x83\\xa1\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x90\\xe1\\x83\\x92\\xe1\\x83\\x95\\xe1\\x83\\x98\\xe1\\x83\\xa1\\xe1\\x83\\xa2\\xe1\\x83\\x9d\\0\"\n\t\"\\xe1\\x83\\xa1\\xe1\\x83\\x94\\xe1\\x83\\xa5\\xe1\\x83\\xa2\\xe1\\x83\\x94\\xe1\\x83\\x9b\\xe1\\x83\\x91\\xe1\\x83\\x94\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9d\\xe1\\x83\\xa5\\xe1\\x83\\xa2\\xe1\\x83\\x9d\\xe1\\x83\\x9b\\xe1\\x83\\x91\\xe1\\x83\\x94\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x9c\\xe1\\x83\\x9d\\xe1\\x83\\x94\\xe1\\x83\\x9b\\xe1\\x83\\x91\\xe1\\x83\\x94\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x93\\xe1\\x83\\x94\\xe1\\x83\\x99\\xe1\\x83\\x94\\xe1\\x83\\x9b\\xe1\\x83\\x91\\xe1\\x83\\x94\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x98\\xe1\\x83\\x90\\xe1\\x83\\x9c\\0\"\n\t\"\\xe1\\x83\\x97\\xe1\\x83\\x94\\xe1\\x83\\x91\\0\"\n\t\"\\xe1\\x83\\x9b\\xe1\\x83\\x90\\xe1\\x83\\xa0\\0\"\n\t\"\\xe1\\x83\\x90\\xe1\\x83\\x9e\\xe1\\x83\\xa0\\0\"\n\t\"\\xe1\\x83\\x9b\\xe1\\x83\\x90\\xe1\\x83\\x98\\0\"\n\t\"\\xe1\\x83\\x98\\xe1\\x83\\x95\\xe1\\x83\\x9c\\0\"\n\t\"\\xe1\\x83\\x98\\xe1\\x83\\x95\\xe1\\x83\\x9a\\0\"\n\t\"\\xe1\\x83\\x90\\xe1\\x83\\x92\\xe1\\x83\\x95\\0\"\n\t\"\\xe1\\x83\\xa1\\xe1\\x83\\x94\\xe1\\x83\\xa5\\0\"\n\t\"\\xe1\\x83\\x9d\\xe1\\x83\\xa5\\xe1\\x83\\xa2\\0\"\n\t\"\\xe1\\x83\\x9c\\xe1\\x83\\x9d\\xe1\\x83\\x94\\0\"\n\t\"\\xe1\\x83\\x93\\xe1\\x83\\x94\\xe1\\x83\\x99\\0\"\n\t\"m\\xc3\\xa1nadagur\\0\"\n\t\"t\\xc3\\xbdsdagur\\0\"\n\t\"mikudagur\\0\"\n\t\"h\\xc3\\xb3sdagur\\0\"\n\t\"fr\\xc3\\xadggjadagur\\0\"\n\t\"leygardagur\\0\"\n\t\"sun\\0\"\n\t\"m\\xc3\\xa1n\\0\"\n\t\"t\\xc3\\xbds\\0\"\n\t\"mik\\0\"\n\t\"h\\xc3\\xb3s\\0\"\n\t\"fr\\xc3\\xad\\0\"\n\t\"ley\\0\"\n\t\"\\xe0\\xa4\\xb0\\xe0\\xa4\\xb5\\xe0\\xa4\\xbf\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa5\\x8b\\xe0\\xa4\\xae\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x82\\xe0\\xa4\\x97\\xe0\\xa4\\xb2\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa5\\x81\\xe0\\xa4\\xa7\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x97\\xe0\\xa5\\x81\\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa5\\x81\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa4\\xa8\\xe0\\xa4\\xbf\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb0\\xe0\\xa4\\xb5\\xe0\\xa4\\xbf\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa5\\x8b\\xe0\\xa4\\xae\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x82\\xe0\\xa4\\x97\\xe0\\xa4\\xb2\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa5\\x81\\xe0\\xa4\\xa7\\0\"\n\t\"\\xe0\\xa4\\x97\\xe0\\xa5\\x81\\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa5\\x81\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa4\\xa8\\xe0\\xa4\\xbf\\0\"\n\t\"\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa5\\x8b\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x82\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa5\\x81\\0\"\n\t\"\\xe0\\xa4\\x97\\xe0\\xa5\\x81\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa5\\x81\\0\"\n\t\"\\xe0\\xa4\\xb6\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa4\\xa8\\xe0\\xa4\\xb5\\xe0\\xa4\\xb0\\xe0\\xa5\\x80\\0\"\n\t\"\\xe0\\xa4\\xab\\xe0\\xa4\\xbc\\xe0\\xa4\\xb0\\xe0\\xa4\\xb5\\xe0\\xa4\\xb0\\xe0\\xa5\\x80\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa5\\x8d\\xe0\\xa4\\x9a\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x88\\xe0\\xa4\\xb2\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x88\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa5\\x82\\xe0\\xa4\\xa8\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa5\\x81\\xe0\\xa4\\xb2\\xe0\\xa4\\xbe\\xe0\\xa4\\x88\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\x97\\xe0\\xa4\\xb8\\xe0\\xa5\\x8d\\xe0\\xa4\\xa4\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa4\\xbf\\xe0\\xa4\\xa4\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\xa4\\xe0\\xa5\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa4\\xb5\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa6\\xe0\\xa4\\xbf\\xe0\\xa4\\xb8\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa4\\xa8\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\xab\\xe0\\xa4\\xbc\\xe0\\xa4\\xb0\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa5\\x81\\xe0\\xa4\\xb2\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\x97\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa4\\xbf\\xe0\\xa4\\xa4\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\xa4\\xe0\\xa5\\x82\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa4\\xb5\\xe0\\xa5\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa6\\xe0\\xa4\\xbf\\xe0\\xa4\\xb8\\xe0\\xa5\\xb0\\0\"\n\t\"Il-\\xc4\\xa6\\x61\\x64\\x64\\0\"\n\t\"It-Tnejn\\0\"\n\t\"It-Tlieta\\0\"\n\t\"L-Erbg\\xc4\\xa7\\x61\\0\"\n\t\"Il-\\xc4\\xa6\\x61mis\\0\"\n\t\"Il-\\xc4\\xa0img\\xc4\\xa7\\x61\\0\"\n\t\"Is-Sibt\\0\"\n\t\"\\xc4\\xa6\\x61\\x64\\0\"\n\t\"Tne\\0\"\n\t\"Tli\\0\"\n\t\"Erb\\0\"\n\t\"\\xc4\\xa6\\x61m\\0\"\n\t\"\\xc4\\xa0im\\0\"\n\t\"Sib\\0\"\n\t\"\\xc4\\xa6\\x64\\0\"\n\t\"Tn\\0\"\n\t\"Tl\\0\"\n\t\"Er\\0\"\n\t\"\\xc4\\xa6m\\0\"\n\t\"\\xc4\\xa0m\\0\"\n\t\"Sb\\0\"\n\t\"Jannar\\0\"\n\t\"Frar\\0\"\n\t\"Marzu\\0\"\n\t\"Mejju\\0\"\n\t\"\\xc4\\xa0unju\\0\"\n\t\"Lulju\\0\"\n\t\"Awwissu\\0\"\n\t\"Settembru\\0\"\n\t\"Ottubru\\0\"\n\t\"Novembru\\0\"\n\t\"Di\\xc4\\x8b\\x65mbru\\0\"\n\t\"Fra\\0\"\n\t\"Mej\\0\"\n\t\"\\xc4\\xa0un\\0\"\n\t\"Lul\\0\"\n\t\"Aww\\0\"\n\t\"Set\\0\"\n\t\"Ott\\0\"\n\t\"Di\\xc4\\x8b\\0\"\n\t\"sotnabeaivi\\0\"\n\t\"vuoss\\xc3\\xa1rga\\0\"\n\t\"ma\\xc5\\x8b\\xc5\\x8b\\x65\\x62\\xc3\\xa1rga\\0\"\n\t\"gaskavahkku\\0\"\n\t\"duorasdat\\0\"\n\t\"bearjadat\\0\"\n\t\"l\\xc3\\xa1vvardat\\0\"\n\t\"sotn\\0\"\n\t\"vuos\\0\"\n\t\"ma\\xc5\\x8b\\0\"\n\t\"gask\\0\"\n\t\"duor\\0\"\n\t\"bear\\0\"\n\t\"l\\xc3\\xa1v\\0\"\n\t\"o\\xc4\\x91\\xc4\\x91\\x61jagem\\xc3\\xa1nnu\\0\"\n\t\"guovvam\\xc3\\xa1nnu\\0\"\n\t\"njuk\\xc4\\x8d\\x61m\\xc3\\xa1nnu\\0\"\n\t\"cuo\\xc5\\x8bom\\xc3\\xa1nnu\\0\"\n\t\"miessem\\xc3\\xa1nnu\\0\"\n\t\"geassem\\xc3\\xa1nnu\\0\"\n\t\"suoidnem\\xc3\\xa1nnu\\0\"\n\t\"borgem\\xc3\\xa1nnu\\0\"\n\t\"\\xc4\\x8d\\x61k\\xc4\\x8d\\x61m\\xc3\\xa1nnu\\0\"\n\t\"golggotm\\xc3\\xa1nnu\\0\"\n\t\"sk\\xc3\\xa1\\x62mam\\xc3\\xa1nnu\\0\"\n\t\"juovlam\\xc3\\xa1nnu\\0\"\n\t\"o\\xc4\\x91\\xc4\\x91j\\0\"\n\t\"guov\\0\"\n\t\"njuk\\0\"\n\t\"cuo\\0\"\n\t\"mies\\0\"\n\t\"geas\\0\"\n\t\"suoi\\0\"\n\t\"borg\\0\"\n\t\"\\xc4\\x8d\\x61k\\xc4\\x8d\\0\"\n\t\"golg\\0\"\n\t\"sk\\xc3\\xa1\\x62\\0\"\n\t\"juov\\0\"\n\t\"D\\xc3\\xa9 Domhnaigh\\0\"\n\t\"D\\xc3\\xa9 Luain\\0\"\n\t\"D\\xc3\\xa9 M\\xc3\\xa1irt\\0\"\n\t\"D\\xc3\\xa9 C\\xc3\\xa9\\x61\\x64\\x61oin\\0\"\n\t\"D\\xc3\\xa9\\x61rdaoin\\0\"\n\t\"D\\xc3\\xa9 hAoine\\0\"\n\t\"D\\xc3\\xa9 Sathairn\\0\"\n\t\"Domh\\0\"\n\t\"Luan\\0\"\n\t\"M\\xc3\\xa1irt\\0\"\n\t\"C\\xc3\\xa9\\x61\\x64\\0\"\n\t\"D\\xc3\\xa9\\x61r\\0\"\n\t\"Aoine\\0\"\n\t\"Sath\\0\"\n\t\"Ean\\xc3\\xa1ir\\0\"\n\t\"Feabhra\\0\"\n\t\"M\\xc3\\xa1rta\\0\"\n\t\"Aibre\\xc3\\xa1n\\0\"\n\t\"Bealtaine\\0\"\n\t\"Meitheamh\\0\"\n\t\"I\\xc3\\xbail\\0\"\n\t\"L\\xc3\\xbanasa\\0\"\n\t\"Me\\xc3\\xa1n F\\xc3\\xb3mhair\\0\"\n\t\"Deireadh F\\xc3\\xb3mhair\\0\"\n\t\"Samhain\\0\"\n\t\"Nollaig\\0\"\n\t\"Ean\\0\"\n\t\"Feabh\\0\"\n\t\"Aib\\0\"\n\t\"Beal\\0\"\n\t\"Meith\\0\"\n\t\"L\\xc3\\xban\\0\"\n\t\"MF\\xc3\\xb3mh\\0\"\n\t\"DF\\xc3\\xb3mh\\0\"\n\t\"Samh\\0\"\n\t\"Noll\\0\"\n\t\"Ahad\\0\"\n\t\"Isnin\\0\"\n\t\"Khamis\\0\"\n\t\"Jumaat\\0\"\n\t\"Ahd\\0\"\n\t\"Isn\\0\"\n\t\"Kha\\0\"\n\t\"Mac\\0\"\n\t\"Julai\\0\"\n\t\"Ogos\\0\"\n\t\"Disember\\0\"\n\t\"Ogo\\0\"\n\t\"\\xd0\\xb6\\xd0\\xb5\\xd0\\xba\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd0\\xb1\\xd1\\x96\\0\"\n\t\"\\xd0\\xb4\\xd2\\xaf\\xd0\\xb9\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd0\\xb1\\xd1\\x96\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xb9\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd0\\xb1\\xd1\\x96\\0\"\n\t\"\\xd1\\x81\\xd3\\x99\\xd1\\x80\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd0\\xb1\\xd1\\x96\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd0\\xb9\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd0\\xb1\\xd1\\x96\\0\"\n\t\"\\xd0\\xb6\\xd2\\xb1\\xd0\\xbc\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd0\\xb1\\xd1\\x96\\0\"\n\t\"\\xd0\\x96\\xd1\\x81\\0\"\n\t\"\\xd0\\x94\\xd1\\x81\\0\"\n\t\"\\xd0\\xa1\\xd1\\x81\\0\"\n\t\"\\xd0\\xa1\\xd1\\x80\\0\"\n\t\"\\xd0\\x91\\xd1\\x81\\0\"\n\t\"\\xd0\\x96\\xd0\\xbc\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb1\\0\"\n\t\"\\xd0\\x96\\0\"\n\t\"\\xd0\\x94\\0\"\n\t\"\\xd0\\x91\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd2\\xa3\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x90\\xd2\\x9b\\xd0\\xbf\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd0\\x9d\\xd0\\xb0\\xd1\\x83\\xd1\\x80\\xd1\\x8b\\xd0\\xb7\\0\"\n\t\"\\xd0\\xa1\\xd3\\x99\\xd1\\x83\\xd1\\x96\\xd1\\x80\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd0\\xbc\\xd1\\x8b\\xd1\\x80\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd1\\x83\\xd1\\x81\\xd1\\x8b\\xd0\\xbc\\0\"\n\t\"\\xd0\\xa8\\xd1\\x96\\xd0\\xbb\\xd0\\xb4\\xd0\\xb5\\0\"\n\t\"\\xd0\\xa2\\xd0\\xb0\\xd0\\xbc\\xd1\\x8b\\xd0\\xb7\\0\"\n\t\"\\xd2\\x9a\\xd1\\x8b\\xd1\\x80\\xd0\\xba\\xd2\\xaf\\xd0\\xb9\\xd0\\xb5\\xd0\\xba\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd1\\x80\\xd0\\xb0\\xd1\\x88\\xd0\\xb0\\0\"\n\t\"\\xd0\\x96\\xd0\\xb5\\xd0\\xbb\\xd1\\x82\\xd0\\xbe\\xd2\\x9b\\xd1\\x81\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd2\\x9b\\xd0\\xb0\\xd2\\xa3\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb0\\xd2\\x9b\\xd0\\xbf\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb0\\xd1\\x83\\xd1\\x80\\xd1\\x8b\\xd0\\xb7\\0\"\n\t\"\\xd1\\x81\\xd3\\x99\\xd1\\x83\\xd1\\x96\\xd1\\x80\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd0\\xbc\\xd1\\x8b\\xd1\\x80\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x83\\xd1\\x81\\xd1\\x8b\\xd0\\xbc\\0\"\n\t\"\\xd1\\x88\\xd1\\x96\\xd0\\xbb\\xd0\\xb4\\xd0\\xb5\\0\"\n\t\"\\xd1\\x82\\xd0\\xb0\\xd0\\xbc\\xd1\\x8b\\xd0\\xb7\\0\"\n\t\"\\xd2\\x9b\\xd1\\x8b\\xd1\\x80\\xd0\\xba\\xd2\\xaf\\xd0\\xb9\\xd0\\xb5\\xd0\\xba\\0\"\n\t\"\\xd2\\x9b\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd2\\x9b\\xd0\\xb0\\xd1\\x80\\xd0\\xb0\\xd1\\x88\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb6\\xd0\\xb5\\xd0\\xbb\\xd1\\x82\\xd0\\xbe\\xd2\\x9b\\xd1\\x81\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd2\\xa3.\\0\"\n\t\"\\xd0\\x90\\xd2\\x9b\\xd0\\xbf.\\0\"\n\t\"\\xd0\\x9d\\xd0\\xb0\\xd1\\x83.\\0\"\n\t\"\\xd0\\xa1\\xd3\\x99\\xd1\\x83.\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd0\\xbc.\\0\"\n\t\"\\xd0\\x9c\\xd0\\xb0\\xd1\\x83.\\0\"\n\t\"\\xd0\\xa8\\xd1\\x96\\xd0\\xbb.\\0\"\n\t\"\\xd0\\xa2\\xd0\\xb0\\xd0\\xbc.\\0\"\n\t\"\\xd2\\x9a\\xd1\\x8b\\xd1\\x80.\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd0\\xb7.\\0\"\n\t\"\\xd2\\x9a\\xd0\\xb0\\xd1\\x80.\\0\"\n\t\"\\xd0\\x96\\xd0\\xb5\\xd0\\xbb.\\0\"\n\t\"\\xd0\\xb6\\xd0\\xb5\\xd0\\xba\\xd1\\x88\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb4\\xd2\\xaf\\xd0\\xb9\\xd1\\x88\\xd3\\xa9\\xd0\\xbc\\xd0\\xb1\\xd2\\xaf\\0\"\n\t\"\\xd1\\x88\\xd0\\xb5\\xd0\\xb9\\xd1\\x88\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb8\\0\"\n\t\"\\xd1\\x88\\xd0\\xb0\\xd1\\x80\\xd1\\x88\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd0\\xb9\\xd1\\x88\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb6\\xd1\\x83\\xd0\\xbc\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb8\\xd1\\x88\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb6\\xd0\\xb5\\xd0\\xba.\\0\"\n\t\"\\xd0\\xb4\\xd2\\xaf\\xd0\\xb9.\\0\"\n\t\"\\xd1\\x88\\xd0\\xb5\\xd0\\xb9\\xd1\\x88.\\0\"\n\t\"\\xd1\\x88\\xd0\\xb0\\xd1\\x80\\xd1\\x88.\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb5\\xd0\\xb9\\xd1\\x88.\\0\"\n\t\"\\xd0\\xb8\\xd1\\x88\\xd0\\xbc.\\0\"\n\t\"\\xd0\\xa8\\0\"\n\t\"\\xd0\\x98\\0\"\n\t\"\\xd0\\xaf\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\xa4\\xd0\\xb5\\xd0\\xb2\\xd1\\x80\\xd0\\xb0\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"\\xd0\\x90\\xd0\\xbf\\xd1\\x80\\xd0\\xb5\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"\\xd0\\x98\\xd1\\x8e\\xd0\\xbd\\xd1\\x8c\\0\"\n\t\"\\xd0\\x98\\xd1\\x8e\\xd0\\xbb\\xd1\\x8c\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\x9e\\xd0\\xba\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\x9d\\xd0\\xbe\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"\\xd0\\x94\\xd0\\xb5\\xd0\\xba\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"Jumapili\\0\"\n\t\"Jumatatu\\0\"\n\t\"Jumanne\\0\"\n\t\"Jumatano\\0\"\n\t\"Alhamisi\\0\"\n\t\"Ijumaa\\0\"\n\t\"Jumamosi\\0\"\n\t\"Machi\\0\"\n\t\"Aprili\\0\"\n\t\"Agosti\\0\"\n\t\"Oktoba\\0\"\n\t\"Desemba\\0\"\n\t\"Ago\\0\"\n\t\"\\xc3\\xbd\\x65k\\xc5\\x9f\\x65nbe\\0\"\n\t\"du\\xc5\\x9f\\x65nbe\\0\"\n\t\"si\\xc5\\x9f\\x65nbe\\0\"\n\t\"\\xc3\\xa7\\x61r\\xc5\\x9f\\x65nbe\\0\"\n\t\"pen\\xc5\\x9f\\x65nbe\\0\"\n\t\"anna\\0\"\n\t\"\\xc5\\x9f\\x65nbe\\0\"\n\t\"\\xc3\\xbd\\x62\\0\"\n\t\"db\\0\"\n\t\"sb\\0\"\n\t\"\\xc3\\xa7\\x62\\0\"\n\t\"pb\\0\"\n\t\"\\xc5\\x9f\\x62\\0\"\n\t\"\\xc3\\x9d\\0\"\n\t\"\\xc5\\x9e\\0\"\n\t\"\\xc3\\xbd\\x61nwar\\0\"\n\t\"fewral\\0\"\n\t\"ma\\xc3\\xbd\\0\"\n\t\"i\\xc3\\xbdun\\0\"\n\t\"i\\xc3\\xbdul\\0\"\n\t\"sent\\xc3\\xbd\\x61\\x62r\\0\"\n\t\"okt\\xc3\\xbd\\x61\\x62r\\0\"\n\t\"no\\xc3\\xbd\\x61\\x62r\\0\"\n\t\"\\xc3\\xbd\\x61n\\0\"\n\t\"few\\0\"\n\t\"no\\xc3\\xbd\\0\"\n\t\"yakshanba\\0\"\n\t\"dushanba\\0\"\n\t\"seshanba\\0\"\n\t\"chorshanba\\0\"\n\t\"payshanba\\0\"\n\t\"juma\\0\"\n\t\"shanba\\0\"\n\t\"Yak\\0\"\n\t\"Dush\\0\"\n\t\"Sesh\\0\"\n\t\"Chor\\0\"\n\t\"Pay\\0\"\n\t\"Shan\\0\"\n\t\"Y\\0\"\n\t\"Iyun\\0\"\n\t\"Iyul\\0\"\n\t\"Avgust\\0\"\n\t\"Sentabr\\0\"\n\t\"Oktabr\\0\"\n\t\"sentabr\\0\"\n\t\"oktabr\\0\"\n\t\"Fev\\0\"\n\t\"Iyn\\0\"\n\t\"Iyl\\0\"\n\t\"Avg\\0\"\n\t\"Noy\\0\"\n\t\"Dek\\0\"\n\t\"\\xd1\\x8f\\xd0\\xba\\xd1\\x88\\xd3\\x99\\xd0\\xbc\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\xb4\\xd2\\xaf\\xd1\\x88\\xd3\\x99\\xd0\\xbc\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd1\\x81\\xd0\\xb8\\xd1\\x88\\xd3\\x99\\xd0\\xbc\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd1\\x87\\xd3\\x99\\xd1\\x80\\xd1\\x88\\xd3\\x99\\xd0\\xbc\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\xbf\\xd3\\x99\\xd0\\xbd\\xd2\\x97\\xd0\\xb5\\xd1\\x88\\xd3\\x99\\xd0\\xbc\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd2\\x97\\xd0\\xbe\\xd0\\xbc\\xd0\\xb3\\xd0\\xb0\\0\"\n\t\"\\xd1\\x88\\xd0\\xb8\\xd0\\xbc\\xd0\\xb1\\xd3\\x99\\0\"\n\t\"\\xd1\\x8f\\xd0\\xba\\xd1\\x88.\\0\"\n\t\"\\xd0\\xb4\\xd2\\xaf\\xd1\\x88.\\0\"\n\t\"\\xd1\\x81\\xd0\\xb8\\xd1\\x88.\\0\"\n\t\"\\xd1\\x87\\xd3\\x99\\xd1\\x80.\\0\"\n\t\"\\xd0\\xbf\\xd3\\x99\\xd0\\xbd\\xd2\\x97.\\0\"\n\t\"\\xd2\\x97\\xd0\\xbe\\xd0\\xbc.\\0\"\n\t\"\\xd1\\x88\\xd0\\xb8\\xd0\\xbc.\\0\"\n\t\"\\xd0\\xaf\\0\"\n\t\"\\xd2\\x96\\0\"\n\t\"\\xd0\\xb3\\xd1\\x8b\\xd0\\xb9\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb3\\xd1\\x8b\\xd0\\xb9\\xd0\\xbd.\\0\"\n\t\"\\xe0\\xa6\\xb0\\xe0\\xa6\\xac\\xe0\\xa6\\xbf\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb8\\xe0\\xa7\\x8b\\xe0\\xa6\\xae\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xae\\xe0\\xa6\\x99\\xe0\\xa7\\x8d\\xe0\\xa6\\x97\\xe0\\xa6\\xb2\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x81\\xe0\\xa6\\xa7\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x83\\xe0\\xa6\\xb9\\xe0\\xa6\\xb8\\xe0\\xa7\\x8d\\xe0\\xa6\\xaa\\xe0\\xa6\\xa4\\xe0\\xa6\\xbf\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa7\\x81\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa6\\xb0\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa6\\xa8\\xe0\\xa6\\xbf\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb0\\xe0\\xa6\\xac\\xe0\\xa6\\xbf\\0\"\n\t\"\\xe0\\xa6\\xb8\\xe0\\xa7\\x8b\\xe0\\xa6\\xae\\0\"\n\t\"\\xe0\\xa6\\xae\\xe0\\xa6\\x99\\xe0\\xa7\\x8d\\xe0\\xa6\\x97\\xe0\\xa6\\xb2\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x81\\xe0\\xa6\\xa7\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x83\\xe0\\xa6\\xb9\\xe0\\xa6\\xb8\\xe0\\xa7\\x8d\\xe0\\xa6\\xaa\\xe0\\xa6\\xa4\\xe0\\xa6\\xbf\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa7\\x81\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa6\\xa8\\xe0\\xa6\\xbf\\0\"\n\t\"\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb8\\xe0\\xa7\\x8b\\0\"\n\t\"\\xe0\\xa6\\xae\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x81\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x83\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa7\\x81\\0\"\n\t\"\\xe0\\xa6\\xb6\\0\"\n\t\"\\xe0\\xa6\\x9c\\xe0\\xa6\\xbe\\xe0\\xa6\\xa8\\xe0\\xa7\\x81\\xe0\\xa6\\xaf\\xe0\\xa6\\xbc\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\xe0\\xa7\\x80\\0\"\n\t\"\\xe0\\xa6\\xab\\xe0\\xa7\\x87\\xe0\\xa6\\xac\\xe0\\xa7\\x8d\\xe0\\xa6\\xb0\\xe0\\xa7\\x81\\xe0\\xa6\\xaf\\xe0\\xa6\\xbc\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\xe0\\xa7\\x80\\0\"\n\t\"\\xe0\\xa6\\xae\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\xe0\\xa7\\x8d\\xe0\\xa6\\x9a\\0\"\n\t\"\\xe0\\xa6\\x8f\\xe0\\xa6\\xaa\\xe0\\xa7\\x8d\\xe0\\xa6\\xb0\\xe0\\xa6\\xbf\\xe0\\xa6\\xb2\\0\"\n\t\"\\xe0\\xa6\\xae\\xe0\\xa7\\x87\\0\"\n\t\"\\xe0\\xa6\\x9c\\xe0\\xa7\\x81\\xe0\\xa6\\xa8\\0\"\n\t\"\\xe0\\xa6\\x9c\\xe0\\xa7\\x81\\xe0\\xa6\\xb2\\xe0\\xa6\\xbe\\xe0\\xa6\\x87\\0\"\n\t\"\\xe0\\xa6\\x86\\xe0\\xa6\\x97\\xe0\\xa6\\xb8\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\0\"\n\t\"\\xe0\\xa6\\xb8\\xe0\\xa7\\x87\\xe0\\xa6\\xaa\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\xe0\\xa7\\x87\\xe0\\xa6\\xae\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\x85\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\xe0\\xa7\\x8b\\xe0\\xa6\\xac\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xa8\\xe0\\xa6\\xad\\xe0\\xa7\\x87\\xe0\\xa6\\xae\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa6\\xa1\\xe0\\xa6\\xbf\\xe0\\xa6\\xb8\\xe0\\xa7\\x87\\xe0\\xa6\\xae\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa8\\x90\\xe0\\xa8\\xa4\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa9\\x8b\\xe0\\xa8\\xae\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xae\\xe0\\xa9\\xb0\\xe0\\xa8\\x97\\xe0\\xa8\\xb2\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xac\\xe0\\xa9\\x81\\xe0\\xa9\\xb1\\xe0\\xa8\\xa7\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xb5\\xe0\\xa9\\x80\\xe0\\xa8\\xb0\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xbc\\xe0\\xa9\\x81\\xe0\\xa9\\xb1\\xe0\\xa8\\x95\\xe0\\xa8\\xb0\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xbc\\xe0\\xa8\\xa8\\xe0\\xa8\\xbf\\xe0\\xa9\\xb1\\xe0\\xa8\\x9a\\xe0\\xa8\\xb0\\xe0\\xa8\\xb5\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\x90\\xe0\\xa8\\xa4\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa9\\x8b\\xe0\\xa8\\xae\\0\"\n\t\"\\xe0\\xa8\\xae\\xe0\\xa9\\xb0\\xe0\\xa8\\x97\\xe0\\xa8\\xb2\\0\"\n\t\"\\xe0\\xa8\\xac\\xe0\\xa9\\x81\\xe0\\xa9\\xb1\\xe0\\xa8\\xa7\\0\"\n\t\"\\xe0\\xa8\\xb5\\xe0\\xa9\\x80\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xbc\\xe0\\xa9\\x81\\xe0\\xa9\\xb1\\xe0\\xa8\\x95\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xbc\\xe0\\xa8\\xa8\\xe0\\xa8\\xbf\\xe0\\xa9\\xb1\\xe0\\xa8\\x9a\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\x90\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa9\\x8b\\0\"\n\t\"\\xe0\\xa8\\xae\\xe0\\xa9\\xb0\\0\"\n\t\"\\xe0\\xa8\\xac\\xe0\\xa9\\x81\\xe0\\xa9\\xb1\\0\"\n\t\"\\xe0\\xa8\\xb5\\xe0\\xa9\\x80\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xbc\\xe0\\xa9\\x81\\xe0\\xa9\\xb1\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xbc\\0\"\n\t\"\\xe0\\xa8\\x9c\\xe0\\xa8\\xa8\\xe0\\xa8\\xb5\\xe0\\xa8\\xb0\\xe0\\xa9\\x80\\0\"\n\t\"\\xe0\\xa8\\xab\\xe0\\xa8\\xbc\\xe0\\xa8\\xb0\\xe0\\xa8\\xb5\\xe0\\xa8\\xb0\\xe0\\xa9\\x80\\0\"\n\t\"\\xe0\\xa8\\xae\\xe0\\xa8\\xbe\\xe0\\xa8\\xb0\\xe0\\xa8\\x9a\\0\"\n\t\"\\xe0\\xa8\\x85\\xe0\\xa8\\xaa\\xe0\\xa9\\x8d\\xe0\\xa8\\xb0\\xe0\\xa9\\x88\\xe0\\xa8\\xb2\\0\"\n\t\"\\xe0\\xa8\\xae\\xe0\\xa8\\x88\\0\"\n\t\"\\xe0\\xa8\\x9c\\xe0\\xa9\\x82\\xe0\\xa8\\xa8\\0\"\n\t\"\\xe0\\xa8\\x9c\\xe0\\xa9\\x81\\xe0\\xa8\\xb2\\xe0\\xa8\\xbe\\xe0\\xa8\\x88\\0\"\n\t\"\\xe0\\xa8\\x85\\xe0\\xa8\\x97\\xe0\\xa8\\xb8\\xe0\\xa8\\xa4\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xa4\\xe0\\xa9\\xb0\\xe0\\xa8\\xac\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\x85\\xe0\\xa8\\x95\\xe0\\xa8\\xa4\\xe0\\xa9\\x82\\xe0\\xa8\\xac\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xa8\\xe0\\xa8\\xb5\\xe0\\xa9\\xb0\\xe0\\xa8\\xac\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\xa6\\xe0\\xa8\\xb8\\xe0\\xa9\\xb0\\xe0\\xa8\\xac\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\x9c\\xe0\\xa8\\xa8\\0\"\n\t\"\\xe0\\xa8\\xab\\xe0\\xa8\\xbc\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xa8\\x85\\xe0\\xa8\\xaa\\xe0\\xa9\\x8d\\xe0\\xa8\\xb0\\xe0\\xa9\\x88\\0\"\n\t\"\\xe0\\xa8\\x9c\\xe0\\xa9\\x81\\xe0\\xa8\\xb2\\xe0\\xa8\\xbe\\0\"\n\t\"\\xe0\\xa8\\x85\\xe0\\xa8\\x97\\0\"\n\t\"\\xe0\\xa8\\xb8\\xe0\\xa8\\xa4\\xe0\\xa9\\xb0\\0\"\n\t\"\\xe0\\xa8\\x85\\xe0\\xa8\\x95\\xe0\\xa8\\xa4\\xe0\\xa9\\x82\\0\"\n\t\"\\xe0\\xa8\\xa8\\xe0\\xa8\\xb5\\xe0\\xa9\\xb0\\0\"\n\t\"\\xe0\\xa8\\xa6\\xe0\\xa8\\xb8\\xe0\\xa9\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb0\\xe0\\xaa\\xb5\\xe0\\xaa\\xbf\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb8\\xe0\\xab\\x8b\\xe0\\xaa\\xae\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xae\\xe0\\xaa\\x82\\xe0\\xaa\\x97\\xe0\\xaa\\xb3\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xac\\xe0\\xab\\x81\\xe0\\xaa\\xa7\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\x97\\xe0\\xab\\x81\\xe0\\xaa\\xb0\\xe0\\xab\\x81\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb6\\xe0\\xab\\x81\\xe0\\xaa\\x95\\xe0\\xab\\x8d\\xe0\\xaa\\xb0\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb6\\xe0\\xaa\\xa8\\xe0\\xaa\\xbf\\xe0\\xaa\\xb5\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb0\\xe0\\xaa\\xb5\\xe0\\xaa\\xbf\\0\"\n\t\"\\xe0\\xaa\\xb8\\xe0\\xab\\x8b\\xe0\\xaa\\xae\\0\"\n\t\"\\xe0\\xaa\\xae\\xe0\\xaa\\x82\\xe0\\xaa\\x97\\xe0\\xaa\\xb3\\0\"\n\t\"\\xe0\\xaa\\xac\\xe0\\xab\\x81\\xe0\\xaa\\xa7\\0\"\n\t\"\\xe0\\xaa\\x97\\xe0\\xab\\x81\\xe0\\xaa\\xb0\\xe0\\xab\\x81\\0\"\n\t\"\\xe0\\xaa\\xb6\\xe0\\xab\\x81\\xe0\\xaa\\x95\\xe0\\xab\\x8d\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb6\\xe0\\xaa\\xa8\\xe0\\xaa\\xbf\\0\"\n\t\"\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xb8\\xe0\\xab\\x8b\\0\"\n\t\"\\xe0\\xaa\\xae\\xe0\\xaa\\x82\\0\"\n\t\"\\xe0\\xaa\\xac\\xe0\\xab\\x81\\0\"\n\t\"\\xe0\\xaa\\x97\\xe0\\xab\\x81\\0\"\n\t\"\\xe0\\xaa\\xb6\\xe0\\xab\\x81\\0\"\n\t\"\\xe0\\xaa\\xb6\\0\"\n\t\"\\xe0\\xaa\\x9c\\xe0\\xaa\\xbe\\xe0\\xaa\\xa8\\xe0\\xab\\x8d\\xe0\\xaa\\xaf\\xe0\\xab\\x81\\xe0\\xaa\\x86\\xe0\\xaa\\xb0\\xe0\\xab\\x80\\0\"\n\t\"\\xe0\\xaa\\xab\\xe0\\xab\\x87\\xe0\\xaa\\xac\\xe0\\xab\\x8d\\xe0\\xaa\\xb0\\xe0\\xab\\x81\\xe0\\xaa\\x86\\xe0\\xaa\\xb0\\xe0\\xab\\x80\\0\"\n\t\"\\xe0\\xaa\\xae\\xe0\\xaa\\xbe\\xe0\\xaa\\xb0\\xe0\\xab\\x8d\\xe0\\xaa\\x9a\\0\"\n\t\"\\xe0\\xaa\\x8f\\xe0\\xaa\\xaa\\xe0\\xab\\x8d\\xe0\\xaa\\xb0\\xe0\\xaa\\xbf\\xe0\\xaa\\xb2\\0\"\n\t\"\\xe0\\xaa\\xae\\xe0\\xab\\x87\\0\"\n\t\"\\xe0\\xaa\\x9c\\xe0\\xab\\x82\\xe0\\xaa\\xa8\\0\"\n\t\"\\xe0\\xaa\\x9c\\xe0\\xab\\x81\\xe0\\xaa\\xb2\\xe0\\xaa\\xbe\\xe0\\xaa\\x88\\0\"\n\t\"\\xe0\\xaa\\x91\\xe0\\xaa\\x97\\xe0\\xaa\\xb8\\xe0\\xab\\x8d\\xe0\\xaa\\x9f\\0\"\n\t\"\\xe0\\xaa\\xb8\\xe0\\xaa\\xaa\\xe0\\xab\\x8d\\xe0\\xaa\\x9f\\xe0\\xab\\x87\\xe0\\xaa\\xae\\xe0\\xab\\x8d\\xe0\\xaa\\xac\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\x91\\xe0\\xaa\\x95\\xe0\\xab\\x8d\\xe0\\xaa\\x9f\\xe0\\xab\\x8b\\xe0\\xaa\\xac\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xa8\\xe0\\xaa\\xb5\\xe0\\xab\\x87\\xe0\\xaa\\xae\\xe0\\xab\\x8d\\xe0\\xaa\\xac\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\xa1\\xe0\\xaa\\xbf\\xe0\\xaa\\xb8\\xe0\\xab\\x87\\xe0\\xaa\\xae\\xe0\\xab\\x8d\\xe0\\xaa\\xac\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xaa\\x9c\\xe0\\xaa\\xbe\\xe0\\xaa\\xa8\\xe0\\xab\\x8d\\xe0\\xaa\\xaf\\xe0\\xab\\x81\\0\"\n\t\"\\xe0\\xaa\\xab\\xe0\\xab\\x87\\xe0\\xaa\\xac\\xe0\\xab\\x8d\\xe0\\xaa\\xb0\\xe0\\xab\\x81\\0\"\n\t\"\\xe0\\xaa\\xb8\\xe0\\xaa\\xaa\\xe0\\xab\\x8d\\xe0\\xaa\\x9f\\xe0\\xab\\x87\\0\"\n\t\"\\xe0\\xaa\\x91\\xe0\\xaa\\x95\\xe0\\xab\\x8d\\xe0\\xaa\\x9f\\xe0\\xab\\x8b\\0\"\n\t\"\\xe0\\xaa\\xa8\\xe0\\xaa\\xb5\\xe0\\xab\\x87\\0\"\n\t\"\\xe0\\xaa\\xa1\\xe0\\xaa\\xbf\\xe0\\xaa\\xb8\\xe0\\xab\\x87\\0\"\n\t\"\\xe0\\xac\\xb0\\xe0\\xac\\xac\\xe0\\xac\\xbf\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xb8\\xe0\\xad\\x8b\\xe0\\xac\\xae\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xae\\xe0\\xac\\x99\\xe0\\xad\\x8d\\xe0\\xac\\x97\\xe0\\xac\\xb3\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xac\\xe0\\xad\\x81\\xe0\\xac\\xa7\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\x97\\xe0\\xad\\x81\\xe0\\xac\\xb0\\xe0\\xad\\x81\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xb6\\xe0\\xad\\x81\\xe0\\xac\\x95\\xe0\\xad\\x8d\\xe0\\xac\\xb0\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xb6\\xe0\\xac\\xa8\\xe0\\xac\\xbf\\xe0\\xac\\xac\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xb0\\xe0\\xac\\xac\\xe0\\xac\\xbf\\0\"\n\t\"\\xe0\\xac\\xb8\\xe0\\xad\\x8b\\xe0\\xac\\xae\\0\"\n\t\"\\xe0\\xac\\xae\\xe0\\xac\\x99\\xe0\\xad\\x8d\\xe0\\xac\\x97\\xe0\\xac\\xb3\\0\"\n\t\"\\xe0\\xac\\xac\\xe0\\xad\\x81\\xe0\\xac\\xa7\\0\"\n\t\"\\xe0\\xac\\x97\\xe0\\xad\\x81\\xe0\\xac\\xb0\\xe0\\xad\\x81\\0\"\n\t\"\\xe0\\xac\\xb6\\xe0\\xad\\x81\\xe0\\xac\\x95\\xe0\\xad\\x8d\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xb6\\xe0\\xac\\xa8\\xe0\\xac\\xbf\\0\"\n\t\"\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xb8\\xe0\\xad\\x8b\\0\"\n\t\"\\xe0\\xac\\xae\\0\"\n\t\"\\xe0\\xac\\xac\\xe0\\xad\\x81\\0\"\n\t\"\\xe0\\xac\\x97\\xe0\\xad\\x81\\0\"\n\t\"\\xe0\\xac\\xb6\\xe0\\xad\\x81\\0\"\n\t\"\\xe0\\xac\\xb6\\0\"\n\t\"\\xe0\\xac\\x9c\\xe0\\xac\\xbe\\xe0\\xac\\xa8\\xe0\\xad\\x81\\xe0\\xac\\x86\\xe0\\xac\\xb0\\xe0\\xad\\x80\\0\"\n\t\"\\xe0\\xac\\xab\\xe0\\xad\\x87\\xe0\\xac\\xac\\xe0\\xad\\x83\\xe0\\xac\\x86\\xe0\\xac\\xb0\\xe0\\xad\\x80\\0\"\n\t\"\\xe0\\xac\\xae\\xe0\\xac\\xbe\\xe0\\xac\\xb0\\xe0\\xad\\x8d\\xe0\\xac\\x9a\\xe0\\xad\\x8d\\xe0\\xac\\x9a\\0\"\n\t\"\\xe0\\xac\\x85\\xe0\\xac\\xaa\\xe0\\xad\\x8d\\xe0\\xac\\xb0\\xe0\\xad\\x87\\xe0\\xac\\xb2\\0\"\n\t\"\\xe0\\xac\\xae\\xe0\\xac\\x87\\0\"\n\t\"\\xe0\\xac\\x9c\\xe0\\xad\\x81\\xe0\\xac\\xa8\\0\"\n\t\"\\xe0\\xac\\x9c\\xe0\\xad\\x81\\xe0\\xac\\xb2\\xe0\\xac\\xbe\\xe0\\xac\\x87\\0\"\n\t\"\\xe0\\xac\\x85\\xe0\\xac\\x97\\xe0\\xac\\xb7\\xe0\\xad\\x8d\\xe0\\xac\\x9f\\0\"\n\t\"\\xe0\\xac\\xb8\\xe0\\xad\\x87\\xe0\\xac\\xaa\\xe0\\xad\\x8d\\xe0\\xac\\x9f\\xe0\\xad\\x87\\xe0\\xac\\xae\\xe0\\xad\\x8d\\xe0\\xac\\xac\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\x85\\xe0\\xac\\x95\\xe0\\xad\\x8d\\xe0\\xac\\x9f\\xe0\\xad\\x8b\\xe0\\xac\\xac\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xa8\\xe0\\xac\\xad\\xe0\\xad\\x87\\xe0\\xac\\xae\\xe0\\xad\\x8d\\xe0\\xac\\xac\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xac\\xa1\\xe0\\xac\\xbf\\xe0\\xac\\xb8\\xe0\\xad\\x87\\xe0\\xac\\xae\\xe0\\xad\\x8d\\xe0\\xac\\xac\\xe0\\xac\\xb0\\0\"\n\t\"\\xe0\\xae\\x9e\\xe0\\xae\\xbe\\xe0\\xae\\xaf\\xe0\\xae\\xbf\\xe0\\xae\\xb1\\xe0\\xaf\\x81\\0\"\n\t\"\\xe0\\xae\\xa4\\xe0\\xae\\xbf\\xe0\\xae\\x99\\xe0\\xaf\\x8d\\xe0\\xae\\x95\\xe0\\xae\\xb3\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x9a\\xe0\\xaf\\x86\\xe0\\xae\\xb5\\xe0\\xaf\\x8d\\xe0\\xae\\xb5\\xe0\\xae\\xbe\\xe0\\xae\\xaf\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\xaa\\xe0\\xaf\\x81\\xe0\\xae\\xa4\\xe0\\xae\\xa9\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\xb5\\xe0\\xae\\xbf\\xe0\\xae\\xaf\\xe0\\xae\\xbe\\xe0\\xae\\xb4\\xe0\\xae\\xa9\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\xb5\\xe0\\xaf\\x86\\xe0\\xae\\xb3\\xe0\\xaf\\x8d\\xe0\\xae\\xb3\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xae\\x9a\\xe0\\xae\\xa9\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xae\\x9e\\xe0\\xae\\xbe\\xe0\\xae\\xaf\\xe0\\xae\\xbf.\\0\"\n\t\"\\xe0\\xae\\xa4\\xe0\\xae\\xbf\\xe0\\xae\\x99\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\x9a\\xe0\\xaf\\x86\\xe0\\xae\\xb5\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\xaa\\xe0\\xaf\\x81\\xe0\\xae\\xa4.\\0\"\n\t\"\\xe0\\xae\\xb5\\xe0\\xae\\xbf\\xe0\\xae\\xaf\\xe0\\xae\\xbe.\\0\"\n\t\"\\xe0\\xae\\xb5\\xe0\\xaf\\x86\\xe0\\xae\\xb3\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\x9e\\xe0\\xae\\xbe\\0\"\n\t\"\\xe0\\xae\\xa4\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xae\\x9a\\xe0\\xaf\\x86\\0\"\n\t\"\\xe0\\xae\\xaa\\xe0\\xaf\\x81\\0\"\n\t\"\\xe0\\xae\\xb5\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xae\\xb5\\xe0\\xaf\\x86\\0\"\n\t\"\\xe0\\xae\\x9a\\0\"\n\t\"\\xe0\\xae\\x9c\\xe0\\xae\\xa9\\xe0\\xae\\xb5\\xe0\\xae\\xb0\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xae\\xaa\\xe0\\xae\\xbf\\xe0\\xae\\xaa\\xe0\\xaf\\x8d\\xe0\\xae\\xb0\\xe0\\xae\\xb5\\xe0\\xae\\xb0\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xae\\xae\\xe0\\xae\\xbe\\xe0\\xae\\xb0\\xe0\\xaf\\x8d\\xe0\\xae\\x9a\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x8f\\xe0\\xae\\xaa\\xe0\\xaf\\x8d\\xe0\\xae\\xb0\\xe0\\xae\\xb2\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\xae\\xe0\\xaf\\x87\\0\"\n\t\"\\xe0\\xae\\x9c\\xe0\\xaf\\x82\\xe0\\xae\\xa9\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x9c\\xe0\\xaf\\x82\\xe0\\xae\\xb2\\xe0\\xaf\\x88\\0\"\n\t\"\\xe0\\xae\\x86\\xe0\\xae\\x95\\xe0\\xae\\xb8\\xe0\\xaf\\x8d\\xe0\\xae\\x9f\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x9a\\xe0\\xaf\\x86\\xe0\\xae\\xaa\\xe0\\xaf\\x8d\\xe0\\xae\\x9f\\xe0\\xae\\xae\\xe0\\xaf\\x8d\\xe0\\xae\\xaa\\xe0\\xae\\xb0\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x85\\xe0\\xae\\x95\\xe0\\xaf\\x8d\\xe0\\xae\\x9f\\xe0\\xaf\\x8b\\xe0\\xae\\xaa\\xe0\\xae\\xb0\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\xa8\\xe0\\xae\\xb5\\xe0\\xae\\xae\\xe0\\xaf\\x8d\\xe0\\xae\\xaa\\xe0\\xae\\xb0\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x9f\\xe0\\xae\\xbf\\xe0\\xae\\x9a\\xe0\\xae\\xae\\xe0\\xaf\\x8d\\xe0\\xae\\xaa\\xe0\\xae\\xb0\\xe0\\xaf\\x8d\\0\"\n\t\"\\xe0\\xae\\x9c\\xe0\\xae\\xa9.\\0\"\n\t\"\\xe0\\xae\\xaa\\xe0\\xae\\xbf\\xe0\\xae\\xaa\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\xae\\xe0\\xae\\xbe\\xe0\\xae\\xb0\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\x8f\\xe0\\xae\\xaa\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\x86\\xe0\\xae\\x95.\\0\"\n\t\"\\xe0\\xae\\x9a\\xe0\\xaf\\x86\\xe0\\xae\\xaa\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\x85\\xe0\\xae\\x95\\xe0\\xaf\\x8d.\\0\"\n\t\"\\xe0\\xae\\xa8\\xe0\\xae\\xb5.\\0\"\n\t\"\\xe0\\xae\\x9f\\xe0\\xae\\xbf\\xe0\\xae\\x9a.\\0\"\n\t\"\\xe0\\xb0\\x86\\xe0\\xb0\\xa6\\xe0\\xb0\\xbf\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\xb8\\xe0\\xb1\\x8b\\xe0\\xb0\\xae\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\xae\\xe0\\xb0\\x82\\xe0\\xb0\\x97\\xe0\\xb0\\xb3\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\xac\\xe0\\xb1\\x81\\xe0\\xb0\\xa7\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\x97\\xe0\\xb1\\x81\\xe0\\xb0\\xb0\\xe0\\xb1\\x81\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\xb6\\xe0\\xb1\\x81\\xe0\\xb0\\x95\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\xb6\\xe0\\xb0\\xa8\\xe0\\xb0\\xbf\\xe0\\xb0\\xb5\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\x86\\xe0\\xb0\\xa6\\xe0\\xb0\\xbf\\0\"\n\t\"\\xe0\\xb0\\xb8\\xe0\\xb1\\x8b\\xe0\\xb0\\xae\\0\"\n\t\"\\xe0\\xb0\\xae\\xe0\\xb0\\x82\\xe0\\xb0\\x97\\xe0\\xb0\\xb3\\0\"\n\t\"\\xe0\\xb0\\xac\\xe0\\xb1\\x81\\xe0\\xb0\\xa7\\0\"\n\t\"\\xe0\\xb0\\x97\\xe0\\xb1\\x81\\xe0\\xb0\\xb0\\xe0\\xb1\\x81\\0\"\n\t\"\\xe0\\xb0\\xb6\\xe0\\xb1\\x81\\xe0\\xb0\\x95\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\0\"\n\t\"\\xe0\\xb0\\xb6\\xe0\\xb0\\xa8\\xe0\\xb0\\xbf\\0\"\n\t\"\\xe0\\xb0\\x86\\0\"\n\t\"\\xe0\\xb0\\xb8\\xe0\\xb1\\x8b\\0\"\n\t\"\\xe0\\xb0\\xae\\0\"\n\t\"\\xe0\\xb0\\xac\\xe0\\xb1\\x81\\0\"\n\t\"\\xe0\\xb0\\x97\\xe0\\xb1\\x81\\0\"\n\t\"\\xe0\\xb0\\xb6\\xe0\\xb1\\x81\\0\"\n\t\"\\xe0\\xb0\\xb6\\0\"\n\t\"\\xe0\\xb0\\x9c\\xe0\\xb0\\xa8\\xe0\\xb0\\xb5\\xe0\\xb0\\xb0\\xe0\\xb0\\xbf\\0\"\n\t\"\\xe0\\xb0\\xab\\xe0\\xb0\\xbf\\xe0\\xb0\\xac\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\xe0\\xb0\\xb5\\xe0\\xb0\\xb0\\xe0\\xb0\\xbf\\0\"\n\t\"\\xe0\\xb0\\xae\\xe0\\xb0\\xbe\\xe0\\xb0\\xb0\\xe0\\xb1\\x8d\\xe0\\xb0\\x9a\\xe0\\xb0\\xbf\\0\"\n\t\"\\xe0\\xb0\\x8f\\xe0\\xb0\\xaa\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\xe0\\xb0\\xbf\\xe0\\xb0\\xb2\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb0\\xae\\xe0\\xb1\\x87\\0\"\n\t\"\\xe0\\xb0\\x9c\\xe0\\xb1\\x82\\xe0\\xb0\\xa8\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb0\\x9c\\xe0\\xb1\\x81\\xe0\\xb0\\xb2\\xe0\\xb1\\x88\\0\"\n\t\"\\xe0\\xb0\\x86\\xe0\\xb0\\x97\\xe0\\xb0\\xb8\\xe0\\xb1\\x8d\\xe0\\xb0\\x9f\\xe0\\xb1\\x81\\0\"\n\t\"\\xe0\\xb0\\xb8\\xe0\\xb1\\x86\\xe0\\xb0\\xaa\\xe0\\xb1\\x8d\\xe0\\xb0\\x9f\\xe0\\xb1\\x86\\xe0\\xb0\\x82\\xe0\\xb0\\xac\\xe0\\xb0\\xb0\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb0\\x85\\xe0\\xb0\\x95\\xe0\\xb1\\x8d\\xe0\\xb0\\x9f\\xe0\\xb1\\x8b\\xe0\\xb0\\xac\\xe0\\xb0\\xb0\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb0\\xa8\\xe0\\xb0\\xb5\\xe0\\xb0\\x82\\xe0\\xb0\\xac\\xe0\\xb0\\xb0\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb0\\xa1\\xe0\\xb0\\xbf\\xe0\\xb0\\xb8\\xe0\\xb1\\x86\\xe0\\xb0\\x82\\xe0\\xb0\\xac\\xe0\\xb0\\xb0\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb0\\x9c\\xe0\\xb0\\xa8\\0\"\n\t\"\\xe0\\xb0\\xab\\xe0\\xb0\\xbf\\xe0\\xb0\\xac\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\0\"\n\t\"\\xe0\\xb0\\x8f\\xe0\\xb0\\xaa\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\xe0\\xb0\\xbf\\0\"\n\t\"\\xe0\\xb0\\xb8\\xe0\\xb1\\x86\\xe0\\xb0\\xaa\\xe0\\xb1\\x8d\\xe0\\xb0\\x9f\\xe0\\xb1\\x86\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\x85\\xe0\\xb0\\x95\\xe0\\xb1\\x8d\\xe0\\xb0\\x9f\\xe0\\xb1\\x8b\\0\"\n\t\"\\xe0\\xb0\\xa8\\xe0\\xb0\\xb5\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb0\\xa1\\xe0\\xb0\\xbf\\xe0\\xb0\\xb8\\xe0\\xb1\\x86\\xe0\\xb0\\x82\\0\"\n\t\"\\xe0\\xb2\\xad\\xe0\\xb2\\xbe\\xe0\\xb2\\xa8\\xe0\\xb3\\x81\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xb8\\xe0\\xb3\\x8b\\xe0\\xb2\\xae\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xae\\xe0\\xb2\\x82\\xe0\\xb2\\x97\\xe0\\xb2\\xb3\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xac\\xe0\\xb3\\x81\\xe0\\xb2\\xa7\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\x97\\xe0\\xb3\\x81\\xe0\\xb2\\xb0\\xe0\\xb3\\x81\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xb6\\xe0\\xb3\\x81\\xe0\\xb2\\x95\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xb6\\xe0\\xb2\\xa8\\xe0\\xb2\\xbf\\xe0\\xb2\\xb5\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xad\\xe0\\xb2\\xbe\\xe0\\xb2\\xa8\\xe0\\xb3\\x81\\0\"\n\t\"\\xe0\\xb2\\xb8\\xe0\\xb3\\x8b\\xe0\\xb2\\xae\\0\"\n\t\"\\xe0\\xb2\\xae\\xe0\\xb2\\x82\\xe0\\xb2\\x97\\xe0\\xb2\\xb3\\0\"\n\t\"\\xe0\\xb2\\xac\\xe0\\xb3\\x81\\xe0\\xb2\\xa7\\0\"\n\t\"\\xe0\\xb2\\x97\\xe0\\xb3\\x81\\xe0\\xb2\\xb0\\xe0\\xb3\\x81\\0\"\n\t\"\\xe0\\xb2\\xb6\\xe0\\xb3\\x81\\xe0\\xb2\\x95\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\xb6\\xe0\\xb2\\xa8\\xe0\\xb2\\xbf\\0\"\n\t\"\\xe0\\xb2\\xad\\xe0\\xb2\\xbe\\0\"\n\t\"\\xe0\\xb2\\xb8\\xe0\\xb3\\x8b\\0\"\n\t\"\\xe0\\xb2\\xae\\xe0\\xb2\\x82\\0\"\n\t\"\\xe0\\xb2\\xac\\xe0\\xb3\\x81\\0\"\n\t\"\\xe0\\xb2\\x97\\xe0\\xb3\\x81\\0\"\n\t\"\\xe0\\xb2\\xb6\\xe0\\xb3\\x81\\0\"\n\t\"\\xe0\\xb2\\xb6\\0\"\n\t\"\\xe0\\xb2\\x9c\\xe0\\xb2\\xa8\\xe0\\xb2\\xb5\\xe0\\xb2\\xb0\\xe0\\xb2\\xbf\\0\"\n\t\"\\xe0\\xb2\\xab\\xe0\\xb3\\x86\\xe0\\xb2\\xac\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\xe0\\xb2\\xb5\\xe0\\xb2\\xb0\\xe0\\xb2\\xbf\\0\"\n\t\"\\xe0\\xb2\\xae\\xe0\\xb2\\xbe\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\xe0\\xb2\\x9a\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\x8f\\xe0\\xb2\\xaa\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\xe0\\xb2\\xbf\\xe0\\xb2\\xb2\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\xae\\xe0\\xb3\\x87\\0\"\n\t\"\\xe0\\xb2\\x9c\\xe0\\xb3\\x82\\xe0\\xb2\\xa8\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\x9c\\xe0\\xb3\\x81\\xe0\\xb2\\xb2\\xe0\\xb3\\x88\\0\"\n\t\"\\xe0\\xb2\\x86\\xe0\\xb2\\x97\\xe0\\xb2\\xb8\\xe0\\xb3\\x8d\\xe0\\xb2\\x9f\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\xb8\\xe0\\xb3\\x86\\xe0\\xb2\\xaa\\xe0\\xb3\\x8d\\xe0\\xb2\\x9f\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\xe0\\xb2\\xac\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\x85\\xe0\\xb2\\x95\\xe0\\xb3\\x8d\\xe0\\xb2\\x9f\\xe0\\xb3\\x8b\\xe0\\xb2\\xac\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\xa8\\xe0\\xb2\\xb5\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\xe0\\xb2\\xac\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\xa1\\xe0\\xb2\\xbf\\xe0\\xb2\\xb8\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\xe0\\xb2\\xac\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb2\\x9c\\xe0\\xb2\\xa8\\0\"\n\t\"\\xe0\\xb2\\xab\\xe0\\xb3\\x86\\xe0\\xb2\\xac\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\0\"\n\t\"\\xe0\\xb2\\x8f\\xe0\\xb2\\xaa\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\xe0\\xb2\\xbf\\0\"\n\t\"\\xe0\\xb2\\x86\\xe0\\xb2\\x97\\0\"\n\t\"\\xe0\\xb2\\xb8\\xe0\\xb3\\x86\\xe0\\xb2\\xaa\\xe0\\xb3\\x8d\\xe0\\xb2\\x9f\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\0\"\n\t\"\\xe0\\xb2\\x85\\xe0\\xb2\\x95\\xe0\\xb3\\x8d\\xe0\\xb2\\x9f\\xe0\\xb3\\x8b\\0\"\n\t\"\\xe0\\xb2\\xa8\\xe0\\xb2\\xb5\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\0\"\n\t\"\\xe0\\xb2\\xa1\\xe0\\xb2\\xbf\\xe0\\xb2\\xb8\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\0\"\n\t\"\\xe0\\xb4\\x9e\\xe0\\xb4\\xbe\\xe0\\xb4\\xaf\\xe0\\xb4\\xb1\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\xa4\\xe0\\xb4\\xbf\\xe0\\xb4\\x99\\xe0\\xb5\\x8d\\xe0\\xb4\\x95\\xe0\\xb4\\xb3\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\x9a\\xe0\\xb5\\x8a\\xe0\\xb4\\xb5\\xe0\\xb5\\x8d\\xe0\\xb4\\xb5\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\xac\\xe0\\xb5\\x81\\xe0\\xb4\\xa7\\xe0\\xb4\\xa8\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\xb5\\xe0\\xb5\\x8d\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\xb5\\xe0\\xb5\\x86\\xe0\\xb4\\xb3\\xe0\\xb5\\x8d\\xe0\\xb4\\xb3\\xe0\\xb4\\xbf\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\xb6\\xe0\\xb4\\xa8\\xe0\\xb4\\xbf\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9a\\0\"\n\t\"\\xe0\\xb4\\x9e\\xe0\\xb4\\xbe\\xe0\\xb4\\xaf\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xb4\\xa4\\xe0\\xb4\\xbf\\xe0\\xb4\\x99\\xe0\\xb5\\x8d\\xe0\\xb4\\x95\\xe0\\xb5\\xbe\\0\"\n\t\"\\xe0\\xb4\\x9a\\xe0\\xb5\\x8a\\xe0\\xb4\\xb5\\xe0\\xb5\\x8d\\xe0\\xb4\\xb5\\0\"\n\t\"\\xe0\\xb4\\xac\\xe0\\xb5\\x81\\xe0\\xb4\\xa7\\xe0\\xb5\\xbb\\0\"\n\t\"\\xe0\\xb4\\xb5\\xe0\\xb5\\x8d\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\xe0\\xb4\\xb4\\xe0\\xb4\\x82\\0\"\n\t\"\\xe0\\xb4\\xb5\\xe0\\xb5\\x86\\xe0\\xb4\\xb3\\xe0\\xb5\\x8d\\xe0\\xb4\\xb3\\xe0\\xb4\\xbf\\0\"\n\t\"\\xe0\\xb4\\xb6\\xe0\\xb4\\xa8\\xe0\\xb4\\xbf\\0\"\n\t\"\\xe0\\xb4\\x9e\\xe0\\xb4\\xbe\\0\"\n\t\"\\xe0\\xb4\\xa4\\xe0\\xb4\\xbf\\0\"\n\t\"\\xe0\\xb4\\x9a\\xe0\\xb5\\x8a\\0\"\n\t\"\\xe0\\xb4\\xac\\xe0\\xb5\\x81\\0\"\n\t\"\\xe0\\xb4\\xb5\\xe0\\xb5\\x8d\\xe0\\xb4\\xaf\\xe0\\xb4\\xbe\\0\"\n\t\"\\xe0\\xb4\\xb5\\xe0\\xb5\\x86\\0\"\n\t\"\\xe0\\xb4\\xb6\\0\"\n\t\"\\xe0\\xb4\\x9c\\xe0\\xb4\\xa8\\xe0\\xb5\\x81\\xe0\\xb4\\xb5\\xe0\\xb4\\xb0\\xe0\\xb4\\xbf\\0\"\n\t\"\\xe0\\xb4\\xab\\xe0\\xb5\\x86\\xe0\\xb4\\xac\\xe0\\xb5\\x8d\\xe0\\xb4\\xb0\\xe0\\xb5\\x81\\xe0\\xb4\\xb5\\xe0\\xb4\\xb0\\xe0\\xb4\\xbf\\0\"\n\t\"\\xe0\\xb4\\xae\\xe0\\xb4\\xbe\\xe0\\xb5\\xbc\\xe0\\xb4\\x9a\\xe0\\xb5\\x8d\\xe0\\xb4\\x9a\\xe0\\xb5\\x8d\\0\"\n\t\"\\xe0\\xb4\\x8f\\xe0\\xb4\\xaa\\xe0\\xb5\\x8d\\xe0\\xb4\\xb0\\xe0\\xb4\\xbf\\xe0\\xb5\\xbd\\0\"\n\t\"\\xe0\\xb4\\xae\\xe0\\xb5\\x87\\xe0\\xb4\\xaf\\xe0\\xb5\\x8d\\0\"\n\t\"\\xe0\\xb4\\x9c\\xe0\\xb5\\x82\\xe0\\xb5\\xba\\0\"\n\t\"\\xe0\\xb4\\x9c\\xe0\\xb5\\x82\\xe0\\xb4\\xb2\\xe0\\xb5\\x88\\0\"\n\t\"\\xe0\\xb4\\x93\\xe0\\xb4\\x97\\xe0\\xb4\\xb8\\xe0\\xb5\\x8d\\xe0\\xb4\\xb1\\xe0\\xb5\\x8d\\xe0\\xb4\\xb1\\xe0\\xb5\\x8d\\0\"\n\t\"\\xe0\\xb4\\xb8\\xe0\\xb5\\x86\\xe0\\xb4\\xaa\\xe0\\xb5\\x8d\\xe0\\xb4\\xb1\\xe0\\xb5\\x8d\\xe0\\xb4\\xb1\\xe0\\xb4\\x82\\xe0\\xb4\\xac\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xb4\\x92\\xe0\\xb4\\x95\\xe0\\xb5\\x8d\\xe2\\x80\\x8c\\xe0\\xb4\\x9f\\xe0\\xb5\\x8b\\xe0\\xb4\\xac\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xb4\\xa8\\xe0\\xb4\\xb5\\xe0\\xb4\\x82\\xe0\\xb4\\xac\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xb4\\xa1\\xe0\\xb4\\xbf\\xe0\\xb4\\xb8\\xe0\\xb4\\x82\\xe0\\xb4\\xac\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xb4\\x9c\\xe0\\xb4\\xa8\\xe0\\xb5\\x81\\0\"\n\t\"\\xe0\\xb4\\xab\\xe0\\xb5\\x86\\xe0\\xb4\\xac\\xe0\\xb5\\x8d\\xe0\\xb4\\xb0\\xe0\\xb5\\x81\\0\"\n\t\"\\xe0\\xb4\\xae\\xe0\\xb4\\xbe\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xb4\\x8f\\xe0\\xb4\\xaa\\xe0\\xb5\\x8d\\xe0\\xb4\\xb0\\xe0\\xb4\\xbf\\0\"\n\t\"\\xe0\\xb4\\x93\\xe0\\xb4\\x97\\0\"\n\t\"\\xe0\\xb4\\xb8\\xe0\\xb5\\x86\\xe0\\xb4\\xaa\\xe0\\xb5\\x8d\\xe0\\xb4\\xb1\\xe0\\xb5\\x8d\\xe0\\xb4\\xb1\\xe0\\xb4\\x82\\0\"\n\t\"\\xe0\\xb4\\x92\\xe0\\xb4\\x95\\xe0\\xb5\\x8d\\xe0\\xb4\\x9f\\xe0\\xb5\\x8b\\0\"\n\t\"\\xe0\\xb4\\xa8\\xe0\\xb4\\xb5\\xe0\\xb4\\x82\\0\"\n\t\"\\xe0\\xb4\\xa1\\xe0\\xb4\\xbf\\xe0\\xb4\\xb8\\xe0\\xb4\\x82\\0\"\n\t\"\\xe0\\xa6\\xa6\\xe0\\xa7\\x87\\xe0\\xa6\\x93\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb8\\xe0\\xa7\\x8b\\xe0\\xa6\\xae\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xae\\xe0\\xa6\\x99\\xe0\\xa7\\x8d\\xe0\\xa6\\x97\\xe0\\xa6\\xb2\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x81\\xe0\\xa6\\xa7\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x83\\xe0\\xa6\\xb9\\xe0\\xa6\\xb7\\xe0\\xa7\\x8d\\xe0\\xa6\\xaa\\xe0\\xa6\\xa4\\xe0\\xa6\\xbf\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa7\\x81\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa7\\xb0\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa6\\xa8\\xe0\\xa6\\xbf\\xe0\\xa6\\xac\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa7\\xb0\\xe0\\xa6\\xac\\xe0\\xa6\\xbf\\0\"\n\t\"\\xe0\\xa6\\xac\\xe0\\xa7\\x83\\xe0\\xa6\\xb9\\xe0\\xa6\\xb7\\xe0\\xa7\\x8d\\xe0\\xa6\\xaa\\xe0\\xa6\\xa4\\xe0\\xa6\\xbf\\0\"\n\t\"\\xe0\\xa6\\xb6\\xe0\\xa7\\x81\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\x9c\\xe0\\xa6\\xbe\\xe0\\xa6\\xa8\\xe0\\xa7\\x81\\xe0\\xa7\\xb1\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\xe0\\xa7\\x80\\0\"\n\t\"\\xe0\\xa6\\xab\\xe0\\xa7\\x87\\xe0\\xa6\\xac\\xe0\\xa7\\x8d\\xe0\\xa7\\xb0\\xe0\\xa7\\x81\\xe0\\xa7\\xb1\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\xe0\\xa7\\x80\\0\"\n\t\"\\xe0\\xa6\\xae\\xe0\\xa6\\xbe\\xe0\\xa7\\xb0\\xe0\\xa7\\x8d\\xe0\\xa6\\x9a\\0\"\n\t\"\\xe0\\xa6\\x8f\\xe0\\xa6\\xaa\\xe0\\xa7\\x8d\\xe0\\xa7\\xb0\\xe0\\xa6\\xbf\\xe0\\xa6\\xb2\\0\"\n\t\"\\xe0\\xa6\\x86\\xe0\\xa6\\x97\\xe0\\xa6\\xb7\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\0\"\n\t\"\\xe0\\xa6\\x9b\\xe0\\xa7\\x87\\xe0\\xa6\\xaa\\xe0\\xa7\\x8d\\xe0\\xa6\\xa4\\xe0\\xa7\\x87\\xe0\\xa6\\xae\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\x85\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\xe0\\xa7\\x8b\\xe0\\xa6\\xac\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xa8\\xe0\\xa7\\xb1\\xe0\\xa7\\x87\\xe0\\xa6\\xae\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\xa1\\xe0\\xa6\\xbf\\xe0\\xa6\\x9a\\xe0\\xa7\\x87\\xe0\\xa6\\xae\\xe0\\xa7\\x8d\\xe0\\xa6\\xac\\xe0\\xa7\\xb0\\0\"\n\t\"\\xe0\\xa6\\x9c\\xe0\\xa6\\xbe\\xe0\\xa6\\xa8\\xe0\\xa7\\x81\\0\"\n\t\"\\xe0\\xa6\\xab\\xe0\\xa7\\x87\\xe0\\xa6\\xac\\xe0\\xa7\\x8d\\xe0\\xa7\\xb0\\xe0\\xa7\\x81\\0\"\n\t\"\\xe0\\xa6\\x86\\xe0\\xa6\\x97\\0\"\n\t\"\\xe0\\xa6\\xb8\\xe0\\xa7\\x87\\xe0\\xa6\\xaa\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\0\"\n\t\"\\xe0\\xa6\\x85\\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa6\\x9f\\xe0\\xa7\\x8b\\0\"\n\t\"\\xe0\\xa6\\xa8\\xe0\\xa6\\xad\\xe0\\xa7\\x87\\0\"\n\t\"\\xe0\\xa6\\xa1\\xe0\\xa6\\xbf\\xe0\\xa6\\xb8\\xe0\\xa7\\x87\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x82\\xe0\\xa4\\x97\\xe0\\xa4\\xb3\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x82\\xe0\\xa4\\x97\\xe0\\xa4\\xb3\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa4\\xbe\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa5\\x80\\0\"\n\t\"\\xe0\\xa4\\xab\\xe0\\xa5\\x87\\xe0\\xa4\\xac\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\xe0\\xa5\\x80\\0\"\n\t\"\\xe0\\xa4\\x8f\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa4\\xbf\\xe0\\xa4\\xb2\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa5\\x87\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa5\\x81\\xe0\\xa4\\xb2\\xe0\\xa5\\x88\\0\"\n\t\"\\xe0\\xa4\\x91\\xe0\\xa4\\x97\\xe0\\xa4\\xb8\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x91\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x8b\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x8b\\xe0\\xa4\\xb5\\xe0\\xa5\\x8d\\xe0\\xa4\\xb9\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa1\\xe0\\xa4\\xbf\\xe0\\xa4\\xb8\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa4\\xbe\\xe0\\xa4\\xa8\\xe0\\xa5\\x87\\0\"\n\t\"\\xe0\\xa4\\xab\\xe0\\xa5\\x87\\xe0\\xa4\\xac\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\0\"\n\t\"\\xe0\\xa4\\x8f\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa4\\xbf\\0\"\n\t\"\\xe0\\xa4\\x91\\xe0\\xa4\\x97\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\0\"\n\t\"\\xe0\\xa4\\x91\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x8b\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x8b\\xe0\\xa4\\xb5\\xe0\\xa5\\x8d\\xe0\\xa4\\xb9\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\0\"\n\t\"\\xe0\\xa4\\xa1\\xe0\\xa4\\xbf\\xe0\\xa4\\xb8\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\0\"\n\t\"\\xd0\\xbd\\xd1\\x8f\\xd0\\xbc\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb0\\xd0\\xb2\\xd0\\xb0\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbc\\xd1\\x8f\\xd0\\xb3\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xbb\\xd1\\x85\\xd0\\xb0\\xd0\\xb3\\xd0\\xb2\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbf\\xd2\\xaf\\xd1\\x80\\xd1\\x8d\\xd0\\xb2\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb0\\xd0\\xb0\\xd1\\x81\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd0\\xb1\\xd1\\x8f\\xd0\\xbc\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd0\\x9d\\xd1\\x8f\\0\"\n\t\"\\xd0\\x94\\xd0\\xb0\\0\"\n\t\"\\xd0\\x9c\\xd1\\x8f\\0\"\n\t\"\\xd0\\x9b\\xd1\\x85\\0\"\n\t\"\\xd0\\x9f\\xd2\\xaf\\0\"\n\t\"\\xd0\\x91\\xd0\\xb0\\0\"\n\t\"\\xd0\\x91\\xd1\\x8f\\0\"\n\t\"\\xd0\\x9d\\xd1\\x8d\\xd0\\xb3\\xd0\\xb4\\xd2\\xaf\\xd0\\xb3\\xd1\\x8d\\xd1\\x8d\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xa5\\xd0\\xbe\\xd1\\x91\\xd1\\x80\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x93\\xd1\\x83\\xd1\\x80\\xd0\\xb0\\xd0\\xb2\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x94\\xd3\\xa9\\xd1\\x80\\xd3\\xa9\\xd0\\xb2\\xd0\\xb4\\xd2\\xaf\\xd0\\xb3\\xd1\\x8d\\xd1\\x8d\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xa2\\xd0\\xb0\\xd0\\xb2\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x97\\xd1\\x83\\xd1\\x80\\xd0\\xb3\\xd0\\xb0\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x94\\xd0\\xbe\\xd0\\xbb\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x9d\\xd0\\xb0\\xd0\\xb9\\xd0\\xbc\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x95\\xd1\\x81\\xd0\\xb4\\xd2\\xaf\\xd0\\xb3\\xd1\\x8d\\xd1\\x8d\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x90\\xd1\\x80\\xd0\\xb0\\xd0\\xb2\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x90\\xd1\\x80\\xd0\\xb2\\xd0\\xb0\\xd0\\xbd \\xd0\\xbd\\xd1\\x8d\\xd0\\xb3\\xd0\\xb4\\xd2\\xaf\\xd0\\xb3\\xd1\\x8d\\xd1\\x8d\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x90\\xd1\\x80\\xd0\\xb2\\xd0\\xb0\\xd0\\xbd \\xd1\\x85\\xd0\\xbe\\xd1\\x91\\xd1\\x80\\xd0\\xb4\\xd1\\x83\\xd0\\xb3\\xd0\\xb0\\xd0\\xb0\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"1-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"2-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"3-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"4-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"5-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"6-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"7-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"8-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"9-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"10-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"11-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"12-\\xd1\\x80 \\xd1\\x81\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x98\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\x98\\xe0\\xbd\\xb2\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbd\\x98\\xe0\\xbd\\xa2\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\xa3\\xe0\\xbe\\xb7\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\x95\\xe0\\xbd\\xb4\\xe0\\xbd\\xa2\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\xe0\\xbd\\xa6\\xe0\\xbd\\x84\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x82\\xe0\\xbd\\x9f\\xe0\\xbd\\xa0\\xe0\\xbc\\x8b\\xe0\\xbd\\xa6\\xe0\\xbe\\xa4\\xe0\\xbd\\xba\\xe0\\xbd\\x93\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x98\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x98\\xe0\\xbd\\xb2\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbd\\x98\\xe0\\xbd\\xa2\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\xa3\\xe0\\xbe\\xb7\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x95\\xe0\\xbd\\xb4\\xe0\\xbd\\xa2\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\xe0\\xbd\\xa6\\xe0\\xbd\\x84\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\xa6\\xe0\\xbe\\xa4\\xe0\\xbd\\xba\\xe0\\xbd\\x93\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\0\"\n\t\"\\xe0\\xbd\\x98\\xe0\\xbd\\xb2\\xe0\\xbd\\x82\\0\"\n\t\"\\xe0\\xbd\\xa3\\xe0\\xbe\\xb7\\xe0\\xbd\\x82\\0\"\n\t\"\\xe0\\xbd\\x95\\xe0\\xbd\\xb4\\xe0\\xbd\\xa2\\0\"\n\t\"\\xe0\\xbd\\xa6\\xe0\\xbd\\x84\\xe0\\xbd\\xa6\\0\"\n\t\"\\xe0\\xbd\\xa6\\xe0\\xbe\\xa4\\xe0\\xbd\\xba\\xe0\\xbd\\x93\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbd\\x84\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbd\\xbc\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\xa6\\xe0\\xbd\\xb4\\xe0\\xbd\\x98\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x9e\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\xa3\\xe0\\xbe\\x94\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbe\\xb2\\xe0\\xbd\\xb4\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x91\\xe0\\xbd\\xb4\\xe0\\xbd\\x93\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\xa2\\xe0\\xbe\\x92\\xe0\\xbe\\xb1\\xe0\\xbd\\x91\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbd\\x82\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x85\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x85\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\x85\\xe0\\xbd\\xb2\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x85\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbc\\x8b\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbd\\x84\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\xe0\\xbd\\xbc\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\xa6\\xe0\\xbd\\xb4\\xe0\\xbd\\x98\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x9e\\xe0\\xbd\\xb2\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\xa3\\xe0\\xbe\\x94\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbe\\xb2\\xe0\\xbd\\xb4\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x91\\xe0\\xbd\\xb4\\xe0\\xbd\\x93\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\xa2\\xe0\\xbe\\x92\\xe0\\xbe\\xb1\\xe0\\xbd\\x91\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x91\\xe0\\xbd\\x82\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x85\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x85\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\x85\\xe0\\xbd\\xb2\\xe0\\xbd\\x82\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbc\\x8b\\xe0\\xbd\\x96\\xe0\\xbd\\x85\\xe0\\xbd\\xb4\\xe0\\xbc\\x8b\\xe0\\xbd\\x82\\xe0\\xbd\\x89\\xe0\\xbd\\xb2\\xe0\\xbd\\xa6\\xe0\\xbc\\x8b\\xe0\\xbd\\x94\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa1\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa2\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa3\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa4\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa5\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa6\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa7\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa8\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa9\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa1\\xe0\\xbc\\xa0\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa1\\xe0\\xbc\\xa1\\0\"\n\t\"\\xe0\\xbd\\x9f\\xe0\\xbe\\xb3\\xe0\\xbc\\x8b\\xe0\\xbc\\xa1\\xe0\\xbc\\xa2\\0\"\n\t\"Dydd Sul\\0\"\n\t\"Dydd Llun\\0\"\n\t\"Dydd Mawrth\\0\"\n\t\"Dydd Mercher\\0\"\n\t\"Dydd Iau\\0\"\n\t\"Dydd Gwener\\0\"\n\t\"Dydd Sadwrn\\0\"\n\t\"Sul\\0\"\n\t\"Llun\\0\"\n\t\"Mer\\0\"\n\t\"Iau\\0\"\n\t\"Gwe\\0\"\n\t\"Sad\\0\"\n\t\"Ll\\0\"\n\t\"Ionawr\\0\"\n\t\"Chwefror\\0\"\n\t\"Mawrth\\0\"\n\t\"Ebrill\\0\"\n\t\"Mehefin\\0\"\n\t\"Gorffennaf\\0\"\n\t\"Awst\\0\"\n\t\"Medi\\0\"\n\t\"Hydref\\0\"\n\t\"Tachwedd\\0\"\n\t\"Rhagfyr\\0\"\n\t\"Ion\\0\"\n\t\"Chw\\0\"\n\t\"Ebr\\0\"\n\t\"Meh\\0\"\n\t\"Gor\\0\"\n\t\"Hyd\\0\"\n\t\"Tach\\0\"\n\t\"Rhag\\0\"\n\t\"\\xe1\\x9e\\xa2\\xe1\\x9e\\xb6\\xe1\\x9e\\x91\\xe1\\x9e\\xb7\\xe1\\x9e\\x8f\\xe1\\x9f\\x92\\xe1\\x9e\\x99\\0\"\n\t\"\\xe1\\x9e\\x85\\xe1\\x9f\\x90\\xe1\\x9e\\x93\\xe1\\x9f\\x92\\xe1\\x9e\\x91\\0\"\n\t\"\\xe1\\x9e\\xa2\\xe1\\x9e\\x84\\xe1\\x9f\\x92\\xe1\\x9e\\x82\\xe1\\x9e\\xb6\\xe1\\x9e\\x9a\\0\"\n\t\"\\xe1\\x9e\\x96\\xe1\\x9e\\xbb\\xe1\\x9e\\x92\\0\"\n\t\"\\xe1\\x9e\\x96\\xe1\\x9f\\x92\\xe1\\x9e\\x9a\\xe1\\x9e\\xa0\\xe1\\x9e\\x9f\\xe1\\x9f\\x92\\xe1\\x9e\\x94\\xe1\\x9e\\x8f\\xe1\\x9e\\xb7\\xe1\\x9f\\x8d\\0\"\n\t\"\\xe1\\x9e\\x9f\\xe1\\x9e\\xbb\\xe1\\x9e\\x80\\xe1\\x9f\\x92\\xe1\\x9e\\x9a\\0\"\n\t\"\\xe1\\x9e\\x9f\\xe1\\x9f\\x85\\xe1\\x9e\\x9a\\xe1\\x9f\\x8d\\0\"\n\t\"\\xe1\\x9e\\xa2\\0\"\n\t\"\\xe1\\x9e\\x85\\0\"\n\t\"\\xe1\\x9e\\x96\\0\"\n\t\"\\xe1\\x9e\\x9f\\0\"\n\t\"\\xe1\\x9e\\x98\\xe1\\x9e\\x80\\xe1\\x9e\\x9a\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x80\\xe1\\x9e\\xbb\\xe1\\x9e\\x98\\xe1\\x9f\\x92\\xe1\\x9e\\x97\\xe1\\x9f\\x88\\0\"\n\t\"\\xe1\\x9e\\x98\\xe1\\x9e\\xb8\\xe1\\x9e\\x93\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x98\\xe1\\x9f\\x81\\xe1\\x9e\\x9f\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\xa7\\xe1\\x9e\\x9f\\xe1\\x9e\\x97\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x98\\xe1\\x9e\\xb7\\xe1\\x9e\\x90\\xe1\\x9e\\xbb\\xe1\\x9e\\x93\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x80\\xe1\\x9e\\x80\\xe1\\x9f\\x92\\xe1\\x9e\\x80\\xe1\\x9e\\x8a\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x9f\\xe1\\x9e\\xb8\\xe1\\x9e\\xa0\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x80\\xe1\\x9e\\x89\\xe1\\x9f\\x92\\xe1\\x9e\\x89\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x8f\\xe1\\x9e\\xbb\\xe1\\x9e\\x9b\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x9c\\xe1\\x9e\\xb7\\xe1\\x9e\\x85\\xe1\\x9f\\x92\\xe1\\x9e\\x86\\xe1\\x9e\\xb7\\xe1\\x9e\\x80\\xe1\\x9e\\xb6\\0\"\n\t\"\\xe1\\x9e\\x92\\xe1\\x9f\\x92\\xe1\\x9e\\x93\\xe1\\x9e\\xbc\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\xad\\xe0\\xba\\xb2\\xe0\\xba\\x97\\xe0\\xba\\xb4\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\x88\\xe0\\xba\\xb1\\xe0\\xba\\x99\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\xad\\xe0\\xba\\xb1\\xe0\\xba\\x87\\xe0\\xba\\x84\\xe0\\xba\\xb2\\xe0\\xba\\x99\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\x9e\\xe0\\xba\\xb8\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\x9e\\xe0\\xba\\xb0\\xe0\\xba\\xab\\xe0\\xba\\xb1\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\xaa\\xe0\\xba\\xb8\\xe0\\xba\\x81\\0\"\n\t\"\\xe0\\xba\\xa7\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xbb\\x80\\xe0\\xba\\xaa\\xe0\\xba\\xbb\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\xad\\xe0\\xba\\xb2\\xe0\\xba\\x97\\xe0\\xba\\xb4\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\x88\\xe0\\xba\\xb1\\xe0\\xba\\x99\\0\"\n\t\"\\xe0\\xba\\xad\\xe0\\xba\\xb1\\xe0\\xba\\x87\\xe0\\xba\\x84\\xe0\\xba\\xb2\\xe0\\xba\\x99\\0\"\n\t\"\\xe0\\xba\\x9e\\xe0\\xba\\xb8\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\x9e\\xe0\\xba\\xb0\\xe0\\xba\\xab\\xe0\\xba\\xb1\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\xaa\\xe0\\xba\\xb8\\xe0\\xba\\x81\\0\"\n\t\"\\xe0\\xbb\\x80\\xe0\\xba\\xaa\\xe0\\xba\\xbb\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\xad\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\x88\\0\"\n\t\"\\xe0\\xba\\xad\\0\"\n\t\"\\xe0\\xba\\x9e\\0\"\n\t\"\\xe0\\xba\\x9e\\xe0\\xba\\xab\\0\"\n\t\"\\xe0\\xba\\xaa\\xe0\\xba\\xb8\\0\"\n\t\"\\xe0\\xba\\xaa\\0\"\n\t\"\\xe0\\xba\\xa1\\xe0\\xba\\xb1\\xe0\\xba\\x87\\xe0\\xba\\x81\\xe0\\xba\\xad\\xe0\\xba\\x99\\0\"\n\t\"\\xe0\\xba\\x81\\xe0\\xba\\xb8\\xe0\\xba\\xa1\\xe0\\xba\\x9e\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\xa1\\xe0\\xba\\xb5\\xe0\\xba\\x99\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xbb\\x80\\xe0\\xba\\xa1\\xe0\\xba\\xaa\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\x9e\\xe0\\xba\\xb6\\xe0\\xba\\x94\\xe0\\xba\\xaa\\xe0\\xba\\xb0\\xe0\\xba\\x9e\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\xa1\\xe0\\xba\\xb4\\xe0\\xba\\x96\\xe0\\xba\\xb8\\xe0\\xba\\x99\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\x81\\xe0\\xbb\\x8d\\xe0\\xba\\xa5\\xe0\\xba\\xb0\\xe0\\xba\\x81\\xe0\\xba\\xbb\\xe0\\xba\\x94\\0\"\n\t\"\\xe0\\xba\\xaa\\xe0\\xba\\xb4\\xe0\\xba\\x87\\xe0\\xba\\xab\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\x81\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\x8d\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\x95\\xe0\\xba\\xb8\\xe0\\xba\\xa5\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\x9e\\xe0\\xba\\xb0\\xe0\\xba\\x88\\xe0\\xba\\xb4\\xe0\\xba\\x81\\0\"\n\t\"\\xe0\\xba\\x97\\xe0\\xba\\xb1\\xe0\\xba\\x99\\xe0\\xba\\xa7\\xe0\\xba\\xb2\\0\"\n\t\"\\xe0\\xba\\xa1.\\xe0\\xba\\x81.\\0\"\n\t\"\\xe0\\xba\\x81.\\xe0\\xba\\x9e.\\0\"\n\t\"\\xe0\\xba\\xa1.\\xe0\\xba\\x99.\\0\"\n\t\"\\xe0\\xba\\xa1.\\xe0\\xba\\xaa.\\0\"\n\t\"\\xe0\\xba\\x9e.\\xe0\\xba\\x9e.\\0\"\n\t\"\\xe0\\xba\\xa1\\xe0\\xba\\xb4.\\xe0\\xba\\x96.\\0\"\n\t\"\\xe0\\xba\\x81.\\xe0\\xba\\xa5.\\0\"\n\t\"\\xe0\\xba\\xaa.\\xe0\\xba\\xab.\\0\"\n\t\"\\xe0\\xba\\x81.\\xe0\\xba\\x8d.\\0\"\n\t\"\\xe0\\xba\\x95.\\xe0\\xba\\xa5.\\0\"\n\t\"\\xe0\\xba\\x9e.\\xe0\\xba\\x88.\\0\"\n\t\"\\xe0\\xba\\x97.\\xe0\\xba\\xa7.\\0\"\n\t\"\\xe1\\x80\\x90\\xe1\\x80\\x94\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\xb9\\xe1\\x80\\x82\\xe1\\x80\\x94\\xe1\\x80\\xbd\\xe1\\x80\\xb1\\0\"\n\t\"\\xe1\\x80\\x90\\xe1\\x80\\x94\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\xb9\\xe1\\x80\\x9c\\xe1\\x80\\xac\\0\"\n\t\"\\xe1\\x80\\xa1\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\xb9\\xe1\\x80\\x82\\xe1\\x80\\xab\\0\"\n\t\"\\xe1\\x80\\x97\\xe1\\x80\\xaf\\xe1\\x80\\x92\\xe1\\x80\\xb9\\xe1\\x80\\x93\\xe1\\x80\\x9f\\xe1\\x80\\xb0\\xe1\\x80\\xb8\\0\"\n\t\"\\xe1\\x80\\x80\\xe1\\x80\\xbc\\xe1\\x80\\xac\\xe1\\x80\\x9e\\xe1\\x80\\x95\\xe1\\x80\\x90\\xe1\\x80\\xb1\\xe1\\x80\\xb8\\0\"\n\t\"\\xe1\\x80\\x9e\\xe1\\x80\\xb1\\xe1\\x80\\xac\\xe1\\x80\\x80\\xe1\\x80\\xbc\\xe1\\x80\\xac\\0\"\n\t\"\\xe1\\x80\\x85\\xe1\\x80\\x94\\xe1\\x80\\xb1\\0\"\n\t\"\\xe1\\x80\\x90\\0\"\n\t\"\\xe1\\x80\\xa1\\0\"\n\t\"\\xe1\\x80\\x97\\0\"\n\t\"\\xe1\\x80\\x80\\0\"\n\t\"\\xe1\\x80\\x9e\\0\"\n\t\"\\xe1\\x80\\x85\\0\"\n\t\"\\xe1\\x80\\x87\\xe1\\x80\\x94\\xe1\\x80\\xba\\xe1\\x80\\x94\\xe1\\x80\\x9d\\xe1\\x80\\xab\\xe1\\x80\\x9b\\xe1\\x80\\xae\\0\"\n\t\"\\xe1\\x80\\x96\\xe1\\x80\\xb1\\xe1\\x80\\x96\\xe1\\x80\\xb1\\xe1\\x80\\xac\\xe1\\x80\\xba\\xe1\\x80\\x9d\\xe1\\x80\\xab\\xe1\\x80\\x9b\\xe1\\x80\\xae\\0\"\n\t\"\\xe1\\x80\\x99\\xe1\\x80\\x90\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\xa7\\xe1\\x80\\x95\\xe1\\x80\\xbc\\xe1\\x80\\xae\\0\"\n\t\"\\xe1\\x80\\x99\\xe1\\x80\\xb1\\0\"\n\t\"\\xe1\\x80\\x87\\xe1\\x80\\xbd\\xe1\\x80\\x94\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\x87\\xe1\\x80\\xb0\\xe1\\x80\\x9c\\xe1\\x80\\xad\\xe1\\x80\\xaf\\xe1\\x80\\x84\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\xa9\\xe1\\x80\\x82\\xe1\\x80\\xaf\\xe1\\x80\\x90\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\x85\\xe1\\x80\\x80\\xe1\\x80\\xba\\xe1\\x80\\x90\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\x98\\xe1\\x80\\xac\\0\"\n\t\"\\xe1\\x80\\xa1\\xe1\\x80\\xb1\\xe1\\x80\\xac\\xe1\\x80\\x80\\xe1\\x80\\xba\\xe1\\x80\\x90\\xe1\\x80\\xad\\xe1\\x80\\xaf\\xe1\\x80\\x98\\xe1\\x80\\xac\\0\"\n\t\"\\xe1\\x80\\x94\\xe1\\x80\\xad\\xe1\\x80\\xaf\\xe1\\x80\\x9d\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\x98\\xe1\\x80\\xac\\0\"\n\t\"\\xe1\\x80\\x92\\xe1\\x80\\xae\\xe1\\x80\\x87\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\x98\\xe1\\x80\\xac\\0\"\n\t\"\\xe1\\x80\\x87\\xe1\\x80\\x94\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\x96\\xe1\\x80\\xb1\\0\"\n\t\"\\xe1\\x80\\xa7\\0\"\n\t\"\\xe1\\x80\\x87\\xe1\\x80\\xb0\\0\"\n\t\"\\xe1\\x80\\xa9\\0\"\n\t\"\\xe1\\x80\\x85\\xe1\\x80\\x80\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\xa1\\xe1\\x80\\xb1\\xe1\\x80\\xac\\xe1\\x80\\x80\\xe1\\x80\\xba\\0\"\n\t\"\\xe1\\x80\\x94\\xe1\\x80\\xad\\xe1\\x80\\xaf\\0\"\n\t\"\\xe1\\x80\\x92\\xe1\\x80\\xae\\0\"\n\t\"luns\\0\"\n\t\"m\\xc3\\xa9rcores\\0\"\n\t\"xoves\\0\"\n\t\"venres\\0\"\n\t\"Dom.\\0\"\n\t\"Luns\\0\"\n\t\"Mar.\\0\"\n\t\"M\\xc3\\xa9r.\\0\"\n\t\"Xov.\\0\"\n\t\"Ven.\\0\"\n\t\"S\\xc3\\xa1\\x62.\\0\"\n\t\"Xaneiro\\0\"\n\t\"Febreiro\\0\"\n\t\"Marzo\\0\"\n\t\"Abril\\0\"\n\t\"Maio\\0\"\n\t\"Xu\\xc3\\xb1o\\0\"\n\t\"Xullo\\0\"\n\t\"Agosto\\0\"\n\t\"Setembro\\0\"\n\t\"Outubro\\0\"\n\t\"Novembro\\0\"\n\t\"Decembro\\0\"\n\t\"xaneiro\\0\"\n\t\"febreiro\\0\"\n\t\"xu\\xc3\\xb1o\\0\"\n\t\"xullo\\0\"\n\t\"decembro\\0\"\n\t\"Xan.\\0\"\n\t\"Abr.\\0\"\n\t\"Xul.\\0\"\n\t\"Ago.\\0\"\n\t\"Set.\\0\"\n\t\"Out.\\0\"\n\t\"Dec.\\0\"\n\t\"\\xe0\\xa4\\x86\\xe0\\xa4\\xa6\\xe0\\xa4\\xbf\\xe0\\xa4\\xa4\\xe0\\xa5\\x8d\\xe0\\xa4\\xaf\\xe0\\xa4\\xb5\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x82\\xe0\\xa4\\x97\\xe0\\xa4\\xb3\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x93\\xe0\\xa4\\x97\\xe0\\xa4\\xb8\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x93\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x8b\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xb6\\x89\\xe0\\xb6\\xbb\\xe0\\xb7\\x92\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb6\\xb3\\xe0\\xb7\\x94\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb6\\x85\\xe0\\xb6\\x9f\\xe0\\xb7\\x84\\xe0\\xb6\\xbb\\xe0\\xb7\\x94\\xe0\\xb7\\x80\\xe0\\xb7\\x8f\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb6\\xb6\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb6\\xb6\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x84\\xe0\\xb7\\x83\\xe0\\xb7\\x8a\\xe0\\xb6\\xb4\\xe0\\xb6\\xad\\xe0\\xb7\\x92\\xe0\\xb6\\xb1\\xe0\\xb7\\x8a\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x92\\xe0\\xb6\\x9a\\xe0\\xb7\\x94\\xe0\\xb6\\xbb\\xe0\\xb7\\x8f\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x99\\xe0\\xb6\\xb1\\xe0\\xb7\\x83\\xe0\\xb7\\x94\\xe0\\xb6\\xbb\\xe0\\xb7\\x8f\\xe0\\xb6\\xaf\\xe0\\xb7\\x8f\\0\"\n\t\"\\xe0\\xb6\\x85\\xe0\\xb6\\x9f\\xe0\\xb7\\x84\\0\"\n\t\"\\xe0\\xb6\\xb6\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x84\\xe0\\xb7\\x83\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x92\\xe0\\xb6\\x9a\\xe0\\xb7\\x94\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x99\\xe0\\xb6\\xb1\\0\"\n\t\"\\xe0\\xb6\\x89\\0\"\n\t\"\\xe0\\xb7\\x83\\0\"\n\t\"\\xe0\\xb6\\x85\\0\"\n\t\"\\xe0\\xb6\\xb6\\0\"\n\t\"\\xe0\\xb6\\xb6\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x92\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x99\\0\"\n\t\"\\xe0\\xb6\\xa2\\xe0\\xb6\\xb1\\xe0\\xb7\\x80\\xe0\\xb7\\x8f\\xe0\\xb6\\xbb\\xe0\\xb7\\x92\\0\"\n\t\"\\xe0\\xb6\\xb4\\xe0\\xb7\\x99\\xe0\\xb6\\xb6\\xe0\\xb6\\xbb\\xe0\\xb7\\x80\\xe0\\xb7\\x8f\\xe0\\xb6\\xbb\\xe0\\xb7\\x92\\0\"\n\t\"\\xe0\\xb6\\xb8\\xe0\\xb7\\x8f\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\xe0\\xb6\\xad\\xe0\\xb7\\x94\\0\"\n\t\"\\xe0\\xb6\\x85\\xe0\\xb6\\xb4\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x9a\\xe0\\xb6\\xbd\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\xb8\\xe0\\xb7\\x90\\xe0\\xb6\\xba\\xe0\\xb7\\x92\\0\"\n\t\"\\xe0\\xb6\\xa2\\xe0\\xb7\\x96\\xe0\\xb6\\xb1\\xe0\\xb7\\x92\\0\"\n\t\"\\xe0\\xb6\\xa2\\xe0\\xb7\\x96\\xe0\\xb6\\xbd\\xe0\\xb7\\x92\\0\"\n\t\"\\xe0\\xb6\\x85\\xe0\\xb6\\x9c\\xe0\\xb7\\x9d\\xe0\\xb7\\x83\\xe0\\xb7\\x8a\\xe0\\xb6\\xad\\xe0\\xb7\\x94\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x90\\xe0\\xb6\\xb4\\xe0\\xb7\\x8a\\xe0\\xb6\\xad\\xe0\\xb7\\x90\\xe0\\xb6\\xb8\\xe0\\xb7\\x8a\\xe0\\xb6\\xb6\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\x94\\xe0\\xb6\\x9a\\xe0\\xb7\\x8a\\xe0\\xb6\\xad\\xe0\\xb7\\x9d\\xe0\\xb6\\xb6\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\xb1\\xe0\\xb7\\x9c\\xe0\\xb7\\x80\\xe0\\xb7\\x90\\xe0\\xb6\\xb8\\xe0\\xb7\\x8a\\xe0\\xb6\\xb6\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\xaf\\xe0\\xb7\\x99\\xe0\\xb7\\x83\\xe0\\xb7\\x90\\xe0\\xb6\\xb8\\xe0\\xb7\\x8a\\xe0\\xb6\\xb6\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\xa2\\xe0\\xb6\\xb1\\0\"\n\t\"\\xe0\\xb6\\xb4\\xe0\\xb7\\x99\\xe0\\xb6\\xb6\\0\"\n\t\"\\xe0\\xb6\\xb8\\xe0\\xb7\\x8f\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\x85\\xe0\\xb6\\x9c\\xe0\\xb7\\x9d\\0\"\n\t\"\\xe0\\xb7\\x83\\xe0\\xb7\\x90\\xe0\\xb6\\xb4\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\x94\\xe0\\xb6\\x9a\\xe0\\xb7\\x8a\\0\"\n\t\"\\xe0\\xb6\\xb1\\xe0\\xb7\\x9c\\xe0\\xb7\\x80\\xe0\\xb7\\x90\\0\"\n\t\"\\xe0\\xb6\\xaf\\xe0\\xb7\\x99\\xe0\\xb7\\x83\\xe0\\xb7\\x90\\0\"\n\t\"\\xe1\\x8e\\xa4\\xe1\\x8e\\xbe\\xe1\\x8f\\x99\\xe1\\x8f\\x93\\xe1\\x8f\\x86\\xe1\\x8f\\x8d\\xe1\\x8e\\xac\\0\"\n\t\"\\xe1\\x8e\\xa4\\xe1\\x8e\\xbe\\xe1\\x8f\\x99\\xe1\\x8f\\x93\\xe1\\x8f\\x89\\xe1\\x8f\\x85\\xe1\\x8e\\xaf\\0\"\n\t\"\\xe1\\x8f\\x94\\xe1\\x8e\\xb5\\xe1\\x8f\\x81\\xe1\\x8e\\xa2\\xe1\\x8e\\xa6\\0\"\n\t\"\\xe1\\x8f\\xa6\\xe1\\x8e\\xa2\\xe1\\x8f\\x81\\xe1\\x8e\\xa2\\xe1\\x8e\\xa6\\0\"\n\t\"\\xe1\\x8f\\x85\\xe1\\x8e\\xa9\\xe1\\x8f\\x81\\xe1\\x8e\\xa2\\xe1\\x8e\\xa6\\0\"\n\t\"\\xe1\\x8f\\xa7\\xe1\\x8e\\xbe\\xe1\\x8e\\xa9\\xe1\\x8e\\xb6\\xe1\\x8f\\x8d\\xe1\\x8f\\x97\\0\"\n\t\"\\xe1\\x8e\\xa4\\xe1\\x8e\\xbe\\xe1\\x8f\\x99\\xe1\\x8f\\x93\\xe1\\x8f\\x88\\xe1\\x8f\\x95\\xe1\\x8e\\xbe\\0\"\n\t\"\\xe1\\x8f\\x86\\xe1\\x8f\\x8d\\xe1\\x8e\\xac\\0\"\n\t\"\\xe1\\x8f\\x89\\xe1\\x8f\\x85\\xe1\\x8e\\xaf\\0\"\n\t\"\\xe1\\x8f\\x94\\xe1\\x8e\\xb5\\xe1\\x8f\\x81\\0\"\n\t\"\\xe1\\x8f\\xa6\\xe1\\x8e\\xa2\\xe1\\x8f\\x81\\0\"\n\t\"\\xe1\\x8f\\x85\\xe1\\x8e\\xa9\\xe1\\x8f\\x81\\0\"\n\t\"\\xe1\\x8f\\xa7\\xe1\\x8e\\xbe\\xe1\\x8e\\xa9\\0\"\n\t\"\\xe1\\x8f\\x88\\xe1\\x8f\\x95\\xe1\\x8e\\xbe\\0\"\n\t\"\\xe1\\x8f\\x86\\0\"\n\t\"\\xe1\\x8f\\x89\\0\"\n\t\"\\xe1\\x8f\\x94\\0\"\n\t\"\\xe1\\x8f\\xa6\\0\"\n\t\"\\xe1\\x8f\\x85\\0\"\n\t\"\\xe1\\x8f\\xa7\\0\"\n\t\"\\xe1\\x8e\\xa4\\0\"\n\t\"\\xe1\\x8e\\xa4\\xe1\\x8f\\x83\\xe1\\x8e\\xb8\\xe1\\x8f\\x94\\xe1\\x8f\\x85\\0\"\n\t\"\\xe1\\x8e\\xa7\\xe1\\x8e\\xa6\\xe1\\x8e\\xb5\\0\"\n\t\"\\xe1\\x8e\\xa0\\xe1\\x8f\\x85\\xe1\\x8f\\xb1\\0\"\n\t\"\\xe1\\x8e\\xa7\\xe1\\x8f\\xac\\xe1\\x8f\\x82\\0\"\n\t\"\\xe1\\x8e\\xa0\\xe1\\x8f\\x82\\xe1\\x8f\\x8d\\xe1\\x8e\\xac\\xe1\\x8f\\x98\\0\"\n\t\"\\xe1\\x8f\\x95\\xe1\\x8e\\xad\\xe1\\x8e\\xb7\\xe1\\x8f\\xb1\\0\"\n\t\"\\xe1\\x8e\\xab\\xe1\\x8f\\xb0\\xe1\\x8f\\x89\\xe1\\x8f\\x82\\0\"\n\t\"\\xe1\\x8e\\xa6\\xe1\\x8e\\xb6\\xe1\\x8f\\x82\\0\"\n\t\"\\xe1\\x8f\\x9a\\xe1\\x8e\\xb5\\xe1\\x8f\\x8d\\xe1\\x8f\\x97\\0\"\n\t\"\\xe1\\x8f\\x9a\\xe1\\x8f\\x82\\xe1\\x8f\\x85\\xe1\\x8f\\x97\\0\"\n\t\"\\xe1\\x8f\\x85\\xe1\\x8f\\x93\\xe1\\x8f\\x95\\xe1\\x8f\\x86\\0\"\n\t\"\\xe1\\x8e\\xa5\\xe1\\x8f\\x8d\\xe1\\x8e\\xa9\\xe1\\x8f\\xb1\\0\"\n\t\"\\xe1\\x8e\\xa4\\xe1\\x8f\\x83\\0\"\n\t\"\\xe1\\x8e\\xa7\\xe1\\x8e\\xa6\\0\"\n\t\"\\xe1\\x8e\\xa0\\xe1\\x8f\\x85\\0\"\n\t\"\\xe1\\x8e\\xa7\\xe1\\x8f\\xac\\0\"\n\t\"\\xe1\\x8e\\xa0\\xe1\\x8f\\x82\\0\"\n\t\"\\xe1\\x8f\\x95\\xe1\\x8e\\xad\\0\"\n\t\"\\xe1\\x8e\\xab\\xe1\\x8f\\xb0\\0\"\n\t\"\\xe1\\x8e\\xa6\\xe1\\x8e\\xb6\\0\"\n\t\"\\xe1\\x8f\\x9a\\xe1\\x8e\\xb5\\0\"\n\t\"\\xe1\\x8f\\x9a\\xe1\\x8f\\x82\\0\"\n\t\"\\xe1\\x8f\\x85\\xe1\\x8f\\x93\\0\"\n\t\"\\xe1\\x8e\\xa5\\xe1\\x8f\\x8d\\0\"\n\t\"\\xe1\\x8a\\xa5\\xe1\\x88\\x91\\xe1\\x8b\\xb5\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x8a\\x9e\\0\"\n\t\"\\xe1\\x88\\x9b\\xe1\\x8a\\xad\\xe1\\x88\\xb0\\xe1\\x8a\\x9e\\0\"\n\t\"\\xe1\\x88\\xa8\\xe1\\x89\\xa1\\xe1\\x8b\\x95\\0\"\n\t\"\\xe1\\x88\\x90\\xe1\\x88\\x99\\xe1\\x88\\xb5\\0\"\n\t\"\\xe1\\x8b\\x93\\xe1\\x88\\xad\\xe1\\x89\\xa5\\0\"\n\t\"\\xe1\\x89\\x85\\xe1\\x8b\\xb3\\xe1\\x88\\x9c\\0\"\n\t\"\\xe1\\x88\\x9b\\xe1\\x8a\\xad\\xe1\\x88\\xb0\\0\"\n\t\"\\xe1\\x8a\\xa5\\0\"\n\t\"\\xe1\\x88\\xb0\\0\"\n\t\"\\xe1\\x88\\x9b\\0\"\n\t\"\\xe1\\x88\\xa8\\0\"\n\t\"\\xe1\\x88\\x90\\0\"\n\t\"\\xe1\\x8b\\x93\\0\"\n\t\"\\xe1\\x89\\x85\\0\"\n\t\"\\xe1\\x8c\\x83\\xe1\\x8a\\x95\\xe1\\x8b\\xa9\\xe1\\x8b\\x88\\xe1\\x88\\xaa\\0\"\n\t\"\\xe1\\x8d\\x8c\\xe1\\x89\\xa5\\xe1\\x88\\xa9\\xe1\\x8b\\x88\\xe1\\x88\\xaa\\0\"\n\t\"\\xe1\\x88\\x9b\\xe1\\x88\\xad\\xe1\\x89\\xbd\\0\"\n\t\"\\xe1\\x8a\\xa4\\xe1\\x8d\\x95\\xe1\\x88\\xaa\\xe1\\x88\\x8d\\0\"\n\t\"\\xe1\\x88\\x9c\\xe1\\x8b\\xad\\0\"\n\t\"\\xe1\\x8c\\x81\\xe1\\x8a\\x95\\0\"\n\t\"\\xe1\\x8c\\x81\\xe1\\x88\\x8b\\xe1\\x8b\\xad\\0\"\n\t\"\\xe1\\x8a\\xa6\\xe1\\x8c\\x88\\xe1\\x88\\xb5\\xe1\\x89\\xb5\\0\"\n\t\"\\xe1\\x88\\xb4\\xe1\\x8d\\x95\\xe1\\x89\\xb4\\xe1\\x88\\x9d\\xe1\\x89\\xa0\\xe1\\x88\\xad\\0\"\n\t\"\\xe1\\x8a\\xa6\\xe1\\x8a\\xad\\xe1\\x89\\xb6\\xe1\\x89\\xa0\\xe1\\x88\\xad\\0\"\n\t\"\\xe1\\x8a\\x96\\xe1\\x89\\xac\\xe1\\x88\\x9d\\xe1\\x89\\xa0\\xe1\\x88\\xad\\0\"\n\t\"\\xe1\\x8b\\xb2\\xe1\\x88\\xb4\\xe1\\x88\\x9d\\xe1\\x89\\xa0\\xe1\\x88\\xad\\0\"\n\t\"\\xe1\\x8c\\x83\\xe1\\x8a\\x95\\xe1\\x8b\\xa9\\0\"\n\t\"\\xe1\\x8d\\x8c\\xe1\\x89\\xa5\\xe1\\x88\\xa9\\0\"\n\t\"\\xe1\\x8a\\xa4\\xe1\\x8d\\x95\\xe1\\x88\\xaa\\0\"\n\t\"\\xe1\\x8a\\xa6\\xe1\\x8c\\x88\\xe1\\x88\\xb5\\0\"\n\t\"\\xe1\\x88\\xb4\\xe1\\x8d\\x95\\xe1\\x89\\xb4\\0\"\n\t\"\\xe1\\x8a\\xa6\\xe1\\x8a\\xad\\xe1\\x89\\xb6\\0\"\n\t\"\\xe1\\x8a\\x96\\xe1\\x89\\xac\\xe1\\x88\\x9d\\0\"\n\t\"\\xe1\\x8b\\xb2\\xe1\\x88\\xb4\\xe1\\x88\\x9d\\0\"\n\t\"Asamas\\0\"\n\t\"Aynas\\0\"\n\t\"Asinas\\0\"\n\t\"Akras\\0\"\n\t\"Akwas\\0\"\n\t\"Asimwas\\0\"\n\t\"Asi\\xe1\\xb8\\x8dyas\\0\"\n\t\"Asa\\0\"\n\t\"Ayn\\0\"\n\t\"Asn\\0\"\n\t\"Akr\\0\"\n\t\"Akw\\0\"\n\t\"Asm\\0\"\n\t\"As\\xe1\\xb8\\x8d\\0\"\n\t\"Yennayer\\0\"\n\t\"Yebrayer\\0\"\n\t\"Ibrir\\0\"\n\t\"Mayyu\\0\"\n\t\"Yunyu\\0\"\n\t\"Yulyuz\\0\"\n\t\"\\xc6\\x94uct\\0\"\n\t\"Cutanbir\\0\"\n\t\"K\\xe1\\xb9\\xaduber\\0\"\n\t\"Nwanbir\\0\"\n\t\"Dujanbir\\0\"\n\t\"Yen\\0\"\n\t\"Yeb\\0\"\n\t\"Ibr\\0\"\n\t\"Yun\\0\"\n\t\"Yul\\0\"\n\t\"\\xc6\\x94uc\\0\"\n\t\"Cut\\0\"\n\t\"K\\xe1\\xb9\\xadu\\0\"\n\t\"Nwa\\0\"\n\t\"Duj\\0\"\n\t\"\\xe0\\xa4\\x86\\xe0\\xa4\\x87\\xe0\\xa4\\xa4\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa5\\x8b\\xe0\\xa4\\xae\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x99\\xe0\\xa5\\x8d\\xe0\\xa4\\x97\\xe0\\xa4\\xb2\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa5\\x81\\xe0\\xa4\\xa7\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa4\\xbf\\xe0\\xa4\\xb9\\xe0\\xa4\\xbf\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa5\\x81\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xb6\\xe0\\xa4\\xa8\\xe0\\xa4\\xbf\\xe0\\xa4\\xac\\xe0\\xa4\\xbe\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x86\\xe0\\xa4\\x87\\xe0\\xa4\\xa4\\0\"\n\t\"\\xe0\\xa4\\xae\\xe0\\xa4\\x99\\xe0\\xa5\\x8d\\xe0\\xa4\\x97\\xe0\\xa4\\xb2\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa4\\xbf\\xe0\\xa4\\xb9\\xe0\\xa4\\xbf\\0\"\n\t\"\\xe0\\xa4\\x86\\0\"\n\t\"\\xe0\\xa4\\xae\\0\"\n\t\"\\xe0\\xa4\\xac\\xe0\\xa4\\xbf\\0\"\n\t\"\\xe0\\xa4\\xab\\xe0\\xa5\\x87\\xe0\\xa4\\xac\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x81\\xe0\\xa4\\x85\\xe0\\xa4\\xb0\\xe0\\xa5\\x80\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa4\\xbf\\xe0\\xa4\\xb2\\0\"\n\t\"\\xe0\\xa4\\x9c\\xe0\\xa5\\x81\\xe0\\xa4\\xa8\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\x97\\xe0\\xa4\\xb8\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\0\"\n\t\"\\xe0\\xa4\\xb8\\xe0\\xa5\\x87\\xe0\\xa4\\xaa\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x87\\xe0\\xa4\\xae\\xe0\\xa5\\x8d\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\x85\\xe0\\xa4\\x95\\xe0\\xa5\\x8d\\xe0\\xa4\\x9f\\xe0\\xa5\\x8b\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa8\\xe0\\xa5\\x8b\\xe0\\xa4\\xad\\xe0\\xa5\\x87\\xe0\\xa4\\xae\\xe0\\xa5\\x8d\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"\\xe0\\xa4\\xa1\\xe0\\xa4\\xbf\\xe0\\xa4\\xb8\\xe0\\xa5\\x87\\xe0\\xa4\\xae\\xe0\\xa5\\x8d\\xe0\\xa4\\xac\\xe0\\xa4\\xb0\\0\"\n\t\"snein\\0\"\n\t\"moandei\\0\"\n\t\"tiisdei\\0\"\n\t\"woansdei\\0\"\n\t\"tongersdei\\0\"\n\t\"freed\\0\"\n\t\"sneon\\0\"\n\t\"si\\0\"\n\t\"mo\\0\"\n\t\"fr\\0\"\n\t\"Jannewaris\\0\"\n\t\"Febrewaris\\0\"\n\t\"Maaie\\0\"\n\t\"Juny\\0\"\n\t\"Septimber\\0\"\n\t\"Novimber\\0\"\n\t\"Desimber\\0\"\n\t\"Mrt\\0\"\n\t\"\\xd9\\x88\\xd8\\xb1\\xdb\\x8c\\0\"\n\t\"\\xd8\\xba\\xd9\\x88\\xdb\\x8c\\xdb\\x8c\\0\"\n\t\"\\xd8\\xba\\xd8\\xa8\\xd8\\xb1\\xda\\xaf\\xd9\\x88\\xd9\\x84\\xdb\\x8c\\0\"\n\t\"\\xda\\x86\\xd9\\x86\\xda\\xaf\\xd8\\xa7\\xda\\x9a\\0\"\n\t\"\\xd8\\xb2\\xd9\\x85\\xd8\\xb1\\xdb\\x8c\\0\"\n\t\"\\xd9\\x88\\xda\\x96\\xdb\\x8c\\0\"\n\t\"\\xd8\\xaa\\xd9\\x84\\xd9\\x87\\0\"\n\t\"\\xd9\\x84\\xda\\x93\\xd9\\x85\\0\"\n\t\"\\xd9\\x84\\xdb\\x8c\\xd9\\x86\\xd8\\xaf\\xdb\\x8d\\0\"\n\t\"\\xd9\\x85\\xd8\\xb1\\xd8\\xba\\xd9\\x88\\xd9\\x85\\xdb\\x8c\\0\"\n\t\"\\xd8\\xb3\\xd9\\x84\\xd9\\x88\\xd8\\xa7\\xd8\\xba\\xd9\\x87\\0\"\n\t\"\\xda\\xa9\\xd8\\xa8\\0\"\n\t\"Linggo\\0\"\n\t\"Lunes\\0\"\n\t\"Martes\\0\"\n\t\"Miyerkules\\0\"\n\t\"Huwebes\\0\"\n\t\"Biyernes\\0\"\n\t\"Sabado\\0\"\n\t\"Lin\\0\"\n\t\"Lun\\0\"\n\t\"Miy\\0\"\n\t\"Huw\\0\"\n\t\"Biy\\0\"\n\t\"Enero\\0\"\n\t\"Pebrero\\0\"\n\t\"Marso\\0\"\n\t\"Mayo\\0\"\n\t\"Hunyo\\0\"\n\t\"Hulyo\\0\"\n\t\"Setyembre\\0\"\n\t\"Oktubre\\0\"\n\t\"Nobyembre\\0\"\n\t\"Disyembre\\0\"\n\t\"Ene\\0\"\n\t\"Peb\\0\"\n\t\"Abr\\0\"\n\t\"Hun\\0\"\n\t\"Hul\\0\"\n\t\"Nob\\0\"\n\t\"dewo\\0\"\n\t\"aa\\xc9\\x93nde\\0\"\n\t\"mawbaare\\0\"\n\t\"njeslaare\\0\"\n\t\"naasaande\\0\"\n\t\"mawnde\\0\"\n\t\"hoore-biir\\0\"\n\t\"dew\\0\"\n\t\"aa\\xc9\\x93\\0\"\n\t\"maw\\0\"\n\t\"naa\\0\"\n\t\"mwd\\0\"\n\t\"hbi\\0\"\n\t\"d\\0\"\n\t\"a\\0\"\n\t\"m\\0\"\n\t\"h\\0\"\n\t\"siilo\\0\"\n\t\"colte\\0\"\n\t\"mbooy\\0\"\n\t\"see\\xc9\\x97to\\0\"\n\t\"duujal\\0\"\n\t\"korse\\0\"\n\t\"morso\\0\"\n\t\"juko\\0\"\n\t\"siilto\\0\"\n\t\"yarkomaa\\0\"\n\t\"jolal\\0\"\n\t\"bowte\\0\"\n\t\"sii\\0\"\n\t\"col\\0\"\n\t\"mbo\\0\"\n\t\"see\\0\"\n\t\"duu\\0\"\n\t\"kor\\0\"\n\t\"mor\\0\"\n\t\"juk\\0\"\n\t\"slt\\0\"\n\t\"yar\\0\"\n\t\"jol\\0\"\n\t\"bow\\0\"\n\t\"Lahadi\\0\"\n\t\"Litinin\\0\"\n\t\"Talata\\0\"\n\t\"Laraba\\0\"\n\t\"Alhamis\\0\"\n\t\"Jumma\\xca\\xbc\\x61\\0\"\n\t\"Asabar\\0\"\n\t\"Lah\\0\"\n\t\"Lit\\0\"\n\t\"Tal\\0\"\n\t\"Lar\\0\"\n\t\"Alh\\0\"\n\t\"Janairu\\0\"\n\t\"Faburairu\\0\"\n\t\"Maris\\0\"\n\t\"Afirilu\\0\"\n\t\"Mayu\\0\"\n\t\"Yuni\\0\"\n\t\"Yuli\\0\"\n\t\"Agusta\\0\"\n\t\"Satumba\\0\"\n\t\"Nuwamba\\0\"\n\t\"Disamba\\0\"\n\t\"Fab\\0\"\n\t\"Afi\\0\"\n\t\"Agu\\0\"\n\t\"Nuw\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81 \\xc3\\x80\\xc3\\xack\\xc3\\xba\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81 Aj\\xc3\\xa9\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81 \\xc3\\x8cs\\xe1\\xba\\xb9\\xcc\\x81gun\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81r\\xc3\\xba\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81\\x62\\xe1\\xbb\\x8d\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81 \\xe1\\xba\\xb8t\\xc3\\xac\\0\"\n\t\"\\xe1\\xbb\\x8cj\\xe1\\xbb\\x8d\\xcc\\x81 \\xc3\\x80\\x62\\xc3\\xa1m\\xe1\\xba\\xb9\\xcc\\x81ta\\0\"\n\t\"\\xc3\\x80\\xc3\\xack\\xc3\\xba\\0\"\n\t\"Aj\\xc3\\xa9\\0\"\n\t\"\\xc3\\x8cs\\xe1\\xba\\xb9\\xcc\\x81gun\\0\"\n\t\"\\xe1\\xba\\xb8t\\xc3\\xac\\0\"\n\t\"\\xc3\\x80\\x62\\xc3\\xa1m\\xe1\\xba\\xb9\\xcc\\x81ta\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xe1\\xb9\\xa2\\xe1\\xba\\xb9\\xcc\\x81r\\xe1\\xba\\xb9\\xcc\\x81\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xc3\\x88r\\xc3\\xa8l\\xc3\\xa8\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xe1\\xba\\xb8r\\xe1\\xba\\xb9\\xcc\\x80n\\xc3\\xa0\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xc3\\x8cgb\\xc3\\xa9\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xe1\\xba\\xb8\\xcc\\x80\\x62ibi\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xc3\\x92k\\xc3\\xba\\x64u\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 Ag\\xe1\\xba\\xb9m\\xe1\\xbb\\x8d\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xc3\\x92g\\xc3\\xban\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 Owewe\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xe1\\xbb\\x8c\\xcc\\x80w\\xc3\\xa0r\\xc3\\xa0\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 B\\xc3\\xa9l\\xc3\\xba\\0\"\n\t\"O\\xe1\\xb9\\xa3\\xc3\\xb9 \\xe1\\xbb\\x8c\\xcc\\x80p\\xe1\\xba\\xb9\\xcc\\x80\\0\"\n\t\"\\xe1\\xb9\\xa2\\xe1\\xba\\xb9\\xcc\\x81r\\xe1\\xba\\xb9\\xcc\\x81\\0\"\n\t\"\\xc3\\x88r\\xc3\\xa8l\\xc3\\xa8\\0\"\n\t\"\\xe1\\xba\\xb8r\\xe1\\xba\\xb9\\xcc\\x80n\\xc3\\xa0\\0\"\n\t\"\\xc3\\x8cgb\\xc3\\xa9\\0\"\n\t\"\\xe1\\xba\\xb8\\xcc\\x80\\x62ibi\\0\"\n\t\"\\xc3\\x92k\\xc3\\xba\\x64u\\0\"\n\t\"Ag\\xe1\\xba\\xb9m\\xe1\\xbb\\x8d\\0\"\n\t\"\\xc3\\x92g\\xc3\\xban\\0\"\n\t\"Owewe\\0\"\n\t\"\\xe1\\xbb\\x8c\\xcc\\x80w\\xc3\\xa0r\\xc3\\xa0\\0\"\n\t\"B\\xc3\\xa9l\\xc3\\xba\\0\"\n\t\"\\xe1\\xbb\\x8c\\xcc\\x80p\\xe1\\xba\\xb9\\xcc\\x80\\0\"\n\t\"Sontaga\\0\"\n\t\"Mosupalogo\\0\"\n\t\"Labohlano\\0\"\n\t\"Mokibelo\\0\"\n\t\"Mok\\0\"\n\t\"Janaware\\0\"\n\t\"Feberware\\0\"\n\t\"Mat\\xc5\\xa1he\\0\"\n\t\"Aporele\\0\"\n\t\"Julae\\0\"\n\t\"Agostose\\0\"\n\t\"Setemere\\0\"\n\t\"Oktobore\\0\"\n\t\"Nofemere\\0\"\n\t\"Disemere\\0\"\n\t\"Apo\\0\"\n\t\"Nof\\0\"\n\t\"Sonndeg\\0\"\n\t\"M\\xc3\\xa9indeg\\0\"\n\t\"D\\xc3\\xabnschdeg\\0\"\n\t\"M\\xc3\\xabttwoch\\0\"\n\t\"Donneschdeg\\0\"\n\t\"Freideg\\0\"\n\t\"Samschdeg\\0\"\n\t\"M\\xc3\\xa9i\\0\"\n\t\"D\\xc3\\xabn\\0\"\n\t\"M\\xc3\\xabt\\0\"\n\t\"Don\\0\"\n\t\"Fre\\0\"\n\t\"Sam\\0\"\n\t\"M\\xc3\\xa4\\x65rz\\0\"\n\t\"Abr\\xc3\\xabll\\0\"\n\t\"Mee\\0\"\n\t\"M\\xc3\\xa4\\x65\\0\"\n\t\"sabaat\\0\"\n\t\"ataasinngorneq\\0\"\n\t\"marlunngorneq\\0\"\n\t\"pingasunngorneq\\0\"\n\t\"sisamanngorneq\\0\"\n\t\"tallimanngorneq\\0\"\n\t\"arfininngorneq\\0\"\n\t\"ata\\0\"\n\t\"pin\\0\"\n\t\"sis\\0\"\n\t\"tal\\0\"\n\t\"arf\\0\"\n\t\"martsi\\0\"\n\t\"aprili\\0\"\n\t\"maji\\0\"\n\t\"augustusi\\0\"\n\t\"septemberi\\0\"\n\t\"oktoberi\\0\"\n\t\"novemberi\\0\"\n\t\"decemberi\\0\"\n\t\"Mb\\xe1\\xbb\\x8ds\\xe1\\xbb\\x8b \\xe1\\xbb\\xa4ka\\0\"\n\t\"M\\xe1\\xbb\\x8dnde\\0\"\n\t\"Tiuzdee\\0\"\n\t\"Wenezdee\\0\"\n\t\"T\\xe1\\xbb\\x8d\\xe1\\xbb\\x8dzdee\\0\"\n\t\"Fra\\xe1\\xbb\\x8b\\x64\\x65\\x65\\0\"\n\t\"Sat\\xe1\\xbb\\x8d\\x64\\x65\\x65\\0\"\n\t\"\\xe1\\xbb\\xa4ka\\0\"\n\t\"M\\xe1\\xbb\\x8dn\\0\"\n\t\"Tiu\\0\"\n\t\"Wen\\0\"\n\t\"T\\xe1\\xbb\\x8d\\xe1\\xbb\\x8d\\0\"\n\t\"Fra\\xe1\\xbb\\x8b\\0\"\n\t\"Jen\\xe1\\xbb\\xa5war\\xe1\\xbb\\x8b\\0\"\n\t\"Febr\\xe1\\xbb\\xa5war\\xe1\\xbb\\x8b\\0\"\n\t\"Maach\\xe1\\xbb\\x8b\\0\"\n\t\"Eprel\\0\"\n\t\"Juun\\0\"\n\t\"Jula\\xe1\\xbb\\x8b\\0\"\n\t\"\\xe1\\xbb\\x8cg\\xe1\\xbb\\x8d\\xe1\\xbb\\x8dst\\0\"\n\t\"\\xe1\\xbb\\x8cktoba\\0\"\n\t\"Jen\\0\"\n\t\"Maa\\0\"\n\t\"Juu\\0\"\n\t\"\\xe1\\xbb\\x8cg\\xe1\\xbb\\x8d\\0\"\n\t\"\\xe1\\xbb\\x8ckt\\0\"\n\t\"Dilbata\\0\"\n\t\"Wiixata\\0\"\n\t\"Qibxata\\0\"\n\t\"Roobii\\0\"\n\t\"Kamiisa\\0\"\n\t\"Jimaata\\0\"\n\t\"Sanbata\\0\"\n\t\"Dil\\0\"\n\t\"Wix\\0\"\n\t\"Qib\\0\"\n\t\"Rob\\0\"\n\t\"Jim\\0\"\n\t\"San\\0\"\n\t\"Amajjii\\0\"\n\t\"Guraandhala\\0\"\n\t\"Bitooteessa\\0\"\n\t\"Elba\\0\"\n\t\"Caamsa\\0\"\n\t\"Waxabajjii\\0\"\n\t\"Adooleessa\\0\"\n\t\"Hagayya\\0\"\n\t\"Fuulbana\\0\"\n\t\"Onkololeessa\\0\"\n\t\"Sadaasa\\0\"\n\t\"Muddee\\0\"\n\t\"Ama\\0\"\n\t\"Gur\\0\"\n\t\"Bit\\0\"\n\t\"Elb\\0\"\n\t\"Cam\\0\"\n\t\"Wax\\0\"\n\t\"Ado\\0\"\n\t\"Hag\\0\"\n\t\"Ful\\0\"\n\t\"Onk\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x8a\\x95\\xe1\\x89\\xa0\\xe1\\x89\\xb5\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x8a\\x91\\xe1\\x8b\\xad\\0\"\n\t\"\\xe1\\x88\\xa0\\xe1\\x88\\x89\\xe1\\x88\\xb5\\0\"\n\t\"\\xe1\\x8a\\x83\\xe1\\x88\\x99\\xe1\\x88\\xb5\\0\"\n\t\"\\xe1\\x8b\\x93\\xe1\\x88\\xad\\xe1\\x89\\xa2\\0\"\n\t\"\\xe1\\x89\\x80\\xe1\\x8b\\xb3\\xe1\\x88\\x9d\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x8a\\x95\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x8a\\x91\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x88\\x89\\0\"\n\t\"\\xe1\\x88\\xa8\\xe1\\x89\\xa1\\0\"\n\t\"\\xe1\\x88\\x93\\xe1\\x88\\x99\\0\"\n\t\"\\xe1\\x8b\\x93\\xe1\\x88\\xad\\0\"\n\t\"\\xe1\\x89\\x80\\xe1\\x8b\\xb3\\0\"\n\t\"\\xe1\\x88\\xa0\\0\"\n\t\"\\xe1\\x88\\x93\\0\"\n\t\"\\xe1\\x89\\x80\\0\"\n\t\"\\xe1\\x8c\\xa5\\xe1\\x88\\xaa\\0\"\n\t\"\\xe1\\x88\\x88\\xe1\\x8a\\xab\\xe1\\x89\\xb2\\xe1\\x89\\xb5\\0\"\n\t\"\\xe1\\x88\\x98\\xe1\\x8c\\x8b\\xe1\\x89\\xa2\\xe1\\x89\\xb5\\0\"\n\t\"\\xe1\\x88\\x9a\\xe1\\x8b\\xab\\xe1\\x8b\\x9d\\xe1\\x8b\\xab\\0\"\n\t\"\\xe1\\x8c\\x8d\\xe1\\x8a\\x95\\xe1\\x89\\xa6\\xe1\\x89\\xb5\\0\"\n\t\"\\xe1\\x88\\xb0\\xe1\\x8a\\x90\\0\"\n\t\"\\xe1\\x88\\x93\\xe1\\x88\\x9d\\xe1\\x88\\x88\\0\"\n\t\"\\xe1\\x8a\\x90\\xe1\\x88\\x93\\xe1\\x88\\xb0\\0\"\n\t\"\\xe1\\x88\\x98\\xe1\\x88\\xb5\\xe1\\x8a\\xa8\\xe1\\x88\\xa8\\xe1\\x88\\x9d\\0\"\n\t\"\\xe1\\x8c\\xa5\\xe1\\x89\\x85\\xe1\\x88\\x9d\\xe1\\x89\\xb2\\0\"\n\t\"\\xe1\\x88\\x95\\xe1\\x8b\\xb3\\xe1\\x88\\xad\\0\"\n\t\"\\xe1\\x89\\xb3\\xe1\\x88\\x95\\xe1\\x88\\xb3\\xe1\\x88\\xb5\\0\"\n\t\"\\xe1\\x88\\x88\\xe1\\x8a\\xab\\0\"\n\t\"\\xe1\\x88\\x98\\xe1\\x8c\\x8b\\0\"\n\t\"\\xe1\\x88\\x9a\\xe1\\x8b\\xab\\0\"\n\t\"\\xe1\\x8c\\x8d\\xe1\\x8a\\x95\\0\"\n\t\"\\xe1\\x88\\x93\\xe1\\x88\\x9d\\0\"\n\t\"\\xe1\\x8a\\x90\\xe1\\x88\\x93\\0\"\n\t\"\\xe1\\x88\\x98\\xe1\\x88\\xb5\\0\"\n\t\"\\xe1\\x8c\\xa5\\xe1\\x89\\x85\\0\"\n\t\"\\xe1\\x88\\x95\\xe1\\x8b\\xb3\\0\"\n\t\"\\xe1\\x89\\xb3\\xe1\\x88\\x95\\0\"\n\t\"L\\xc4\\x81pule\\0\"\n\t\"Po\\xca\\xbb\\x61kahi\\0\"\n\t\"Po\\xca\\xbb\\x61lua\\0\"\n\t\"Po\\xca\\xbb\\x61kolu\\0\"\n\t\"Po\\xca\\xbb\\x61h\\xc4\\x81\\0\"\n\t\"Po\\xca\\xbb\\x61lima\\0\"\n\t\"Po\\xca\\xbb\\x61ono\\0\"\n\t\"LP\\0\"\n\t\"P1\\0\"\n\t\"P2\\0\"\n\t\"P3\\0\"\n\t\"P4\\0\"\n\t\"P5\\0\"\n\t\"P6\\0\"\n\t\"Ianuali\\0\"\n\t\"Pepeluali\\0\"\n\t\"Malaki\\0\"\n\t\"\\xca\\xbb\\x41pelila\\0\"\n\t\"Iune\\0\"\n\t\"Iulai\\0\"\n\t\"\\xca\\xbb\\x41ukake\\0\"\n\t\"Kepakemapa\\0\"\n\t\"\\xca\\xbbOkakopa\\0\"\n\t\"Nowemapa\\0\"\n\t\"Kekemapa\\0\"\n\t\"Ian.\\0\"\n\t\"Pep.\\0\"\n\t\"Mal.\\0\"\n\t\"\\xca\\xbb\\x41p.\\0\"\n\t\"Iun.\\0\"\n\t\"Iul.\\0\"\n\t\"\\xca\\xbb\\x41u.\\0\"\n\t\"Kep.\\0\"\n\t\"\\xca\\xbbOk.\\0\"\n\t\"Now.\\0\"\n\t\"Kek.\\0\"\n\t\"Axad\\0\"\n\t\"Isniin\\0\"\n\t\"Talaado\\0\"\n\t\"Arbaco\\0\"\n\t\"Khamiis\\0\"\n\t\"Jimco\\0\"\n\t\"Sabti\\0\"\n\t\"Axd\\0\"\n\t\"Arb\\0\"\n\t\"Kh\\0\"\n\t\"Bisha Koobaad\\0\"\n\t\"Bisha Labaad\\0\"\n\t\"Bisha Saddexaad\\0\"\n\t\"Bisha Afraad\\0\"\n\t\"Bisha Shanaad\\0\"\n\t\"Bisha Lixaad\\0\"\n\t\"Bisha Todobaad\\0\"\n\t\"Bisha Sideedaad\\0\"\n\t\"Bisha Sagaalaad\\0\"\n\t\"Bisha Tobnaad\\0\"\n\t\"Bisha Kow iyo Tobnaad\\0\"\n\t\"Bisha Laba iyo Tobnaad\\0\"\n\t\"Kob\\0\"\n\t\"Lab\\0\"\n\t\"Afr\\0\"\n\t\"Sha\\0\"\n\t\"Lix\\0\"\n\t\"Tod\\0\"\n\t\"Sid\\0\"\n\t\"Sag\\0\"\n\t\"Tob\\0\"\n\t\"KIT\\0\"\n\t\"LIT\\0\"\n\t\"\\xea\\x91\\xad\\xea\\x86\\x8f\\xea\\x91\\x8d\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8a\\x82\\xea\\x8b\\x8d\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8a\\x82\\xea\\x91\\x8d\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8a\\x82\\xea\\x8c\\x95\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8a\\x82\\xea\\x87\\x96\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8a\\x82\\xea\\x89\\xac\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8a\\x82\\xea\\x83\\x98\\0\"\n\t\"\\xea\\x91\\xad\\xea\\x86\\x8f\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8b\\x8d\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x91\\x8d\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x8c\\x95\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x87\\x96\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x89\\xac\\0\"\n\t\"\\xea\\x86\\x8f\\xea\\x83\\x98\\0\"\n\t\"\\xea\\x86\\x8f\\0\"\n\t\"\\xea\\x8b\\x8d\\0\"\n\t\"\\xea\\x91\\x8d\\0\"\n\t\"\\xea\\x8c\\x95\\0\"\n\t\"\\xea\\x87\\x96\\0\"\n\t\"\\xea\\x89\\xac\\0\"\n\t\"\\xea\\x83\\x98\\0\"\n\t\"\\xea\\x8b\\x8d\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x91\\x8d\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x8c\\x95\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x87\\x96\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x89\\xac\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x83\\x98\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x8f\\x83\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x89\\x86\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x88\\xac\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x8a\\xb0\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x8a\\xb0\\xea\\x8a\\xaa\\xea\\x86\\xaa\\0\"\n\t\"\\xea\\x8a\\xb0\\xea\\x91\\x8b\\xea\\x86\\xaa\\0\"\n\t\"Meurzh\\0\"\n\t\"Merc\\xca\\xbcher\\0\"\n\t\"Yaou\\0\"\n\t\"Gwener\\0\"\n\t\"Sadorn\\0\"\n\t\"Meu.\\0\"\n\t\"Mer.\\0\"\n\t\"Gwe.\\0\"\n\t\"Sad.\\0\"\n\t\"Su\\0\"\n\t\"Mz\\0\"\n\t\"Mc\\0\"\n\t\"Genver\\0\"\n\t\"C\\xca\\xbchwevrer\\0\"\n\t\"Ebrel\\0\"\n\t\"Mae\\0\"\n\t\"Mezheven\\0\"\n\t\"Gouere\\0\"\n\t\"Eost\\0\"\n\t\"Gwengolo\\0\"\n\t\"Here\\0\"\n\t\"Du\\0\"\n\t\"Kerzu\\0\"\n\t\"Gen.\\0\"\n\t\"C\\xca\\xbchwe.\\0\"\n\t\"Meur.\\0\"\n\t\"Ebr.\\0\"\n\t\"Mezh.\\0\"\n\t\"Goue.\\0\"\n\t\"Gwen.\\0\"\n\t\"Ker.\\0\"\n\t\"\\xd9\\x8a\\xdb\\x95\\xd9\\x83\\xd8\\xb4\\xdb\\x95\\xd9\\x86\\xd8\\xa8\\xdb\\x95\\0\"\n\t\"\\xd8\\xaf\\xdb\\x88\\xd8\\xb4\\xdb\\x95\\xd9\\x86\\xd8\\xa8\\xdb\\x95\\0\"\n\t\"\\xd8\\xb3\\xdb\\x95\\xd9\\x8a\\xd8\\xb4\\xdb\\x95\\xd9\\x86\\xd8\\xa8\\xdb\\x95\\0\"\n\t\"\\xda\\x86\\xd8\\xa7\\xd8\\xb1\\xd8\\xb4\\xdb\\x95\\xd9\\x86\\xd8\\xa8\\xdb\\x95\\0\"\n\t\"\\xd9\\xbe\\xdb\\x95\\xd9\\x8a\\xd8\\xb4\\xdb\\x95\\xd9\\x86\\xd8\\xa8\\xdb\\x95\\0\"\n\t\"\\xd8\\xac\\xdb\\x88\\xd9\\x85\\xdb\\x95\\0\"\n\t\"\\xd8\\xb4\\xdb\\x95\\xd9\\x86\\xd8\\xa8\\xdb\\x95\\0\"\n\t\"\\xd9\\x8a\\xdb\\x95\\0\"\n\t\"\\xd8\\xaf\\xdb\\x88\\0\"\n\t\"\\xd8\\xb3\\xdb\\x95\\0\"\n\t\"\\xda\\x86\\xd8\\xa7\\0\"\n\t\"\\xd9\\xbe\\xdb\\x95\\0\"\n\t\"\\xd8\\xac\\xdb\\x88\\0\"\n\t\"\\xd8\\xb4\\xdb\\x95\\0\"\n\t\"\\xd9\\x8a\\0\"\n\t\"\\xd9\\x8a\\xd8\\xa7\\xd9\\x86\\xdb\\x8b\\xd8\\xa7\\xd8\\xb1\\0\"\n\t\"\\xd9\\x81\\xdb\\x90\\xdb\\x8b\\xd8\\xb1\\xd8\\xa7\\xd9\\x84\\0\"\n\t\"\\xd9\\x85\\xd8\\xa7\\xd8\\xb1\\xd8\\xaa\\0\"\n\t\"\\xd8\\xa6\\xd8\\xa7\\xd9\\xbe\\xd8\\xb1\\xdb\\x90\\xd9\\x84\\0\"\n\t\"\\xd9\\x85\\xd8\\xa7\\xd9\\x8a\\0\"\n\t\"\\xd8\\xa6\\xd9\\x89\\xd9\\x8a\\xdb\\x87\\xd9\\x86\\0\"\n\t\"\\xd8\\xa6\\xd9\\x89\\xd9\\x8a\\xdb\\x87\\xd9\\x84\\0\"\n\t\"\\xd8\\xa6\\xd8\\xa7\\xdb\\x8b\\xd8\\xba\\xdb\\x87\\xd8\\xb3\\xd8\\xaa\\0\"\n\t\"\\xd8\\xb3\\xdb\\x90\\xd9\\x86\\xd8\\xaa\\xdb\\x95\\xd8\\xa8\\xd9\\x89\\xd8\\xb1\\0\"\n\t\"\\xd8\\xa6\\xdb\\x86\\xd9\\x83\\xd8\\xaa\\xdb\\x95\\xd8\\xa8\\xd9\\x89\\xd8\\xb1\\0\"\n\t\"\\xd9\\x86\\xd9\\x88\\xd9\\x8a\\xd8\\xa7\\xd8\\xa8\\xd9\\x89\\xd8\\xb1\\0\"\n\t\"\\xd8\\xaf\\xdb\\x90\\xd9\\x83\\xd8\\xa7\\xd8\\xa8\\xd9\\x89\\xd8\\xb1\\0\"\n\t\"Sunntig\\0\"\n\t\"M\\xc3\\xa4\\xc3\\xa4ntig\\0\"\n\t\"Ziischtig\\0\"\n\t\"Mittwuch\\0\"\n\t\"Dunschtig\\0\"\n\t\"Friitig\\0\"\n\t\"Samschtig\\0\"\n\t\"Su.\\0\"\n\t\"M\\xc3\\xa4.\\0\"\n\t\"Zi.\\0\"\n\t\"Mi.\\0\"\n\t\"Du.\\0\"\n\t\"Fr.\\0\"\n\t\"Auguscht\\0\"\n\t\"Sept\\xc3\\xa4mber\\0\"\n\t\"Oktoober\\0\"\n\t\"Nov\\xc3\\xa4mber\\0\"\n\t\"Dez\\xc3\\xa4mber\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb0\\xd1\\x81\\xd0\\xba\\xd1\\x8b\\xd2\\xbb\\xd1\\x8b\\xd0\\xb0\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb1\\xd1\\x8d\\xd0\\xbd\\xd0\\xb8\\xd0\\xb4\\xd0\\xb8\\xd1\\x8d\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd0\\xb8\\xd0\\xba\\0\"\n\t\"\\xd0\\xbe\\xd0\\xbf\\xd1\\x82\\xd1\\x83\\xd0\\xbe\\xd1\\x80\\xd1\\x83\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x83\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd1\\x8d\\xd1\\x80\\xd1\\x8d\\xd0\\xb4\\xd1\\x8d\\0\"\n\t\"\\xd1\\x87\\xd1\\x8d\\xd0\\xbf\\xd0\\xbf\\xd0\\xb8\\xd1\\x8d\\xd1\\x80\\0\"\n\t\"\\xd0\\x91\\xd1\\x8d\\xd1\\x8d\\xd1\\x82\\xd0\\xb8\\xd2\\xa5\\xd1\\x81\\xd1\\x8d\\0\"\n\t\"\\xd1\\x81\\xd1\\x83\\xd0\\xb1\\xd1\\x83\\xd0\\xbe\\xd1\\x82\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb1\\xd1\\x81\\0\"\n\t\"\\xd0\\xb1\\xd0\\xbd\\0\"\n\t\"\\xd0\\xbe\\xd0\\xbf\\0\"\n\t\"\\xd1\\x81\\xd1\\x8d\\0\"\n\t\"\\xd1\\x87\\xd0\\xbf\\0\"\n\t\"\\xd0\\xb1\\xd1\\x8d\\0\"\n\t\"\\xd0\\x9e\\0\"\n\t\"\\xd1\\x82\\xd0\\xbe\\xd1\\x85\\xd1\\x81\\xd1\\x83\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x83\\0\"\n\t\"\\xd0\\xbe\\xd0\\xbb\\xd1\\x83\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x83\\0\"\n\t\"\\xd0\\xba\\xd1\\x83\\xd0\\xbb\\xd1\\x83\\xd0\\xbd \\xd1\\x82\\xd1\\x83\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xbc\\xd1\\x83\\xd1\\x83\\xd1\\x81 \\xd1\\x83\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd1\\x8b\\xd0\\xb0\\xd0\\xbc \\xd1\\x8b\\xd0\\xb9\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb1\\xd1\\x8d\\xd1\\x81 \\xd1\\x8b\\xd0\\xb9\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbe\\xd1\\x82 \\xd1\\x8b\\xd0\\xb9\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb0\\xd1\\x82\\xd1\\x8b\\xd1\\x80\\xd0\\xb4\\xd1\\x8c\\xd1\\x8b\\xd1\\x85 \\xd1\\x8b\\xd0\\xb9\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb0\\xd0\\xbb\\xd0\\xb0\\xd2\\x95\\xd0\\xb0\\xd0\\xbd \\xd1\\x8b\\xd0\\xb9\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbb\\xd1\\x82\\xd1\\x8b\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x8b\\0\"\n\t\"\\xd1\\x81\\xd1\\x8d\\xd1\\x82\\xd0\\xb8\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd0\\xb8\\0\"\n\t\"\\xd0\\xb0\\xd1\\x85\\xd1\\x81\\xd1\\x8b\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x8b\\0\"\n\t\"\\xd0\\xa2\\xd0\\xbe\\xd1\\x85\\xd1\\x81\\xd1\\x83\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x83\\0\"\n\t\"\\xd0\\x9e\\xd0\\xbb\\xd1\\x83\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x83\\0\"\n\t\"\\xd0\\x9a\\xd1\\x83\\xd0\\xbb\\xd1\\x83\\xd0\\xbd \\xd1\\x82\\xd1\\x83\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x9c\\xd1\\x83\\xd1\\x83\\xd1\\x81 \\xd1\\x83\\xd1\\x81\\xd1\\x82\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xab\\xd0\\xb0\\xd0\\xbc \\xd1\\x8b\\xd0\\xb9\\xd1\\x8b\\xd0\\xbd\\0\"\n\t\"\\xd0\\x91\\xd1\\x8d\\xd1\\x81 \\xd1\\x8b\\xd0\\xb9\\xd1\\x8b\\xd0\\xbd\\0\"\n\t\"\\xd0\\x9e\\xd1\\x82 \\xd1\\x8b\\xd0\\xb9\\xd1\\x8b\\xd0\\xbd\\0\"\n\t\"\\xd0\\x90\\xd1\\x82\\xd1\\x8b\\xd1\\x80\\xd0\\xb4\\xd1\\x8c\\xd1\\x8b\\xd1\\x85 \\xd1\\x8b\\xd0\\xb9\\xd1\\x8b\\xd0\\xbd\\0\"\n\t\"\\xd0\\x91\\xd0\\xb0\\xd0\\xbb\\xd0\\xb0\\xd2\\x95\\xd0\\xb0\\xd0\\xbd \\xd1\\x8b\\xd0\\xb9\\xd1\\x8b\\xd0\\xbd\\0\"\n\t\"\\xd0\\x90\\xd0\\xbb\\xd1\\x82\\xd1\\x8b\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd1\\x8b\\0\"\n\t\"\\xd0\\xa1\\xd1\\x8d\\xd1\\x82\\xd0\\xb8\\xd0\\xbd\\xd0\\xbd\\xd1\\x8c\\xd0\\xb8\\0\"\n\t\"\\xd0\\xa2\\xd0\\xbe\\xd1\\x85\\xd1\\x81\\0\"\n\t\"\\xd0\\x9e\\xd0\\xbb\\xd1\\x83\\xd0\\xbd\\0\"\n\t\"\\xd0\\x9a\\xd0\\xbb\\xd0\\xbd\\0\"\n\t\"\\xd0\\x9c\\xd1\\x81\\xd1\\x83\\0\"\n\t\"\\xd0\\xab\\xd0\\xb0\\xd0\\xbc\\0\"\n\t\"\\xd0\\x91\\xd1\\x8d\\xd1\\x81\\0\"\n\t\"\\xd0\\x9e\\xd1\\x82\\xd0\\xb9\\0\"\n\t\"\\xd0\\x90\\xd1\\x82\\xd1\\x80\\0\"\n\t\"\\xd0\\x91\\xd0\\xbb\\xd2\\x95\\0\"\n\t\"\\xd0\\x90\\xd0\\xbb\\xd1\\x82\\0\"\n\t\"\\xd0\\xa1\\xd1\\x8d\\xd1\\x82\\0\"\n\t\"\\xd0\\x90\\xd1\\x85\\xd1\\x81\\0\"\n\t\"Ku cyumweru\\0\"\n\t\"Kuwa mbere\\0\"\n\t\"Kuwa kabiri\\0\"\n\t\"Kuwa gatatu\\0\"\n\t\"Kuwa kane\\0\"\n\t\"Kuwa gatanu\\0\"\n\t\"Kuwa gatandatu\\0\"\n\t\"cyu.\\0\"\n\t\"mbe.\\0\"\n\t\"kab.\\0\"\n\t\"gtu.\\0\"\n\t\"kan.\\0\"\n\t\"gnu.\\0\"\n\t\"gnd.\\0\"\n\t\"Mutarama\\0\"\n\t\"Gashyantare\\0\"\n\t\"Werurwe\\0\"\n\t\"Mata\\0\"\n\t\"Gicuransi\\0\"\n\t\"Kamena\\0\"\n\t\"Nyakanga\\0\"\n\t\"Kanama\\0\"\n\t\"Nzeli\\0\"\n\t\"Ukwakira\\0\"\n\t\"Ugushyingo\\0\"\n\t\"Ukuboza\\0\"\n\t\"mut.\\0\"\n\t\"gas.\\0\"\n\t\"wer.\\0\"\n\t\"mat.\\0\"\n\t\"gic.\\0\"\n\t\"kam.\\0\"\n\t\"nya.\\0\"\n\t\"nze.\\0\"\n\t\"ukw.\\0\"\n\t\"ugu.\\0\"\n\t\"uku.\\0\"\n\t\"DiD\\xc3\\xb2mhnaich\\0\"\n\t\"DiLuain\\0\"\n\t\"DiM\\xc3\\xa0irt\\0\"\n\t\"DiCiadain\\0\"\n\t\"DiarDaoin\\0\"\n\t\"DihAoine\\0\"\n\t\"DiSathairne\\0\"\n\t\"DiD\\0\"\n\t\"DiL\\0\"\n\t\"DiM\\0\"\n\t\"DiC\\0\"\n\t\"Dia\\0\"\n\t\"Dih\\0\"\n\t\"DiS\\0\"\n\t\"Am Faoilleach\\0\"\n\t\"An Gearran\\0\"\n\t\"Am M\\xc3\\xa0rt\\0\"\n\t\"An Giblean\\0\"\n\t\"An C\\xc3\\xa8itean\\0\"\n\t\"An t-\\xc3\\x92gmhios\\0\"\n\t\"An t-Iuchar\\0\"\n\t\"An L\\xc3\\xb9nastal\\0\"\n\t\"An t-Sultain\\0\"\n\t\"An D\\xc3\\xa0mhair\\0\"\n\t\"An t-Samhain\\0\"\n\t\"An D\\xc3\\xb9\\x62hlachd\\0\"\n\t\"dhen Fhaoilleach\\0\"\n\t\"dhen Ghearran\\0\"\n\t\"dhen Mh\\xc3\\xa0rt\\0\"\n\t\"dhen Ghiblean\\0\"\n\t\"dhen Ch\\xc3\\xa8itean\\0\"\n\t\"dhen \\xc3\\x92gmhios\\0\"\n\t\"dhen Iuchar\\0\"\n\t\"dhen L\\xc3\\xb9nastal\\0\"\n\t\"dhen t-Sultain\\0\"\n\t\"dhen D\\xc3\\xa0mhair\\0\"\n\t\"dhen t-Samhain\\0\"\n\t\"dhen D\\xc3\\xb9\\x62hlachd\\0\"\n\t\"Faoi\\0\"\n\t\"Gearr\\0\"\n\t\"M\\xc3\\xa0rt\\0\"\n\t\"Gibl\\0\"\n\t\"C\\xc3\\xa8it\\0\"\n\t\"\\xc3\\x92gmh\\0\"\n\t\"Iuch\\0\"\n\t\"L\\xc3\\xb9na\\0\"\n\t\"Sult\\0\"\n\t\"D\\xc3\\xa0mh\\0\"\n\t\"D\\xc3\\xb9\\x62h\\0\"\n\t\"\\xe9\\x80\\xb1\\xe6\\x97\\xa5\\0\"\n\t\"\\xe9\\x80\\xb1\\xe4\\xb8\\x80\\0\"\n\t\"\\xe9\\x80\\xb1\\xe4\\xba\\x8c\\0\"\n\t\"\\xe9\\x80\\xb1\\xe4\\xb8\\x89\\0\"\n\t\"\\xe9\\x80\\xb1\\xe5\\x9b\\x9b\\0\"\n\t\"\\xe9\\x80\\xb1\\xe4\\xba\\x94\\0\"\n\t\"\\xe9\\x80\\xb1\\xe5\\x85\\xad\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd8\\xad\\xd8\\xaf\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xa7\\xd8\\xab\\xd9\\x86\\xd9\\x8a\\xd9\\x86\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xab\\xd9\\x84\\xd8\\xa7\\xd8\\xab\\xd8\\xa7\\xd8\\xa1\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd8\\xb1\\xd8\\xa8\\xd8\\xb9\\xd8\\xa7\\xd8\\xa1\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xae\\xd9\\x85\\xd9\\x8a\\xd8\\xb3\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xac\\xd9\\x85\\xd8\\xb9\\xd8\\xa9\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xb3\\xd8\\xa8\\xd8\\xaa\\0\"\n\t\"\\xd8\\xad\\0\"\n\t\"\\xd9\\x86\\0\"\n\t\"\\xd8\\xab\\0\"\n\t\"\\xd8\\xb1\\0\"\n\t\"\\xd8\\xae\\0\"\n\t\"\\xd9\\x83\\xd8\\xa7\\xd9\\x86\\xd9\\x88\\xd9\\x86 \\xd8\\xa7\\xd9\\x84\\xd8\\xab\\xd8\\xa7\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"\\xd8\\xb4\\xd8\\xa8\\xd8\\xa7\\xd8\\xb7\\0\"\n\t\"\\xd8\\xa2\\xd8\\xb0\\xd8\\xa7\\xd8\\xb1\\0\"\n\t\"\\xd9\\x86\\xd9\\x8a\\xd8\\xb3\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"\\xd8\\xa3\\xd9\\x8a\\xd8\\xa7\\xd8\\xb1\\0\"\n\t\"\\xd8\\xad\\xd8\\xb2\\xd9\\x8a\\xd8\\xb1\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"\\xd8\\xaa\\xd9\\x85\\xd9\\x88\\xd8\\xb2\\0\"\n\t\"\\xd8\\xa2\\xd8\\xa8\\0\"\n\t\"\\xd8\\xa3\\xd9\\x8a\\xd9\\x84\\xd9\\x88\\xd9\\x84\\0\"\n\t\"\\xd8\\xaa\\xd8\\xb4\\xd8\\xb1\\xd9\\x8a\\xd9\\x86 \\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd9\\x88\\xd9\\x84\\0\"\n\t\"\\xd8\\xaa\\xd8\\xb4\\xd8\\xb1\\xd9\\x8a\\xd9\\x86 \\xd8\\xa7\\xd9\\x84\\xd8\\xab\\xd8\\xa7\\xd9\\x86\\xd9\\x8a\\0\"\n\t\"\\xd9\\x83\\xd8\\xa7\\xd9\\x86\\xd9\\x88\\xd9\\x86 \\xd8\\xa7\\xd9\\x84\\xd8\\xa3\\xd9\\x88\\xd9\\x84\\0\"\n\t\"ene\\0\"\n\t\"oct\\0\"\n\t\"tysdag\\0\"\n\t\"laurdag\\0\"\n\t\"tys\\0\"\n\t\"lau\\0\"\n\t\"segunda\\0\"\n\t\"ter\\xc3\\xa7\\x61\\0\"\n\t\"quarta\\0\"\n\t\"quinta\\0\"\n\t\"sexta\\0\"\n\t\"Dum\\0\"\n\t\"Mie\\0\"\n\t\"Joi\\0\"\n\t\"Vin\\0\"\n\t\"S\\xc3\\xa2m\\0\"\n\t\"Ma\\0\"\n\t\"\\xd9\\xbe\\xdb\\x8c\\xd8\\xb1\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb1\\xd0\\xb0\\xd0\\xb7\\xd0\\xb0\\xd1\\x80 \\xd0\\xb5\\xd1\\x80\\xd1\\x82\\xd3\\x99\\xd1\\x81\\xd0\\xb8\\0\"\n\t\"\\xd1\\x87\\xd3\\x99\\xd1\\x80\\xd1\\x88\\xd3\\x99\\xd0\\xbd\\xd0\\xb1\\xd3\\x99 \\xd0\\xb0\\xd1\\x85\\xd1\\x88\\xd0\\xb0\\xd0\\xbc\\xd1\\x8b\\0\"\n\t\"\\xd1\\x87\\xd3\\x99\\xd1\\x80\\xd1\\x88\\xd3\\x99\\xd0\\xbd\\xd0\\xb1\\xd3\\x99\\0\"\n\t\"\\xd2\\xb9\\xd2\\xaf\\xd0\\xbc\\xd3\\x99 \\xd0\\xb0\\xd1\\x85\\xd1\\x88\\xd0\\xb0\\xd0\\xbc\\xd1\\x8b\\0\"\n\t\"\\xd2\\xb9\\xd2\\xaf\\xd0\\xbc\\xd3\\x99\\0\"\n\t\"\\xd1\\x88\\xd3\\x99\\xd0\\xbd\\xd0\\xb1\\xd3\\x99\\0\"\n\t\"\\xd0\\x91.\\0\"\n\t\"\\xd0\\x91.\\xd0\\x95.\\0\"\n\t\"\\xd0\\xa7.\\xd0\\x90.\\0\"\n\t\"\\xd0\\xa7.\\0\"\n\t\"\\xd2\\xb8.\\xd0\\x90.\\0\"\n\t\"\\xd2\\xb8.\\0\"\n\t\"\\xd0\\xa8.\\0\"\n\t\"\\xd0\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\x98\\xd1\\x98\\xd1\\x83\\xd0\\xbd\\0\"\n\t\"\\xd0\\x98\\xd1\\x98\\xd1\\x83\\xd0\\xbb\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x98\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\x9e\\xd0\\xba\\xd1\\x82\\xd1\\x98\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\x9d\\xd0\\xbe\\xd1\\x98\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd1\\x98\\xd0\\xb0\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb2\\xd1\\x80\\xd0\\xb0\\xd0\\xbb\\0\"\n\t\"\\xd0\\xb0\\xd0\\xbf\\xd1\\x80\\xd0\\xb5\\xd0\\xbb\\0\"\n\t\"\\xd0\\xb8\\xd1\\x98\\xd1\\x83\\xd0\\xbd\\0\"\n\t\"\\xd0\\xb8\\xd1\\x98\\xd1\\x83\\xd0\\xbb\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x98\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\xd1\\x98\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd1\\x98\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd0\\xba\\xd0\\xb0\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd1\\x98\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb8\\xd1\\x98\\xd0\\xbd\\0\"\n\t\"\\xd0\\xb8\\xd1\\x98\\xd0\\xbb\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd1\\x98\\0\"\n\t\"nje\\xc5\\xba\\x65la\\0\"\n\t\"p\\xc3\\xb3nje\\xc5\\xba\\x65le\\0\"\n\t\"wa\\xc5\\x82tora\\0\"\n\t\"srjoda\\0\"\n\t\"stw\\xc3\\xb3rtk\\0\"\n\t\"p\\xc4\\x9btk\\0\"\n\t\"wa\\xc5\\x82\\0\"\n\t\"stw\\0\"\n\t\"p\\xc4\\x9bt\\0\"\n\t\"\\xd1\\x8f\\xd0\\xba\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd0\\xb4\\xd1\\x83\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xbe\\xd1\\x80\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb0\\xd0\\xb9\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd1\\x88\\xd0\\xb0\\xd0\\xbd\\xd0\\xb1\\xd0\\xb0\\0\"\n\t\"\\xd0\\xaf\\xd0\\xba\\xd1\\x88\\0\"\n\t\"\\xd0\\x94\\xd1\\x83\\xd1\\x88\\0\"\n\t\"\\xd0\\xa1\\xd0\\xb5\\xd1\\x88\\0\"\n\t\"\\xd0\\xa7\\xd0\\xbe\\xd1\\x80\\0\"\n\t\"\\xd0\\x9f\\xd0\\xb0\\xd0\\xb9\\0\"\n\t\"\\xd0\\x96\\xd1\\x83\\xd0\\xbc\\0\"\n\t\"\\xd0\\xa8\\xd0\\xb0\\xd0\\xbd\\0\"\n\t\"\\xd1\\x8f\\xd0\\xbd\\xd0\\xb2\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb8\\xd1\\x8e\\xd0\\xbd\\0\"\n\t\"\\xd0\\xb8\\xd1\\x8e\\xd0\\xbb\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbd\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd1\\x8f\\xd0\\xb1\\xd1\\x80\\0\"\n\t\"\\xd8\\xa8\\xd9\\x8f\\xd8\\xaf\\xda\\xbe\\0\"\n\t\"\\xd9\\x85\\xd8\\xa6\\0\"\n\t\"\\xd9\\x8a\\xd9\\x86\\xd8\\xa7\\xd9\\x8a\\xd8\\xb1\\0\"\n\t\"\\xd9\\x81\\xd8\\xa8\\xd8\\xb1\\xd8\\xa7\\xd9\\x8a\\xd8\\xb1\\0\"\n\t\"\\xd8\\xa3\\xd8\\xa8\\xd8\\xb1\\xd9\\x8a\\xd9\\x84\\0\"\n\t\"\\xd9\\x85\\xd8\\xa7\\xd9\\x8a\\xd9\\x88\\0\"\n\t\"\\xd9\\x8a\\xd9\\x88\\xd9\\x86\\xd9\\x8a\\xd9\\x88\\0\"\n\t\"\\xd9\\x8a\\xd9\\x88\\xd9\\x84\\xd9\\x8a\\xd9\\x88\\0\"\n\t\"\\xd8\\xa3\\xd8\\xba\\xd8\\xb3\\xd8\\xb7\\xd8\\xb3\\0\"\n\t\"\\xd8\\xb3\\xd8\\xa8\\xd8\\xaa\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xa3\\xd9\\x83\\xd8\\xaa\\xd9\\x88\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd9\\x86\\xd9\\x88\\xd9\\x81\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xaf\\xd9\\x8a\\xd8\\xb3\\xd9\\x85\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"J\\xc3\\xa4nner\\0\"\n\t\"J\\xc3\\xa4n\\0\"\n\t\"Sun.\\0\"\n\t\"Mon.\\0\"\n\t\"Tue.\\0\"\n\t\"Wed.\\0\"\n\t\"Thu.\\0\"\n\t\"Fri.\\0\"\n\t\"Sat.\\0\"\n\t\"M.\\0\"\n\t\"Tu.\\0\"\n\t\"W.\\0\"\n\t\"Th.\\0\"\n\t\"F.\\0\"\n\t\"Oct.\\0\"\n\t\"juill.\\0\"\n\t\"vuoss\\xc3\\xa1rgga\\0\"\n\t\"ma\\xc5\\x8b\\xc5\\x8b\\x65\\x62\\xc3\\xa1rgga\\0\"\n\t\"gaskavahku\\0\"\n\t\"duorastaga\\0\"\n\t\"bearjadaga\\0\"\n\t\"l\\xc3\\xa1vvardaga\\0\"\n\t\"U\\0\"\n\t\"\\xd8\\xac\\xd8\\xa7\\xd9\\x86\\xd9\\x81\\xd9\\x8a\\0\"\n\t\"\\xd9\\x81\\xd9\\x8a\\xd9\\x81\\xd8\\xb1\\xd9\\x8a\\0\"\n\t\"\\xd8\\xa3\\xd9\\x81\\xd8\\xb1\\xd9\\x8a\\xd9\\x84\\0\"\n\t\"\\xd8\\xac\\xd9\\x88\\xd8\\xa7\\xd9\\x86\\0\"\n\t\"\\xd8\\xac\\xd9\\x88\\xd9\\x8a\\xd9\\x84\\xd9\\x8a\\xd8\\xa9\\0\"\n\t\"\\xd8\\xa3\\xd9\\x88\\xd8\\xaa\\0\"\n\t\"septembar\\0\"\n\t\"oktobar\\0\"\n\t\"novembar\\0\"\n\t\"decembar\\0\"\n\t\"avg\\0\"\n\t\"\\xd9\\x8a\\xd9\\x88\\xd9\\x84\\xd9\\x8a\\xd9\\x88\\xd8\\xb2\\0\"\n\t\"\\xd8\\xba\\xd8\\xb4\\xd8\\xaa\\0\"\n\t\"\\xd8\\xb4\\xd8\\xaa\\xd9\\x86\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd9\\x86\\xd9\\x88\\xd9\\x86\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"\\xd8\\xaf\\xd8\\xac\\xd9\\x86\\xd8\\xa8\\xd8\\xb1\\0\"\n\t\"ponedeljak\\0\"\n\t\"ut.\\0\"\n\t\"sr.\\0\"\n\t\"sub.\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd1\\x98\\xd0\\xb5\\xd1\\x99\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd1\\x99\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd1\\x83\\xd1\\x82\\xd0\\xbe\\xd1\\x80\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xb8\\xd1\\x98\\xd0\\xb5\\xd0\\xb4\\xd0\\xb0\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82\\xd0\\xb2\\xd1\\x80\\xd1\\x82\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb5\\xd1\\x82\\xd0\\xb0\\xd0\\xba\\0\"\n\t\"\\xd1\\x83\\xd1\\x82.\\0\"\n\t\"\\xd1\\x81\\xd1\\x80.\\0\"\n\t\"\\xd1\\x81\\xd1\\x83\\xd0\\xb1.\\0\"\n\t\"\\xd1\\x83\\0\"\n\t\"\\xd1\\x98\\xd0\\xb0\\xd0\\xbd\\xd1\\x83\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb1\\xd1\\x80\\xd1\\x83\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd1\\x98\\xd1\\x83\\xd0\\xbd\\0\"\n\t\"\\xd1\\x98\\xd1\\x83\\xd0\\xbb\\0\"\n\t\"\\xd1\\x81\\xd0\\xb5\\xd0\\xbf\\xd1\\x82\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xbe\\xd0\\xba\\xd1\\x82\\xd0\\xbe\\xd0\\xb1\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd0\\xb2\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd1\\x86\\xd0\\xb5\\xd0\\xbc\\xd0\\xb1\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb1.\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd0\\xb2.\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd1\\x86.\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd1\\x99\\xd0\\xb0\\0\"\n\t\"\\xd0\\xbd\\xd0\\xb5\\xd0\\xb4\\0\"\n\t\"\\xd0\\xbf\\xd0\\xbe\\xd0\\xbd\\0\"\n\t\"\\xd1\\x83\\xd1\\x82\\xd0\\xbe\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"\\xd1\\x87\\xd0\\xb5\\xd1\\x82\\0\"\n\t\"\\xd0\\xbf\\xd0\\xb5\\xd1\\x82\\0\"\n\t\"\\xd1\\x81\\xd1\\x83\\xd0\\xb1\\0\"\n\t\"\\xd1\\x84\\xd0\\xb5\\xd0\\xb1\\0\"\n\t\"\\xd0\\xbd\\xd0\\xbe\\xd0\\xb2\\0\"\n\t\"\\xd0\\xb4\\xd0\\xb5\\xd1\\x86\\0\"\n\t\"l\\0\"\n\t\"j\\0\"\n\t\"v\\0\"\n\t\"sre\\0\"\n\t\"pasepeeivi\\0\"\n\t\"vuossaarg\\xc3\\xa2\\0\"\n\t\"majebaarg\\xc3\\xa2\\0\"\n\t\"koskoho\\0\"\n\t\"tuor\\xc3\\xa2stuv\\0\"\n\t\"v\\xc3\\xa1stuppeeivi\\0\"\n\t\"l\\xc3\\xa1vurduv\\0\"\n\t\"pas\\0\"\n\t\"vuo\\0\"\n\t\"kos\\0\"\n\t\"tuo\\0\"\n\t\"v\\xc3\\xa1s\\0\"\n\t\"u\\xc4\\x91\\xc4\\x91\\xc3\\xa2ivem\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"kuov\\xc3\\xa2m\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"njuh\\xc4\\x8d\\xc3\\xa2m\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"cu\\xc3\\xa1\\xc5\\x8buim\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"vyesim\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"kesim\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"syeinim\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"porgem\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"\\xc4\\x8doh\\xc4\\x8d\\xc3\\xa2m\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"roovv\\xc3\\xa2\\x64m\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"skamm\\xc3\\xa2m\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"juovl\\xc3\\xa2m\\xc3\\xa1\\xc3\\xa1nu\\0\"\n\t\"u\\xc4\\x91iv\\0\"\n\t\"kuov\\xc3\\xa2\\0\"\n\t\"njuh\\xc4\\x8d\\xc3\\xa2\\0\"\n\t\"cu\\xc3\\xa1\\xc5\\x8bui\\0\"\n\t\"vyesi\\0\"\n\t\"kesi\\0\"\n\t\"syeini\\0\"\n\t\"porge\\0\"\n\t\"\\xc4\\x8doh\\xc4\\x8d\\xc3\\xa2\\0\"\n\t\"roovv\\xc3\\xa2\\x64\\0\"\n\t\"skamm\\xc3\\xa2\\0\"\n\t\"juovl\\xc3\\xa2\\0\"\n\t\"Febrero\\0\"\n\t\"Junio\\0\"\n\t\"Julio\\0\"\n\t\"Setiembre\\0\"\n\t\"Octubre\\0\"\n\t\"Noviembre\\0\"\n\t\"Diciembre\\0\"\n\t\"setiembre\\0\"\n\t\"Ene.\\0\"\n\t\"May.\\0\"\n\t\"Dic.\\0\"\n\t\"\\xd1\\x81\\xd1\\x80\\xd0\\xb5\\0\"\n\t\"f\\xc3\\xa9v.\\0\"\n\t\"jui.\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xaa\\xd9\\x82\\xd9\\x88\\xd9\\x8a\\xd9\\x85 \\xd8\\xa7\\xd9\\x84\\xd9\\x87\\xd8\\xac\\xd8\\xb1\\xd9\\x8a\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd0\\xb8\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb0\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8 \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"calendari gregori\\xc3\\xa0\\0\"\n\t\"\\xe5\\x85\\xac\\xe5\\x8e\\x86\\0\"\n\t\"Gregori\\xc3\\xa1nsk\\xc3\\xbd kalend\\xc3\\xa1\\xc5\\x99\\0\"\n\t\"gregoriansk kalender\\0\"\n\t\"Gregorianischer Kalender\\0\"\n\t\"\\xce\\x93\\xcf\\x81\\xce\\xb7\\xce\\xb3\\xce\\xbf\\xcf\\x81\\xce\\xb9\\xce\\xb1\\xce\\xbd\\xcf\\x8c \\xce\\xb7\\xce\\xbc\\xce\\xb5\\xcf\\x81\\xce\\xbf\\xce\\xbb\\xcf\\x8c\\xce\\xb3\\xce\\xb9\\xce\\xbf\\0\"\n\t\"Gregorian Calendar\\0\"\n\t\"calendario gregoriano\\0\"\n\t\"gregoriaaninen kalenteri\\0\"\n\t\"calendrier gr\\xc3\\xa9gorien\\0\"\n\t\"\\xd7\\x9c\\xd7\\x95\\xd7\\x97 \\xd7\\x94\\xd7\\xa9\\xd7\\xa0\\xd7\\x94 \\xd7\\x94\\xd7\\x92\\xd7\\xa8\\xd7\\x92\\xd7\\x95\\xd7\\xa8\\xd7\\x99\\xd7\\x90\\xd7\\xa0\\xd7\\x99\\0\"\n\t\"Gergely-napt\\xc3\\xa1r\\0\"\n\t\"Gregor\\xc3\\xadskt dagatal\\0\"\n\t\"Calendario gregoriano\\0\"\n\t\"\\xe8\\xa5\\xbf\\xe6\\x9a\\xa6(\\xe3\\x82\\xb0\\xe3\\x83\\xac\\xe3\\x82\\xb4\\xe3\\x83\\xaa\\xe3\\x82\\xaa\\xe6\\x9a\\xa6)\\0\"\n\t\"\\xec\\x96\\x91\\xeb\\xa0\\xa5\\0\"\n\t\"Gregoriaanse kalender\\0\"\n\t\"kalendarz gregoria\\xc5\\x84ski\\0\"\n\t\"Calend\\xc3\\xa1rio Gregoriano\\0\"\n\t\"chalender gregorian\\0\"\n\t\"calendar gregorian\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd0\\xb8\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb0\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8\\xd0\\xb9 \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\xd1\\x8c\\0\"\n\t\"gregorijanski kalendar\\0\"\n\t\"gregori\\xc3\\xa1nsky kalend\\xc3\\xa1r\\0\"\n\t\"kalendar gregorian\\0\"\n\t\"\\xe0\\xb8\\x9b\\xe0\\xb8\\x8f\\xe0\\xb8\\xb4\\xe0\\xb8\\x97\\xe0\\xb8\\xb4\\xe0\\xb8\\x99\\xe0\\xb8\\x9e\\xe0\\xb8\\xb8\\xe0\\xb8\\x97\\xe0\\xb8\\x98\\0\"\n\t\"Miladi Takvim\\0\"\n\t\"\\xd8\\xac\\xd8\\xa7\\xd8\\xb1\\xd8\\xac\\xdb\\x8c\\xd8\\xa7\\xd8\\xa6\\xdb\\x8c \\xda\\xa9\\xdb\\x8c\\xd9\\x84\\xd9\\x86\\xda\\x88\\xd8\\xb1\\0\"\n\t\"Kalender Gregorian\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd0\\xb8\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd1\\x96\\xd0\\xb0\\xd0\\xbd\\xd1\\x81\\xd1\\x8c\\xd0\\xba\\xd0\\xb8\\xd0\\xb9 \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd1\\x8b\\xd0\\xb3\\xd0\\xb0\\xd1\\x80\\xd1\\x8b\\xd1\\x8f\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd1\\x96 \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd1\\x8f\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"gregorijanski koledar\\0\"\n\t\"Gregoriuse kalender\\0\"\n\t\"Gregora kalend\\xc4\\x81rs\\0\"\n\t\"Grigaliaus kalendorius\\0\"\n\t\"\\xd8\\xaa\\xd9\\x82\\xd9\\x88\\xdb\\x8c\\xd9\\x85 \\xd9\\x85\\xdb\\x8c\\xd9\\x84\\xd8\\xa7\\xd8\\xaf\\xdb\\x8c\\0\"\n\t\"L\\xe1\\xbb\\x8b\\x63h Gregory\\0\"\n\t\"\\xd5\\xa3\\xd6\\x80\\xd5\\xab\\xd5\\xa3\\xd5\\xb8\\xd6\\x80\\xd5\\xb5\\xd5\\xa1\\xd5\\xb6 \\xd5\\xbf\\xd5\\xb8\\xd5\\xb4\\xd5\\xa1\\xd6\\x80\\0\"\n\t\"Qreqorian T\\xc9\\x99qvimi\\0\"\n\t\"Egutegi gregoriarra\\0\"\n\t\"gregorianska protyka\\0\"\n\t\"\\xd0\\x93\\xd1\\x80\\xd0\\xb5\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd1\\x98\\xd0\\xb0\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8 \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\0\"\n\t\"ikhalenda lesi-Gregorian\\0\"\n\t\"Gregoriese kalender\\0\"\n\t\"\\xe1\\x83\\x92\\xe1\\x83\\xa0\\xe1\\x83\\x98\\xe1\\x83\\x92\\xe1\\x83\\x9d\\xe1\\x83\\xa0\\xe1\\x83\\x98\\xe1\\x83\\x90\\xe1\\x83\\x9c\\xe1\\x83\\xa3\\xe1\\x83\\x9a\\xe1\\x83\\x98 \\xe1\\x83\\x99\\xe1\\x83\\x90\\xe1\\x83\\x9a\\xe1\\x83\\x94\\xe1\\x83\\x9c\\xe1\\x83\\x93\\xe1\\x83\\x90\\xe1\\x83\\xa0\\xe1\\x83\\x98\\0\"\n\t\"gregorianskur kalendari\\0\"\n\t\"\\xe0\\xa4\\x97\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x87\\xe0\\xa4\\x97\\xe0\\xa5\\x8b\\xe0\\xa4\\xb0\\xe0\\xa4\\xbf\\xe0\\xa4\\xaf\\xe0\\xa4\\xa8 \\xe0\\xa4\\x95\\xe0\\xa5\\x88\\xe0\\xa4\\xb2\\xe0\\xa5\\x87\\xe0\\xa4\\x82\\xe0\\xa4\\xa1\\xe0\\xa4\\xb0\\0\"\n\t\"Kalendarju Gregorjan\\0\"\n\t\"gregoria kaleander\\0\"\n\t\"F\\xc3\\xa9ilire Ghr\\xc3\\xa9\\x61g\\xc3\\xb3ra\\0\"\n\t\"Kalendar Gregory\\0\"\n\t\"\\xd0\\x93\\xd1\\x80\\xd0\\xb5\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb0\\xd0\\xbd\\xd0\\xb4\\xd1\\x8b\\xd2\\x9b \\xd0\\xba\\xd2\\xaf\\xd0\\xbd\\xd1\\x82\\xd1\\x96\\xd0\\xb7\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xd0\\x93\\xd1\\x80\\xd0\\xb8\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb0\\xd0\\xbd \\xd0\\xb6\\xd1\\x8b\\xd0\\xbb\\xd0\\xbd\\xd0\\xb0\\xd0\\xb0\\xd0\\xbc\\xd0\\xb0\\xd1\\x81\\xd1\\x8b\\0\"\n\t\"Kalenda ya Kigregori\\0\"\n\t\"Gregor\\xc3\\xbd\\x61n senenamasy\\0\"\n\t\"grigorian taqvimi\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd0\\xb8\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb0\\xd0\\xbd \\xd0\\xb5\\xd0\\xbb \\xd0\\xb8\\xd1\\x81\\xd3\\x99\\xd0\\xb1\\xd0\\xb5\\0\"\n\t\"\\xe0\\xa6\\x97\\xe0\\xa7\\x8d\\xe0\\xa6\\xb0\\xe0\\xa6\\xbf\\xe0\\xa6\\x97\\xe0\\xa7\\x8b\\xe0\\xa6\\xb0\\xe0\\xa6\\xbf\\xe0\\xa6\\xaf\\xe0\\xa6\\xbc\\xe0\\xa6\\xbe\\xe0\\xa6\\xa8 \\xe0\\xa6\\x95\\xe0\\xa7\\x8d\\xe0\\xa6\\xaf\\xe0\\xa6\\xbe\\xe0\\xa6\\xb2\\xe0\\xa7\\x87\\xe0\\xa6\\xa8\\xe0\\xa7\\x8d\\xe0\\xa6\\xa1\\xe0\\xa6\\xbe\\xe0\\xa6\\xb0\\0\"\n\t\"\\xe0\\xa8\\x97\\xe0\\xa8\\xb0\\xe0\\xa9\\x87\\xe0\\xa8\\x97\\xe0\\xa9\\x8b\\xe0\\xa8\\xb0\\xe0\\xa9\\x80\\xe0\\xa8\\x85\\xe0\\xa8\\xa8 \\xe0\\xa8\\x95\\xe0\\xa9\\x88\\xe0\\xa8\\xb2\\xe0\\xa9\\xb0\\xe0\\xa8\\xa1\\xe0\\xa8\\xb0\\0\"\n\t\"\\xe0\\xaa\\x97\\xe0\\xab\\x8d\\xe0\\xaa\\xb0\\xe0\\xab\\x87\\xe0\\xaa\\x97\\xe0\\xab\\x8b\\xe0\\xaa\\xb0\\xe0\\xaa\\xbf\\xe0\\xaa\\x85\\xe0\\xaa\\xa8 \\xe0\\xaa\\x95\\xe0\\xab\\x87\\xe0\\xaa\\xb2\\xe0\\xab\\x87\\xe0\\xaa\\xa8\\xe0\\xab\\x8d\\xe0\\xaa\\xa1\\xe0\\xaa\\xb0\\0\"\n\t\"\\xe0\\xae\\x95\\xe0\\xae\\xbf\\xe0\\xae\\xb0\\xe0\\xae\\xbf\\xe0\\xae\\x95\\xe0\\xaf\\x8b\\xe0\\xae\\xb0\\xe0\\xae\\xbf\\xe0\\xae\\xaf\\xe0\\xae\\xa9\\xe0\\xaf\\x8d \\xe0\\xae\\xa8\\xe0\\xae\\xbe\\xe0\\xae\\xb3\\xe0\\xaf\\x8d\\xe0\\xae\\x95\\xe0\\xae\\xbe\\xe0\\xae\\x9f\\xe0\\xaf\\x8d\\xe0\\xae\\x9f\\xe0\\xae\\xbf\\0\"\n\t\"\\xe0\\xb0\\x97\\xe0\\xb1\\x8d\\xe0\\xb0\\xb0\\xe0\\xb1\\x87\\xe0\\xb0\\x97\\xe0\\xb1\\x8b\\xe0\\xb0\\xb0\\xe0\\xb0\\xbf\\xe0\\xb0\\xaf\\xe0\\xb0\\xa8\\xe0\\xb1\\x8d \\xe0\\xb0\\x95\\xe0\\xb1\\x8d\\xe0\\xb0\\xaf\\xe0\\xb0\\xbe\\xe0\\xb0\\xb2\\xe0\\xb1\\x86\\xe0\\xb0\\x82\\xe0\\xb0\\xa1\\xe0\\xb0\\xb0\\xe0\\xb1\\x8d\\0\"\n\t\"\\xe0\\xb2\\x97\\xe0\\xb3\\x8d\\xe0\\xb2\\xb0\\xe0\\xb3\\x86\\xe0\\xb2\\x97\\xe0\\xb3\\x8b\\xe0\\xb2\\xb0\\xe0\\xb2\\xbf\\xe0\\xb2\\xaf\\xe0\\xb2\\xa8\\xe0\\xb3\\x8d \\xe0\\xb2\\x95\\xe0\\xb3\\x8d\\xe0\\xb2\\xaf\\xe0\\xb2\\xbe\\xe0\\xb2\\xb2\\xe0\\xb3\\x86\\xe0\\xb2\\x82\\xe0\\xb2\\xa1\\xe0\\xb2\\xb0\\xe0\\xb3\\x8d\\0\"\n\t\"\\xe0\\xb4\\x87\\xe0\\xb4\\x82\\xe0\\xb4\\x97\\xe0\\xb5\\x8d\\xe0\\xb4\\xb2\\xe0\\xb5\\x80\\xe0\\xb4\\xb7\\xe0\\xb5\\x8d \\xe0\\xb4\\x95\\xe0\\xb4\\xb2\\xe0\\xb4\\xa3\\xe0\\xb5\\x8d\\xe0\\xb4\\x9f\\xe0\\xb5\\xbc\\0\"\n\t\"\\xe0\\xa6\\x97\\xe0\\xa7\\x8d\\xe0\\xa7\\xb0\\xe0\\xa6\\xbf\\xe0\\xa6\\x97\\xe0\\xa7\\x8b\\xe0\\xa7\\xb0\\xe0\\xa7\\x80\\xe0\\xa6\\xaf\\xe0\\xa6\\xbc \\xe0\\xa6\\xaa\\xe0\\xa6\\x9e\\xe0\\xa7\\x8d\\xe0\\xa6\\x9c\\xe0\\xa6\\xbf\\xe0\\xa6\\x95\\xe0\\xa6\\xbe\\0\"\n\t\"\\xe0\\xa4\\x97\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x87\\xe0\\xa4\\x97\\xe0\\xa5\\x8b\\xe0\\xa4\\xb0\\xe0\\xa4\\xbf\\xe0\\xa4\\xaf\\xe0\\xa4\\xa8 \\xe0\\xa4\\xa6\\xe0\\xa4\\xbf\\xe0\\xa4\\xa8\\xe0\\xa4\\xa6\\xe0\\xa4\\xb0\\xe0\\xa5\\x8d\\xe0\\xa4\\xb6\\xe0\\xa4\\xbf\\xe0\\xa4\\x95\\xe0\\xa4\\xbe\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd0\\xb5\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb9\\xd0\\xbd \\xd1\\x85\\xd1\\x83\\xd0\\xb0\\xd0\\xbd\\xd0\\xbb\\xd0\\xb8\\0\"\n\t\"Calendr Gregori\\0\"\n\t\"\\xe1\\x9e\\x94\\xe1\\x9f\\x92\\xe1\\x9e\\x9a\\xe1\\x9e\\x8f\\xe1\\x9e\\xb7\\xe1\\x9e\\x91\\xe1\\x9e\\xb7\\xe1\\x9e\\x93\\xe2\\x80\\x8b\\xe1\\x9e\\xa0\\xe1\\x9f\\x92\\xe1\\x9e\\x9f\\xe1\\x9e\\x80\\xe1\\x9e\\xa0\\xe1\\x9f\\x92\\xe1\\x9e\\x9f\\xe1\\x9f\\x8a\\xe1\\x9e\\xb8\\0\"\n\t\"\\xe0\\xba\\x9b\\xe0\\xba\\xb0\\xe0\\xba\\x95\\xe0\\xba\\xb4\\xe0\\xba\\x97\\xe0\\xba\\xb4\\xe0\\xba\\x99\\xe0\\xbb\\x80\\xe0\\xba\\x81\\xe0\\xba\\xa3\\xe0\\xbb\\x82\\xe0\\xba\\x81\\xe0\\xba\\xa3\\xe0\\xba\\xbd\\xe0\\xba\\x99\\0\"\n\t\"\\xe1\\x80\\x94\\xe1\\x80\\xad\\xe1\\x80\\xaf\\xe1\\x80\\x84\\xe1\\x80\\xba\\xe1\\x80\\x84\\xe1\\x80\\xb6\\xe1\\x80\\x90\\xe1\\x80\\x80\\xe1\\x80\\xac\\xe1\\x80\\x9e\\xe1\\x80\\xaf\\xe1\\x80\\xb6\\xe1\\x80\\xb8 \\xe1\\x80\\x95\\xe1\\x80\\xbc\\xe1\\x80\\x80\\xe1\\x80\\xb9\\xe1\\x80\\x81\\xe1\\x80\\x92\\xe1\\x80\\xad\\xe1\\x80\\x94\\xe1\\x80\\xba\\0\"\n\t\"\\xe0\\xb6\\x9c\\xe0\\xb7\\x8a\\xe2\\x80\\x8d\\xe0\\xb6\\xbb\\xe0\\xb7\\x99\\xe0\\xb6\\x9c\\xe0\\xb6\\xbb\\xe0\\xb7\\x92\\xe0\\xb6\\xba\\xe0\\xb7\\x8f\\xe0\\xb6\\xb1\\xe0\\xb7\\x94 \\xe0\\xb6\\xaf\\xe0\\xb7\\x92\\xe0\\xb6\\xb1 \\xe0\\xb6\\xaf\\xe0\\xb6\\xbb\\xe0\\xb7\\x8a\\xe0\\xb7\\x81\\xe0\\xb6\\xb1\\xe0\\xb6\\xba\\0\"\n\t\"\\xe1\\x8e\\xa9\\xe1\\x8e\\xb4\\xe1\\x8e\\xaa\\xe1\\x8e\\xb5\\xe1\\x8e\\xa0\\xe1\\x8f\\x82 \\xe1\\x8f\\x85\\xe1\\x8f\\x99 \\xe1\\x8f\\x97\\xe1\\x8f\\x8e\\xe1\\x8f\\x8d\\xe1\\x8f\\x97\\0\"\n\t\"\\xe1\\x8b\\xa8\\xe1\\x8c\\x8d\\xe1\\x88\\xaa\\xe1\\x8c\\x8e\\xe1\\x88\\xaa\\xe1\\x8b\\xab\\xe1\\x8a\\x95 \\xe1\\x8b\\xa8\\xe1\\x89\\x80\\xe1\\x8a\\x95 \\xe1\\x8a\\xa0\\xe1\\x89\\x86\\xe1\\x8c\\xa3\\xe1\\x8c\\xa0\\xe1\\x88\\xad\\0\"\n\t\"\\xe0\\xa4\\x97\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x87\\xe0\\xa4\\x97\\xe0\\xa5\\x8b\\xe0\\xa4\\xb0\\xe0\\xa4\\xbf\\xe0\\xa4\\xaf\\xe0\\xa4\\xa8 \\xe0\\xa4\\xaa\\xe0\\xa4\\xbe\\xe0\\xa4\\xa4\\xe0\\xa5\\x8d\\xe0\\xa4\\xb0\\xe0\\xa5\\x8b\\0\"\n\t\"Gregoriaanske kalinder\\0\"\n\t\"Gregorian na Kalendaryo\\0\"\n\t\"Gregorianesche Kalenner\\0\"\n\t\"gregorianskit ullorsiutaat\\0\"\n\t\"\\xea\\x84\\x89\\xea\\x89\\xbb\\xea\\x83\\x85\\xea\\x91\\x8d\\0\"\n\t\"deiziadur gregorian\\0\"\n\t\"\\xd9\\x85\\xd9\\x89\\xd9\\x84\\xd8\\xa7\\xd8\\xaf\\xd9\\x89\\xd9\\x8a\\xdb\\x95 \\xd9\\x8a\\xd9\\x89\\xd9\\x84\\xd9\\x86\\xd8\\xa7\\xd9\\x85\\xdb\\x95\\xd8\\xb3\\xd9\\x89\\0\"\n\t\"Gregoriaanisch Kal\\xc3\\xa4nder\\0\"\n\t\"Am M\\xc3\\xacosachan Griogarach\\0\"\n\t\"\\xe5\\x85\\xac\\xe6\\x9b\\x86\\0\"\n\t\"\\xd8\\xa7\\xd9\\x84\\xd8\\xaa\\xd9\\x82\\xd9\\x88\\xd9\\x8a\\xd9\\x85 \\xd8\\xa7\\xd9\\x84\\xd9\\x85\\xd9\\x8a\\xd9\\x84\\xd8\\xa7\\xd8\\xaf\\xd9\\x8a\\0\"\n\t\"Calend\\xc3\\xa1rio gregoriano\\0\"\n\t\"gregoria\\xc5\\x84ski kalender\\0\"\n\t\"\\xd0\\x93\\xd1\\x80\\xd0\\xb8\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd0\\xb0\\xd0\\xbd \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\xd0\\xb8\\0\"\n\t\"gregoriala\\xc5\\xa1 kalendar\\0\"\n\t\"\\xd0\\xb3\\xd1\\x80\\xd0\\xb5\\xd0\\xb3\\xd0\\xbe\\xd1\\x80\\xd0\\xb8\\xd1\\x98\\xd0\\xb0\\xd0\\xbd\\xd1\\x81\\xd0\\xba\\xd0\\xb8 \\xd0\\xba\\xd0\\xb0\\xd0\\xbb\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xb0\\xd1\\x80\\0\"\n};\n\n\n#endif\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/culture-info.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_CULTURE_INFO_H_\n#define _MONO_METADATA_CULTURE_INFO_H_ 1\n\n#include <glib.h>\n#include <mono/metadata/object.h>\n\n#define NUM_DAYS 7\n#define NUM_MONTHS 13\n#define GROUP_SIZE 2\n#define NUM_CALENDARS 4\n\n#define NUM_SHORT_DATE_PATTERNS 14\n#define NUM_LONG_DATE_PATTERNS 10\n#define NUM_SHORT_TIME_PATTERNS 12\n#define NUM_LONG_TIME_PATTERNS 9\n#define NUM_YEAR_MONTH_PATTERNS 8\n\n#define idx2string(idx) (locale_strings + (idx))\n#define pattern2string(idx) (patterns + (idx))\n#define dtidx2string(idx) (datetime_strings + (idx))\n\n/* need to change this if the string data ends up to not fit in a 64KB array. */\ntypedef guint16 stridx_t;\n\ntypedef struct {\n\tstridx_t month_day_pattern;\n\tstridx_t am_designator;\n\tstridx_t pm_designator;\n\n\tstridx_t day_names [NUM_DAYS];\n\tstridx_t abbreviated_day_names [NUM_DAYS];\n\tstridx_t shortest_day_names [NUM_DAYS];\n\tstridx_t month_names [NUM_MONTHS];\n\tstridx_t month_genitive_names [NUM_MONTHS];\n\tstridx_t abbreviated_month_names [NUM_MONTHS];\n\tstridx_t abbreviated_month_genitive_names [NUM_MONTHS];\n\n\tgint8 calendar_week_rule;\n\tgint8 first_day_of_week;\n\n\tstridx_t date_separator;\n\tstridx_t time_separator;\n\n\tstridx_t short_date_patterns [NUM_SHORT_DATE_PATTERNS];\n\tstridx_t long_date_patterns [NUM_LONG_DATE_PATTERNS];\n\tstridx_t short_time_patterns [NUM_SHORT_TIME_PATTERNS];\n\tstridx_t long_time_patterns [NUM_LONG_TIME_PATTERNS];\n\tstridx_t year_month_patterns [NUM_YEAR_MONTH_PATTERNS];\n} DateTimeFormatEntry;\n\ntypedef struct {\n\t// 12x ushort -- 6 ints\n\tstridx_t currency_decimal_separator;\n\tstridx_t currency_group_separator;\n\tstridx_t number_decimal_separator;\n\tstridx_t number_group_separator;\n\n\tstridx_t currency_symbol;\n\tstridx_t percent_symbol;\n\tstridx_t nan_symbol;\n\tstridx_t per_mille_symbol;\n\tstridx_t negative_infinity_symbol;\n\tstridx_t positive_infinity_symbol;\n\n\tstridx_t negative_sign;\n\tstridx_t positive_sign;\n\n\t// 7x gint8 -- FIXME expand to 8, or sort by size.\n\t// For this reason, copy the data to a simpler \"managed\" form.\n\tgint8 currency_negative_pattern;\n\tgint8 currency_positive_pattern;\n\tgint8 percent_negative_pattern;\n\tgint8 percent_positive_pattern;\n\tgint8 number_negative_pattern;\n\n\tgint8 currency_decimal_digits;\n\tgint8 number_decimal_digits;\n\n\tgint currency_group_sizes [2];\n\tgint number_group_sizes [2];\n} NumberFormatEntry;\n\n// Due to the questionable layout of NumberFormatEntry, in particular\n// 7x byte, make something more guaranteed to match between native and managed.\n// mono/metadta/culture-info.h NumberFormatEntryManaged must match\n// mcs/class/corlib/ReferenceSources/CultureData.cs NumberFormatEntryManaged.\n// This is sorted alphabetically.\nstruct NumberFormatEntryManaged {\n\tgint32 currency_decimal_digits;\n\tgint32 currency_decimal_separator;\n\tgint32 currency_group_separator;\n\tgint32 currency_group_sizes0;\n\tgint32 currency_group_sizes1;\n\tgint32 currency_negative_pattern;\n\tgint32 currency_positive_pattern;\n\tgint32 currency_symbol;\n\tgint32 nan_symbol;\n\tgint32 negative_infinity_symbol;\n\tgint32 negative_sign;\n\tgint32 number_decimal_digits;\n\tgint32 number_decimal_separator;\n\tgint32 number_group_separator;\n\tgint32 number_group_sizes0;\n\tgint32 number_group_sizes1;\n\tgint32 number_negative_pattern;\n\tgint32 per_mille_symbol;\n\tgint32 percent_negative_pattern;\n\tgint32 percent_positive_pattern;\n\tgint32 percent_symbol;\n\tgint32 positive_infinity_symbol;\n\tgint32 positive_sign;\n};\n\ntypedef struct {\n\tgint ansi;\n\tgint ebcdic;\n\tgint mac;\n\tgint oem;\n\tMonoBoolean is_right_to_left;\n\tchar list_sep;\n} TextInfoEntry;\n\ntypedef struct {\n\tgint16 lcid;\n\tgint16 parent_lcid;\n\tgint16 calendar_type;\n\tgint16 region_entry_index;\n\tstridx_t name;\n\tstridx_t englishname;\n\tstridx_t nativename;\n\tstridx_t win3lang;\n\tstridx_t iso3lang;\n\tstridx_t iso2lang;\n\tstridx_t territory;\n\tstridx_t native_calendar_names [NUM_CALENDARS];\n\n\tgint16 datetime_format_index;\n\tgint16 number_format_index;\n\n\tTextInfoEntry text_info;\n} CultureInfoEntry;\n\ntypedef struct {\n\tstridx_t name;\n\tgint16 culture_entry_index;\n} CultureInfoNameEntry;\n\ntypedef struct {\n\tgint16 geo_id;\n\tstridx_t iso2name;\n\tstridx_t iso3name;\n\tstridx_t win3name;\n\tstridx_t english_name;\n\tstridx_t native_name;\n\tstridx_t currency_symbol;\n\tstridx_t iso_currency_symbol;\n\tstridx_t currency_english_name;\n\tstridx_t currency_native_name;\n} RegionInfoEntry;\n\ntypedef struct {\n\tstridx_t name;\n\tgint16 region_entry_index;\n} RegionInfoNameEntry;\n\n#endif\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/custom-attrs-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_CUSTOM_ATTRS_INTERNALS_H__\n#define __MONO_METADATA_CUSTOM_ATTRS_INTERNALS_H__\n\n#include <mono/metadata/object.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/reflection.h>\n\nMonoCustomAttrInfo*\nmono_custom_attrs_from_builders (MonoImage *alloc_img, MonoImage *image, MonoArray *cattrs);\n\ntypedef gboolean (*MonoAssemblyMetadataCustomAttrIterFunc) (MonoImage *image, guint32 typeref_scope_token, const gchar* nspace, const gchar* name, guint32 method_token, gpointer user_data);\n\nvoid\nmono_assembly_metadata_foreach_custom_attr (MonoAssembly *assembly, MonoAssemblyMetadataCustomAttrIterFunc func, gpointer user_data);\n\nvoid\nmono_class_metadata_foreach_custom_attr (MonoClass *klass, MonoAssemblyMetadataCustomAttrIterFunc func, gpointer user_data);\n\ngboolean\nmono_assembly_is_weak_field (MonoImage *image, guint32 field_idx);\n\nvoid\nmono_assembly_init_weak_fields (MonoImage *image);\n\nvoid\nmono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *method, const guchar *data, guint32 len, MonoArrayHandleOut typed_args_out, MonoArrayHandleOut named_args_out, CattrNamedArg **named_arg_info, MonoError *error);\n\nvoid\nmono_reflection_create_custom_attr_data_args_noalloc (MonoImage *image, MonoMethod *method, const guchar *data, guint32 len,\n\t\t\t\t\t\t\t\t\t\t\t\t\t  gpointer **typed_args_out, gpointer **named_args_out, int *num_named_args,\n\t\t\t\t\t\t\t\t\t\t\t\t\t  CattrNamedArg **named_arg_info, MonoError *error);\n\n#endif  /* __MONO_METADATA_REFLECTION_CUSTOM_ATTRS_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/debug-helpers.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_DEBUG_HELPERS_H__\n#define __MONO_DEBUG_HELPERS_H__\n\n#include <mono/metadata/class.h>\n\nMONO_BEGIN_DECLS\n\ntypedef struct MonoDisHelper MonoDisHelper;\n\ntypedef char* (*MonoDisIndenter) (MonoDisHelper *dh, MonoMethod *method, uint32_t ip_offset);\ntypedef char* (*MonoDisTokener)  (MonoDisHelper *dh, MonoMethod *method, uint32_t token);\n\nstruct MonoDisHelper {\n\tconst char *newline;\n\tconst char *label_format;\n\tconst char *label_target;\n\tMonoDisIndenter indenter;\n\tMonoDisTokener  tokener;\n\tvoid* user_data;\n};\n\nMONO_API char* mono_disasm_code_one (MonoDisHelper *dh, MonoMethod *method, const mono_byte *ip, const mono_byte** endp);\nMONO_API char* mono_disasm_code     (MonoDisHelper *dh, MonoMethod *method, const mono_byte *ip, const mono_byte* end);\n\ntypedef struct MonoMethodDesc MonoMethodDesc;\n\nMONO_API char*           mono_type_full_name (MonoType *type);\n\nMONO_API char*           mono_signature_get_desc (MonoMethodSignature *sig, mono_bool include_namespace);\n\nMONO_API char*           mono_context_get_desc (MonoGenericContext *context);\n\nMONO_API MonoMethodDesc* mono_method_desc_new (const char *name, mono_bool include_namespace);\nMONO_API MonoMethodDesc* mono_method_desc_from_method (MonoMethod *method);\nMONO_API void            mono_method_desc_free (MonoMethodDesc *desc);\nMONO_API mono_bool       mono_method_desc_match (MonoMethodDesc *desc, MonoMethod *method);\nMONO_API mono_bool       mono_method_desc_is_full (MonoMethodDesc *desc);\nMONO_API mono_bool       mono_method_desc_full_match (MonoMethodDesc *desc, MonoMethod *method);\nMONO_API MonoMethod*     mono_method_desc_search_in_class (MonoMethodDesc *desc, MonoClass *klass);\nMONO_API MonoMethod*     mono_method_desc_search_in_image (MonoMethodDesc *desc, MonoImage *image);\n\nMONO_API char*           mono_method_full_name (MonoMethod *method, mono_bool signature);\nMONO_API char*           mono_method_get_reflection_name (MonoMethod *method);\n\nMONO_API char*           mono_field_full_name (MonoClassField *field);\n\nMONO_END_DECLS\n\n#endif /* __MONO_DEBUG_HELPERS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/debug-internals.h",
    "content": "#ifndef __DEBUG_INTERNALS_H__\n#define __DEBUG_INTERNALS_H__\n\n#include <glib.h>\n#include <mono/metadata/debug-helpers.h>\n#include <mono/metadata/mono-debug.h>\n#include <mono/utils/mono-compiler.h>\n\nstruct _MonoDebugMethodInfo {\n\tMonoMethod *method;\n\tMonoDebugHandle *handle;\n\tuint32_t index;\n\tuint32_t data_offset;\n\tuint32_t lnt_offset;\n};\n\ntypedef struct {\n\tint parent;\n\tint type;\n\t/* IL offsets */\n\tint start_offset, end_offset;\n} MonoDebugCodeBlock;\n\ntypedef struct {\n\tchar *name;\n\tint index;\n\t/* Might be null for the main scope */\n\tMonoDebugCodeBlock *block;\n} MonoDebugLocalVar;\n\n/*\n * Information about local variables retrieved from a symbol file.\n */\nstruct _MonoDebugLocalsInfo {\n\tint num_locals;\n\tMonoDebugLocalVar *locals;\n\tint num_blocks;\n\tMonoDebugCodeBlock *code_blocks;\n};\n\n/*\n* Information about method await yield and resume offsets retrieved from a symbol file.\n*/\nstruct _MonoDebugMethodAsyncInfo {\n\tuint32_t catch_handler_offset;\n\tint num_awaits;\n\tuint32_t *yield_offsets;\n\tuint32_t *resume_offsets;\n\tuint32_t *move_next_method_token;\n};\n\nstruct _MonoDebugLineNumberEntry {\n\tuint32_t il_offset;\n\tuint32_t native_offset;\n};\n\n/*\n * Information about a source file retrieved from a symbol file.\n */\ntypedef struct {\n\tchar *source_file;\n\t/* 16 byte long */\n\tguint8 *guid, *hash;\n} MonoDebugSourceInfo;\n\ntypedef struct {\n\tint il_offset;\n\tint line, column;\n\tint end_line, end_column;\n} MonoSymSeqPoint;\n\nvoid            mono_debugger_lock                          (void);\nvoid            mono_debugger_unlock                        (void);\n\nMONO_LLVM_INTERNAL void\nmono_debug_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file,\n\t\t\t   GPtrArray **source_file_list, int **source_files,\n\t\t\t   MonoSymSeqPoint **seq_points, int *n_seq_points);\n\nMONO_API void\nmono_debug_free_locals (MonoDebugLocalsInfo *info);\n\nvoid\nmono_debug_free_method_async_debug_info (MonoDebugMethodAsyncInfo *info);\n\ngboolean\nmono_debug_image_has_debug_info (MonoImage *image);\n\nMonoDebugSourceLocation *\nmono_debug_lookup_source_location_by_il (MonoMethod *method, guint32 il_offset, MonoDomain *domain);\n\nchar*\nmono_debug_image_get_sourcelink (MonoImage *image);\n\n#endif /* __DEBUG_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/debug-mono-ppdb.h",
    "content": "/**\n * \\file\n * Support for the portable PDB symbol file format\n *\n *\n * Author:\n *\tMono Project (http://www.mono-project.com)\n *\n * Copyright 2015 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_METADATA_DEBUG_MONO_PPDB_H__\n#define __MONO_METADATA_DEBUG_MONO_PPDB_H__\n\n#include <config.h>\n#include <mono/metadata/metadata-internals.h>\n#include <mono/metadata/mono-debug.h>\n\nMonoPPDBFile*\nmono_ppdb_load_file (MonoImage *image, const guint8 *raw_contents, int size);\n\nvoid\nmono_ppdb_close (MonoDebugHandle *handle);\n\nMonoDebugMethodInfo *\nmono_ppdb_lookup_method (MonoDebugHandle *handle, MonoMethod *method);\n\nMonoDebugSourceLocation *\nmono_ppdb_lookup_location (MonoDebugMethodInfo *minfo, uint32_t offset);\n\nvoid\nmono_ppdb_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, GPtrArray **source_file_list, int **source_files, MonoSymSeqPoint **seq_points, int *n_seq_points);\n\nMonoDebugLocalsInfo*\nmono_ppdb_lookup_locals (MonoDebugMethodInfo *minfo);\n\nMonoDebugMethodAsyncInfo*\nmono_ppdb_lookup_method_async_debug_info (MonoDebugMethodInfo *minfo);\n\nMonoImage *\nmono_ppdb_get_image (MonoPPDBFile *ppdb);\n\nchar *\nmono_ppdb_get_sourcelink (MonoDebugHandle *handle);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/debug-mono-symfile.h",
    "content": "/**\n * \\file\n * This header is only installed for use by the debugger:\n * the structures and the API declared here are not supported.\n * Copyright 2012 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_DEBUG_MONO_SYMFILE_H__\n#define __MONO_DEBUG_MONO_SYMFILE_H__\n\n#include <glib.h>\n#include <mono/metadata/class.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/mono-debug.h>\n#include <mono/metadata/debug-internals.h>\n\ntypedef struct MonoSymbolFileOffsetTable\tMonoSymbolFileOffsetTable;\ntypedef struct MonoSymbolFileLineNumberEntry\tMonoSymbolFileLineNumberEntry;\ntypedef struct MonoSymbolFileMethodAddress\tMonoSymbolFileMethodAddress;\ntypedef struct MonoSymbolFileDynamicTable\tMonoSymbolFileDynamicTable;\ntypedef struct MonoSymbolFileSourceEntry\tMonoSymbolFileSourceEntry;\ntypedef struct MonoSymbolFileMethodEntry\tMonoSymbolFileMethodEntry;\n\n/* Keep in sync with OffsetTable in mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs */\nstruct MonoSymbolFileOffsetTable {\n\tuint32_t _total_file_size;\n\tuint32_t _data_section_offset;\n\tuint32_t _data_section_size;\n\tuint32_t _compile_unit_count;\n\tuint32_t _compile_unit_table_offset;\n\tuint32_t _compile_unit_table_size;\n\tuint32_t _source_count;\n\tuint32_t _source_table_offset;\n\tuint32_t _source_table_size;\n\tuint32_t _method_count;\n\tuint32_t _method_table_offset;\n\tuint32_t _method_table_size;\n\tuint32_t _type_count;\n\tuint32_t _anonymous_scope_count;\n\tuint32_t _anonymous_scope_table_offset;\n\tuint32_t _anonymous_scope_table_size;\n\tuint32_t _line_number_table_line_base;\n\tuint32_t _line_number_table_line_range;\n\tuint32_t _line_number_table_opcode_base;\n\tuint32_t _is_aspx_source;\n};\n\nstruct MonoSymbolFileSourceEntry {\n\tuint32_t _index;\n\tuint32_t _data_offset;\n};\n\nstruct MonoSymbolFileMethodEntry {\n\tuint32_t _token;\n\tuint32_t _data_offset;\n\tuint32_t _line_number_table;\n};\n\nstruct MonoSymbolFileMethodAddress {\n\tuint32_t size;\n\tconst uint8_t *start_address;\n\tconst uint8_t *end_address;\n\tconst uint8_t *method_start_address;\n\tconst uint8_t *method_end_address;\n\tconst uint8_t *wrapper_address;\n\tuint32_t has_this;\n\tuint32_t num_params;\n\tuint32_t variable_table_offset;\n\tuint32_t type_table_offset;\n\tuint32_t num_line_numbers;\n\tuint32_t line_number_offset;\n\tuint8_t data [MONO_ZERO_LEN_ARRAY];\n};\n\n#define MONO_SYMBOL_FILE_MAJOR_VERSION\t\t50\n#define MONO_SYMBOL_FILE_MINOR_VERSION\t\t0\n#define MONO_SYMBOL_FILE_MAGIC\t\t\t0x45e82623fd7fa614ULL\n\nMONO_BEGIN_DECLS\n\nMONO_API MonoSymbolFile *\nmono_debug_open_mono_symbols       (MonoDebugHandle          *handle,\n\t\t\t\t    const uint8_t            *raw_contents,\n\t\t\t\t    int                       size,\n\t\t\t\t    mono_bool                 in_the_debugger);\n\nMONO_API void\nmono_debug_close_mono_symbol_file  (MonoSymbolFile           *symfile);\n\nMONO_API mono_bool\nmono_debug_symfile_is_loaded       (MonoSymbolFile           *symfile);\n\nMONO_API MonoDebugSourceLocation *\nmono_debug_symfile_lookup_location (MonoDebugMethodInfo      *minfo,\n\t\t\t\t    uint32_t                  offset);\n\nMONO_API void\nmono_debug_symfile_free_location   (MonoDebugSourceLocation  *location);\n\nMONO_API MonoDebugMethodInfo *\nmono_debug_symfile_lookup_method   (MonoDebugHandle          *handle,\n\t\t\t\t    MonoMethod               *method);\n\nMONO_API MonoDebugLocalsInfo*\nmono_debug_symfile_lookup_locals (MonoDebugMethodInfo *minfo);\n\nvoid\nmono_debug_symfile_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, GPtrArray **source_file_list, int **source_files, MonoSymSeqPoint **seq_points, int *n_seq_points);\n\nMONO_END_DECLS\n\n#endif /* __MONO_SYMFILE_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/domain-internals.h",
    "content": "/**\n * \\file\n * Appdomain-related internal data structures and functions.\n * Copyright 2012 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_DOMAIN_INTERNALS_H__\n#define __MONO_METADATA_DOMAIN_INTERNALS_H__\n\n#include <mono/utils/mono-forward-internal.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/metadata/appdomain.h>\n#include <mono/metadata/mempool.h>\n#include <mono/metadata/lock-tracer.h>\n#include <mono/utils/mono-codeman.h>\n#include <mono/metadata/mono-hash.h>\n#include <mono/metadata/mono-conc-hash.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/mono-internal-hash.h>\n#include <mono/metadata/loader-internals.h>\n#include <mono/metadata/mempool-internals.h>\n#include <mono/metadata/handle-decl.h>\n\n/* Mono appdomain support is deeply itegrated in the runtime, as a result, even\n * though .NET Standard does not include System.AppDomain in\n * System.Private.CoreLib, we still depend on having an appdomain class.\n * So we move it to Mono.MonoDomain\n *\n */\n#ifndef ENABLE_NETCORE\n#define MONO_APPDOMAIN_CLASS_NAME_SPACE \"System\"\n#define MONO_APPDOMAIN_CLASS_NAME \"AppDomain\"\n#define MONO_APPDOMAIN_SETUP_CLASS_NAME_SPACE \"System\"\n#define MONO_APPDOMAIN_SETUP_CLASS_NAME \"AppDomainSetup\"\n#else\n#define MONO_APPDOMAIN_CLASS_NAME_SPACE \"Mono\"\n#define MONO_APPDOMAIN_CLASS_NAME \"MonoDomain\"\n#define MONO_APPDOMAIN_SETUP_CLASS_NAME_SPACE \"Mono\"\n#define MONO_APPDOMAIN_SETUP_CLASS_NAME \"MonoDomainSetup\"\n#endif\n\n/*\n * If this is set, the memory belonging to appdomains is not freed when a domain is\n * unloaded, and assemblies loaded by the appdomain are not unloaded either. This\n * allows us to use typed gc in non-default appdomains too, leading to increased\n * performance.\n */ \nextern gboolean mono_dont_free_domains;\n\n/* This is a copy of System.AppDomainSetup */\ntypedef struct {\n\tMonoObject object;\n\tMonoString *application_base;\n\tMonoString *application_name;\n\tMonoString *cache_path;\n\tMonoString *configuration_file;\n\tMonoString *dynamic_base;\n\tMonoString *license_file;\n\tMonoString *private_bin_path;\n\tMonoString *private_bin_path_probe;\n\tMonoString *shadow_copy_directories;\n\tMonoString *shadow_copy_files;\n\tMonoBoolean publisher_policy;\n\tMonoBoolean path_changed;\n\tint loader_optimization;\n\tMonoBoolean disallow_binding_redirects;\n\tMonoBoolean disallow_code_downloads;\n\tMonoObject *activation_arguments; /* it is System.Object in 1.x, ActivationArguments in 2.0 */\n\tMonoObject *domain_initializer;\n\tMonoObject *application_trust; /* it is System.Object in 1.x, ApplicationTrust in 2.0 */\n\tMonoArray *domain_initializer_args;\n\tMonoBoolean disallow_appbase_probe;\n\tMonoArray *configuration_bytes;\n\tMonoArray *serialized_non_primitives;\n} MonoAppDomainSetup;\n\ntypedef struct _MonoJitInfoTable MonoJitInfoTable;\ntypedef struct _MonoJitInfoTableChunk MonoJitInfoTableChunk;\n\n#define MONO_JIT_INFO_TABLE_CHUNK_SIZE\t\t64\n\nstruct _MonoJitInfoTableChunk\n{\n\tint\t\t       refcount;\n\tvolatile int           num_elements;\n\tvolatile gint8        *last_code_end;\n\tMonoJitInfo *next_tombstone;\n\tMonoJitInfo * volatile data [MONO_JIT_INFO_TABLE_CHUNK_SIZE];\n};\n\nstruct _MonoJitInfoTable\n{\n\tMonoDomain\t       *domain;\n\tint\t\t\tnum_chunks;\n\tint\t\t\tnum_valid;\n\tMonoJitInfoTableChunk  *chunks [MONO_ZERO_LEN_ARRAY];\n};\n\n#define MONO_SIZEOF_JIT_INFO_TABLE (sizeof (struct _MonoJitInfoTable) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n\ntypedef GArray MonoAotModuleInfoTable;\n\ntypedef struct {\n\tguint32  flags;\n\tgint32   exvar_offset;\n\tgpointer try_start;\n\tgpointer try_end;\n\tgpointer handler_start;\n\t/*\n\t * For LLVM compiled code, this is the index of the il clause\n\t * associated with this handler.\n\t */\n\tint clause_index;\n\tuint32_t try_offset;\n\tuint32_t try_len;\n\tuint32_t handler_offset;\n\tuint32_t handler_len;\n\tunion {\n\t\tMonoClass *catch_class;\n\t\tgpointer filter;\n\t\tgpointer handler_end;\n\t} data;\n} MonoJitExceptionInfo;\n\n/*\n * Contains information about the type arguments for generic shared methods.\n */\ntypedef struct {\n\tgboolean is_gsharedvt;\n} MonoGenericSharingContext;\n\n/* Simplified DWARF location list entry */\ntypedef struct {\n\t/* Whenever the value is in a register */\n\tgboolean is_reg;\n\t/*\n\t * If is_reg is TRUE, the register which contains the value. Otherwise\n\t * the base register.\n\t */\n\tint reg;\n\t/*\n\t * If is_reg is FALSE, the offset of the stack location relative to 'reg'.\n\t * Otherwise, 0.\n\t */\n\tint offset;\n\t/*\n\t * Offsets of the PC interval where the value is in this location.\n\t */\n\tint from, to;\n} MonoDwarfLocListEntry;\n\ntypedef struct\n{\n\tMonoGenericSharingContext *generic_sharing_context;\n\tint nlocs;\n\tMonoDwarfLocListEntry *locations;\n\tgint32 this_offset;\n\tguint8 this_reg;\n\tgboolean has_this:1;\n\tgboolean this_in_reg:1;\n} MonoGenericJitInfo;\n\n/*\nA try block hole is used to represent a non-contiguous part of\nof a segment of native code protected by a given .try block.\nUsually, a try block is defined as a contiguous segment of code.\nBut in some cases it's needed to have some parts of it to not be protected.\nFor example, given \"try {} finally {}\", the code in the .try block to call\nthe finally part looks like:\n\ntry {\n    ...\n\tcall finally_block\n\tadjust stack\n\tjump outside try block\n\t...\n} finally {\n\t...\n}\n\nThe instructions between the call and the jump should not be under the try block since they happen\nafter the finally block executes, which means if an async exceptions happens at that point we would\nexecute the finally clause twice. So, to avoid this, we introduce a hole in the try block to signal\nthat those instructions are not protected.\n*/\ntypedef struct\n{\n\tguint32 offset;\n\tguint16 clause;\n\tguint16 length;\n} MonoTryBlockHoleJitInfo;\n\ntypedef struct\n{\n\tguint16 num_holes;\n\tMonoTryBlockHoleJitInfo holes [MONO_ZERO_LEN_ARRAY];\n} MonoTryBlockHoleTableJitInfo;\n\ntypedef struct\n{\n\tguint32 stack_size;\n\tguint32 epilog_size;\n} MonoArchEHJitInfo;\n\ntypedef struct {\n\t/* Relative to code_start */\n\tint thunks_offset;\n\tint thunks_size;\n} MonoThunkJitInfo;\n\ntypedef struct {\n\tguint8 *unw_info;\n\tint unw_info_len;\n} MonoUnwindJitInfo;\n\ntypedef enum {\n\tJIT_INFO_NONE = 0,\n\tJIT_INFO_HAS_GENERIC_JIT_INFO = (1 << 0),\n\tJIT_INFO_HAS_TRY_BLOCK_HOLES = (1 << 1),\n\tJIT_INFO_HAS_ARCH_EH_INFO = (1 << 2),\n\tJIT_INFO_HAS_THUNK_INFO = (1 << 3),\n\t/*\n\t * If this is set, the unwind info is stored in the structure, instead of being pointed to by the\n\t * 'unwind_info' field.\n\t */\n\tJIT_INFO_HAS_UNWIND_INFO = (1 << 4)\n} MonoJitInfoFlags;\n\nG_ENUM_FUNCTIONS (MonoJitInfoFlags)\n\nstruct _MonoJitInfo {\n\t/* NOTE: These first two elements (method and\n\t   next_jit_code_hash) must be in the same order and at the\n\t   same offset as in RuntimeMethod, because of the jit_code_hash\n\t   internal hash table in MonoDomain. */\n\tunion {\n\t\tMonoMethod *method;\n\t\tMonoImage *image;\n\t\tMonoAotModule *aot_info;\n\t\tMonoTrampInfo *tramp_info;\n\t} d;\n\tunion {\n\t\tMonoJitInfo *next_jit_code_hash;\n\t\tMonoJitInfo *next_tombstone;\n\t} n;\n\tgpointer    code_start;\n\tguint32     unwind_info;\n\tint         code_size;\n\tguint32     num_clauses:15;\n\t/* Whenever the code is domain neutral or 'shared' */\n\tgboolean    domain_neutral:1;\n\tgboolean    has_generic_jit_info:1;\n\tgboolean    has_try_block_holes:1;\n\tgboolean    has_arch_eh_info:1;\n\tgboolean    has_thunk_info:1;\n\tgboolean    has_unwind_info:1;\n\tgboolean    from_aot:1;\n\tgboolean    from_llvm:1;\n\tgboolean    dbg_attrs_inited:1;\n\tgboolean    dbg_hidden:1;\n\t/* Whenever this jit info was loaded in async context */\n\tgboolean    async:1;\n\tgboolean    dbg_step_through:1;\n\tgboolean    dbg_non_user_code:1;\n\t/*\n\t * Whenever this jit info refers to a trampoline.\n\t * d.tramp_info contains additional data in this case.\n\t */\n\tgboolean    is_trampoline:1;\n\t/* Whenever this jit info refers to an interpreter method */\n\tgboolean    is_interp:1;\n\n\t/* FIXME: Embed this after the structure later*/\n\tgpointer    gc_info; /* Currently only used by SGen */\n\n\tgpointer    seq_points;\n\t\n\tMonoJitExceptionInfo clauses [MONO_ZERO_LEN_ARRAY];\n\t/* There is an optional MonoGenericJitInfo after the clauses */\n\t/* There is an optional MonoTryBlockHoleTableJitInfo after MonoGenericJitInfo clauses*/\n\t/* There is an optional MonoArchEHJitInfo after MonoTryBlockHoleTableJitInfo */\n\t/* There is an optional MonoThunkJitInfo after MonoArchEHJitInfo */\n};\n\n#define MONO_SIZEOF_JIT_INFO (offsetof (struct _MonoJitInfo, clauses))\n\ntypedef struct {\n\tgpointer *static_data; /* Used to free the static data without going through the MonoAppContext object itself. */\n\tuint32_t gc_handle;\n} ContextStaticData;\n\nstruct _MonoAppContext {\n\tMonoObject obj;\n\tgint32 domain_id;\n\tgint32 context_id;\n\tgpointer *static_data;\n\tContextStaticData *data;\n};\n\n/* Lock-free allocator */\ntypedef struct {\n\tguint8 *mem;\n\tgpointer prev;\n\tint size, pos;\n} LockFreeMempoolChunk;\n\ntypedef struct {\n\tLockFreeMempoolChunk *current, *chunks;\n} LockFreeMempool;\n\n/*\n * We have two unloading states because the domain\n * must remain fully functional while AppDomain::DomainUnload is\n * processed.\n * After that unloading began and all domain facilities are teared down\n * such as execution of new threadpool jobs.  \n */\ntypedef enum {\n\tMONO_APPDOMAIN_CREATED,\n\tMONO_APPDOMAIN_UNLOADING_START,\n\tMONO_APPDOMAIN_UNLOADING,\n\tMONO_APPDOMAIN_UNLOADED\n} MonoAppDomainState;\n\ntypedef struct _MonoThunkFreeList {\n\tguint32 size;\n\tint length;\t\t/* only valid for the wait list */\n\tstruct _MonoThunkFreeList *next;\n} MonoThunkFreeList;\n\ntypedef struct _MonoJitCodeHash MonoJitCodeHash;\n\nstruct _MonoDomain {\n\t/*\n\t * This lock must never be taken before the loader lock,\n\t * i.e. if both are taken by the same thread, the loader lock\n\t * must taken first.\n\t */\n\tMonoCoopMutex    lock;\n\tMonoMemPool        *mp;\n\tMonoCodeManager    *code_mp;\n\t/*\n\t * keep all the managed objects close to each other for the precise GC\n\t * For the Boehm GC we additionally keep close also other GC-tracked pointers.\n\t */\n#define MONO_DOMAIN_FIRST_OBJECT setup\n\tMonoAppDomainSetup *setup;\n\tMonoAppDomain      *domain;\n\tMonoAppContext     *default_context;\n\tMonoException      *out_of_memory_ex;\n\tMonoException      *null_reference_ex;\n\tMonoException      *stack_overflow_ex;\n\t/* typeof (void) */\n\tMonoObject         *typeof_void;\n\t/* Ephemeron Tombstone*/\n\tMonoObject         *ephemeron_tombstone;\n\t/* new MonoType [0] */\n\tMonoArray          *empty_types;\n\tMonoString         *empty_string;\n\t/* \n\t * The fields between FIRST_GC_TRACKED and LAST_GC_TRACKED are roots, but\n\t * not object references.\n\t */\n#define MONO_DOMAIN_FIRST_GC_TRACKED env\n\tMonoGHashTable     *env;\n\tMonoGHashTable     *ldstr_table;\n\t/* hashtables for Reflection handles */\n\tMonoGHashTable     *type_hash;\n\tMonoConcGHashTable     *refobject_hash;\n\t/* maps class -> type initialization exception object */\n\tMonoGHashTable    *type_init_exception_hash;\n\t/* maps delegate trampoline addr -> delegate object */\n\tMonoGHashTable     *delegate_hash_table;\n#define MONO_DOMAIN_LAST_GC_TRACKED delegate_hash_table\n\tguint32            state;\n\t/* Needed by Thread:GetDomainID() */\n\tgint32             domain_id;\n\tgint32             shadow_serial;\n\t/*\n\t * For framework Mono, this is every assembly loaded in this\n\t * domain. For netcore, this is every assembly loaded in every ALC in\n\t * this domain.  In netcore, the thread that adds an assembly to its\n\t * MonoAssemblyLoadContext:loaded_assemblies should also add it to this\n\t * list.\n\t */\n\tGSList             *domain_assemblies;\n\tMonoAssembly       *entry_assembly;\n\tchar               *friendly_name;\n\tGPtrArray          *class_vtable_array;\n\t/* maps remote class key -> MonoRemoteClass */\n\tGHashTable         *proxy_vtable_hash;\n\t/* Protected by 'jit_code_hash_lock' */\n\tMonoInternalHashTable jit_code_hash;\n\tmono_mutex_t    jit_code_hash_lock;\n\tint\t\t    num_jit_info_table_duplicates;\n\tMonoJitInfoTable * \n\t  volatile          jit_info_table;\n\t/*\n\t * Contains information about AOT loaded code.\n\t * Only used in the root domain.\n\t */\n\tMonoJitInfoTable *\n\t  volatile          aot_modules;\n\tGSList\t\t   *jit_info_free_queue;\n\t/* Used when loading assemblies */\n\tgchar **search_path;\n\tgchar *private_bin_path;\n\tLockFreeMempool *lock_free_mp;\n\t\n\t/* Used by remoting proxies */\n\tMonoMethod         *create_proxy_for_type_method;\n\tMonoMethod         *private_invoke_method;\n\t/* Used to store offsets of thread and context static fields */\n\tGHashTable         *special_static_fields;\n\t/* \n\t * This must be a GHashTable, since these objects can't be finalized\n\t * if the hashtable contains a GC visible reference to them.\n\t */\n\tGHashTable         *finalizable_objects_hash;\n\n\t/* Protects the three hashes above */\n\tmono_mutex_t   finalizable_objects_hash_lock;\n\t/* Used when accessing 'domain_assemblies' */\n\tmono_mutex_t    assemblies_lock;\n\n\tGHashTable\t   *generic_virtual_cases;\n\n\t/* Information maintained by the JIT engine */\n\tgpointer runtime_info;\n\n\t/* Information maintained by mono-debug.c */\n\tgpointer debug_info;\n\n\t/* Contains the compiled runtime invoke wrapper used by finalizers */\n\tgpointer            finalize_runtime_invoke;\n\n\t/* Contains the compiled runtime invoke wrapper used by async resylt creation to capture thread context*/\n\tgpointer            capture_context_runtime_invoke;\n\n\t/* Contains the compiled method used by async resylt creation to capture thread context*/\n\tgpointer            capture_context_method;\n\n\t/* Assembly bindings, the per-domain part */\n\tGSList *assembly_bindings;\n\tgboolean assembly_bindings_parsed;\n\n\t/* Used by socket-io.c */\n\t/* These are domain specific, since the assembly can be unloaded */\n\tMonoImage *socket_assembly;\n\tMonoClass *sockaddr_class;\n\tMonoClassField *sockaddr_data_field;\n\tMonoClassField *sockaddr_data_length_field;\n\n\t/* Cache function pointers for architectures  */\n\t/* that require wrappers */\n\tGHashTable *ftnptrs_hash;\n\n\t/* Maps MonoMethod* to weak links to DynamicMethod objects */\n\tGHashTable *method_to_dyn_method;\n\n\t/* <ThrowUnobservedTaskExceptions /> support */\n\tgboolean throw_unobserved_task_exceptions;\n\n\tguint32 execution_context_field_offset;\n\n#ifdef ENABLE_NETCORE\n\tGSList *alcs;\n\tMonoAssemblyLoadContext *default_alc;\n\tMonoCoopMutex alcs_lock; /* Used when accessing 'alcs' */\n#endif\n};\n\ntypedef struct  {\n\tguint16 major, minor, build, revision;\n} AssemblyVersionSet;\n\n/* MonoRuntimeInfo: Contains information about versions supported by this runtime */\ntypedef struct  {\n\tconst char runtime_version [12];\n\tconst char framework_version [4];\n\tconst AssemblyVersionSet version_sets [5];\n} MonoRuntimeInfo;\n\n#define mono_domain_assemblies_lock(domain) mono_locks_os_acquire(&(domain)->assemblies_lock, DomainAssembliesLock)\n#define mono_domain_assemblies_unlock(domain) mono_locks_os_release(&(domain)->assemblies_lock, DomainAssembliesLock)\n#define mono_domain_jit_code_hash_lock(domain) mono_locks_os_acquire(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock)\n#define mono_domain_jit_code_hash_unlock(domain) mono_locks_os_release(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock)\n\ntypedef MonoDomain* (*MonoLoadFunc) (const char *filename, const char *runtime_version);\n\nMONO_LLVM_INTERNAL void mono_domain_lock (MonoDomain *domain);\nMONO_LLVM_INTERNAL void mono_domain_unlock (MonoDomain *domain);\n\nvoid\nmono_install_runtime_load  (MonoLoadFunc func);\n\nMonoDomain*\nmono_runtime_load (const char *filename, const char *runtime_version);\n\ntypedef void (*MonoCreateDomainFunc) (MonoDomain *domain);\n\nvoid\nmono_install_create_domain_hook (MonoCreateDomainFunc func);\n\ntypedef void (*MonoFreeDomainFunc) (MonoDomain *domain);\n\nvoid\nmono_install_free_domain_hook (MonoFreeDomainFunc func);\n\nvoid\nmono_runtime_quit_internal (void);\n\nvoid \nmono_cleanup (void);\n\nvoid\nmono_close_exe_image (void);\n\nint\nmono_jit_info_size (MonoJitInfoFlags flags, int num_clauses, int num_holes);\n\nvoid\nmono_jit_info_init (MonoJitInfo *ji, MonoMethod *method, guint8 *code, int code_size,\n\t\t\t\t\tMonoJitInfoFlags flags, int num_clauses, int num_holes);\n\nMonoJitInfoTable *\nmono_jit_info_table_new (MonoDomain *domain);\n\nvoid\nmono_jit_info_table_free (MonoJitInfoTable *table);\n\nvoid\nmono_jit_info_table_add    (MonoDomain *domain, MonoJitInfo *ji);\n\nvoid\nmono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji);\n\nvoid\nmono_jit_info_add_aot_module (MonoImage *image, gpointer start, gpointer end);\n\nMonoGenericJitInfo*\nmono_jit_info_get_generic_jit_info (MonoJitInfo *ji);\n\nMonoGenericSharingContext*\nmono_jit_info_get_generic_sharing_context (MonoJitInfo *ji);\n\nvoid\nmono_jit_info_set_generic_sharing_context (MonoJitInfo *ji, MonoGenericSharingContext *gsctx);\n\nchar *\nmono_make_shadow_copy (const char *filename, MonoError *error);\n\ngboolean\nmono_is_shadow_copy_enabled (MonoDomain *domain, const gchar *dir_name);\n\ngpointer\nmono_domain_alloc  (MonoDomain *domain, guint size);\n\n#define mono_domain_alloc(domain, size) (g_cast (mono_domain_alloc ((domain), (size))))\n\ngpointer\nmono_domain_alloc0 (MonoDomain *domain, guint size);\n\n#define mono_domain_alloc0(domain, size) (g_cast (mono_domain_alloc0 ((domain), (size))))\n\ngpointer\nmono_domain_alloc0_lock_free (MonoDomain *domain, guint size);\n\n#define mono_domain_alloc0_lock_free(domain, size) (g_cast (mono_domain_alloc0_lock_free ((domain), (size))))\n\nMONO_LLVM_INTERNAL void*\nmono_domain_code_reserve (MonoDomain *domain, int size);\n\n#define mono_domain_code_reserve(domain, size) (g_cast (mono_domain_code_reserve ((domain), (size))))\n\nvoid*\nmono_domain_code_reserve_align (MonoDomain *domain, int size, int alignment);\n\n#define mono_domain_code_reserve_align(domain, size, align) (g_cast (mono_domain_code_reserve_align ((domain), (size), (align))))\n\nvoid\nmono_domain_code_commit (MonoDomain *domain, void *data, int size, int newsize);\n\nvoid\nmono_domain_code_foreach (MonoDomain *domain, MonoCodeManagerFunc func, void *user_data);\n\nvoid\nmono_domain_unset (void);\n\nvoid\nmono_domain_set_internal_with_options (MonoDomain *domain, gboolean migrate_exception);\n\ngboolean\nmono_domain_set_config_checked (MonoDomain *domain, const char *base_dir, const char *config_file_name, MonoError *error);\n\nMonoTryBlockHoleTableJitInfo*\nmono_jit_info_get_try_block_hole_table_info (MonoJitInfo *ji);\n\nMonoArchEHJitInfo*\nmono_jit_info_get_arch_eh_info (MonoJitInfo *ji);\n\nMonoThunkJitInfo*\nmono_jit_info_get_thunk_info (MonoJitInfo *ji);\n\nMonoUnwindJitInfo*\nmono_jit_info_get_unwind_info (MonoJitInfo *ji);\n\n/* \n * Installs a new function which is used to return a MonoJitInfo for a method inside\n * an AOT module.\n */\ntypedef MonoJitInfo *(*MonoJitInfoFindInAot)         (MonoDomain *domain, MonoImage *image, gpointer addr);\nvoid          mono_install_jit_info_find_in_aot (MonoJitInfoFindInAot func);\n\nvoid\nmono_jit_code_hash_init (MonoInternalHashTable *jit_code_hash);\n\nMonoAssembly *\nmono_assembly_load_corlib (const MonoRuntimeInfo *runtime, MonoImageOpenStatus *status);\n\nconst MonoRuntimeInfo*\nmono_get_runtime_info (void);\n\nvoid\nmono_runtime_set_no_exec (gboolean val);\n\ngboolean\nmono_runtime_get_no_exec (void);\n\nvoid\nmono_domain_parse_assembly_bindings (MonoDomain *domain, int amajor, int aminor, gchar *domain_config_file_name);\n\ngboolean\nmono_assembly_name_parse (const char *name, MonoAssemblyName *aname);\n\nMonoAssembly *\nmono_domain_assembly_open_internal (MonoDomain *domain, MonoAssemblyLoadContext *alc, const char *name);\n\nMonoImage *mono_assembly_open_from_bundle (MonoAssemblyLoadContext *alc,\n\t\t\t\t\t   const char *filename,\n\t\t\t\t\t   MonoImageOpenStatus *status,\n\t\t\t\t\t   gboolean refonly);\n\nMonoAssembly *\nmono_try_assembly_resolve (MonoAssemblyLoadContext *alc, const char *fname, MonoAssembly *requesting, gboolean refonly, MonoError *error);\n\nMonoAssembly *\nmono_domain_assembly_postload_search (MonoAssemblyLoadContext *alc, MonoAssembly *requesting, MonoAssemblyName *aname, gboolean refonly, gboolean postload, gpointer user_data, MonoError *error);\n\nvoid mono_domain_set_options_from_config (MonoDomain *domain);\n\nint mono_framework_version (void);\n\nvoid mono_reflection_cleanup_domain (MonoDomain *domain);\n\nvoid mono_assembly_cleanup_domain_bindings (guint32 domain_id);\n\nMonoJitInfo* mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean try_aot, gboolean allow_trampolines);\n\nvoid mono_enable_debug_domain_unload (gboolean enable);\n\nvoid\nmono_runtime_init_checked (MonoDomain *domain, MonoThreadStartCB start_cb, MonoThreadAttachCB attach_cb, MonoError *error);\n\nvoid\nmono_context_init_checked (MonoDomain *domain, MonoError *error);\n\ngboolean\nmono_assembly_has_reference_assembly_attribute (MonoAssembly *assembly, MonoError *error);\n\nGPtrArray*\nmono_domain_get_assemblies (MonoDomain *domain, gboolean refonly);\n\nvoid\nmono_runtime_register_appctx_properties (int nprops, const char **keys,  const char **values);\n\nvoid\nmono_runtime_install_appctx_properties (void);\n\ngboolean \nmono_domain_set_fast (MonoDomain *domain, gboolean force);\n\nMonoAssemblyLoadContext *\nmono_domain_default_alc (MonoDomain *domain);\n\n#ifdef ENABLE_NETCORE\nMonoAssemblyLoadContext *\nmono_domain_create_individual_alc (MonoDomain *domain, uint32_t this_gchandle, gboolean collectible, MonoError *error);\n#endif\n\nstatic inline\nMonoAssemblyLoadContext *\nmono_domain_ambient_alc (MonoDomain *domain)\n{\n\t/*\n\t * FIXME: All the callers of mono_domain_ambient_alc should get an ALC\n\t * passed to them from their callers.\n\t */\n\treturn mono_domain_default_alc (domain);\n}\n\n#endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/dynamic-image-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_DYNAMIC_IMAGE_INTERNALS_H__\n#define __MONO_METADATA_DYNAMIC_IMAGE_INTERNALS_H__\n\n#include <mono/metadata/object.h>\n#include <mono/metadata/metadata-internals.h>\n#include <mono/metadata/object-internals.h>\n\ntypedef struct {\n\tguint32 import_lookup_table;\n\tguint32 timestamp;\n\tguint32 forwarder;\n\tguint32 name_rva;\n\tguint32 import_address_table_rva;\n} MonoIDT;\n\ntypedef struct {\n\tguint32 name_rva;\n\tguint32 flags;\n} MonoILT;\n\n\ntypedef enum {\n\tMONO_DYN_IMAGE_TOK_NEW, /* assert if same token is registered already */\n\tMONO_DYN_IMAGE_TOK_SAME_OK, /* allow collision only with the same object */\n\tMONO_DYN_IMAGE_TOK_REPLACE, /* keep the new object, always */\n} MonoDynamicImageTokCollision;\n\nvoid\nmono_dynamic_images_init (void);\n\nvoid\nmono_dynamic_image_register_token (MonoDynamicImage *assembly, guint32 token, MonoObjectHandle obj, int tok_collision);\n\ngboolean\nmono_dynamic_image_is_valid_token (MonoDynamicImage *image, guint32 token);\n\nMonoObjectHandle\nmono_dynamic_image_get_registered_token (MonoDynamicImage *dynimage, guint32 token, MonoError *error);\n\nMonoDynamicImage*\nmono_dynamic_image_create (MonoDynamicAssembly *assembly, char *assembly_name, char *module_name);\n\nguint32\nmono_dynamic_image_add_to_blob_cached (MonoDynamicImage *assembly, gconstpointer b1, int s1, gconstpointer b2, int s2);\n\nvoid\nmono_dynimage_alloc_table (MonoDynamicTable *table, guint nrows);\n\n#endif  /* __MONO_METADATA_DYNAMIC_IMAGE_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/dynamic-stream-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_DYNAMIC_STREAM_INTERNALS_H__\n#define __MONO_METADATA_DYNAMIC_STREAM_INTERNALS_H__\n\n#include <mono/metadata/object.h>\n#include <mono/metadata/metadata-internals.h>\n\nvoid\nmono_dynstream_init (MonoDynamicStream *stream);\n\nguint32\nmono_dynstream_insert_string (MonoDynamicStream *sh, const char *str);\n\nguint32\nmono_dynstream_insert_mstring (MonoDynamicStream *sh, MonoString *str, MonoError *error);\n\nguint32\nmono_dynstream_add_data (MonoDynamicStream *stream, gconstpointer data, guint32 len);\n\nguint32\nmono_dynstream_add_zero (MonoDynamicStream *stream, guint32 len);\n\nvoid\nmono_dynstream_data_align (MonoDynamicStream *stream);\n\n#endif  /* __MONO_METADATA_DYNAMIC_STREAM_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/environment.h",
    "content": "/**\n * \\file\n * System.Environment support internal calls\n *\n * Author:\n *\tDick Porter (dick@ximian.com)\n *\n * (C) 2002 Ximian, Inc\n */\n\n#ifndef _MONO_METADATA_ENVIRONMENT_H_\n#define _MONO_METADATA_ENVIRONMENT_H_\n\n#include <mono/utils/mono-publib.h>\n\nMONO_BEGIN_DECLS\n\nMONO_API int32_t mono_environment_exitcode_get (void);\nMONO_API void mono_environment_exitcode_set (int32_t value);\n\nMONO_END_DECLS\n\n#endif /* _MONO_METADATA_ENVIRONMENT_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/exception-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_EXCEPTION_INTERNALS_H_\n#define _MONO_METADATA_EXCEPTION_INTERNALS_H_\n\n#include <glib.h>\n\n#include <mono/metadata/object.h>\n#include <mono/metadata/handle.h>\n#include <mono/utils/mono-error.h>\n\nMonoExceptionHandle\nmono_get_exception_type_initialization_handle (const gchar *type_name, MonoExceptionHandle inner, MonoError *error);\n\nMonoExceptionHandle\nmono_get_exception_reflection_type_load_checked (MonoArrayHandle types, MonoArrayHandle exceptions, MonoError *error);\n\nMonoExceptionHandle\nmono_get_exception_runtime_wrapped_handle (MonoObjectHandle wrapped_exception, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_from_name_two_strings_checked (MonoImage *image, const char *name_space,\n\t\t\t\t\t      const char *name, MonoStringHandle a1, MonoStringHandle a2,\n\t\t\t\t\t      MonoError *error);\n\nMonoExceptionHandle\nmono_exception_from_token_two_strings_checked (MonoImage *image, uint32_t token,\n\t\t\t\t\t       MonoStringHandle a1, MonoStringHandle a2,\n\t\t\t\t\t       MonoError *error);\n\ntypedef int (*MonoGetSeqPointFunc) (MonoDomain *domain, MonoMethod *method, gint32 native_offset);\n\nvoid\nmono_install_get_seq_point (MonoGetSeqPointFunc func);\n\nvoid\nmono_error_set_method_missing (MonoError *error, MonoClass *klass, const char *method_name, MonoMethodSignature *sig, const char *reason, ...) MONO_ATTR_FORMAT_PRINTF(5,6);\n\nvoid\nmono_error_set_field_missing (MonoError *oerror, MonoClass *klass, const char *field_name, MonoType *sig, const char *reason, ...) MONO_ATTR_FORMAT_PRINTF(5,6);\n\nvoid\nmono_error_set_bad_image (MonoError *error, MonoImage *image, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4);\n\nvoid\nmono_error_set_bad_image_by_name (MonoError *error, const char *image_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4);\n\nvoid\nmono_error_set_file_not_found (MonoError *oerror, const char *file_name, const char *msg_format, ...) MONO_ATTR_FORMAT_PRINTF(3,4);\n\nvoid\nmono_error_set_simple_file_not_found (MonoError *oerror, const char *assembly_name, gboolean refection_only);\n\nMonoExceptionHandle\nmono_corlib_exception_new_with_args (const char *name_space, const char *name, const char *arg_0, const char *arg_1, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_by_name_msg (MonoImage *image, const char *name_space,\n\t\t\t      const char *name, const char *msg, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_argument (const char *arg, const char *msg, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_argument_null (const char *arg, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_argument_out_of_range(const char *arg, const char *msg, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_thread_interrupted (MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_thread_abort (MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_serialization (const char *msg, MonoError *error);\n\nMonoExceptionHandle\nmono_exception_new_invalid_operation (const char *msg, MonoError *error);\n\nMonoExceptionHandle\nmono_error_convert_to_exception_handle (MonoError *error);\n\nMonoExceptionHandle\nmono_get_exception_out_of_memory_handle (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/exception.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_EXCEPTION_H_\n#define _MONO_METADATA_EXCEPTION_H_\n\n#include <mono/metadata/object-forward.h>\n#include <mono/metadata/object.h>\n#include <mono/metadata/image.h>\n\nMONO_BEGIN_DECLS\n\nMONO_API MonoException *\nmono_exception_from_name               (MonoImage *image, \n\t\t\t\t\tconst char* name_space, \n\t\t\t\t\tconst char *name);\n\nMONO_API MonoException *\nmono_exception_from_token              (MonoImage *image, uint32_t token);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_exception_from_name_two_strings (MonoImage *image, const char *name_space,\n\t\t\t\t      const char *name, MonoString *a1, MonoString *a2);\n\nMONO_API MonoException *\nmono_exception_from_name_msg\t       (MonoImage *image, const char *name_space,\n\t\t\t\t\tconst char *name, const char *msg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_exception_from_token_two_strings (MonoImage *image, uint32_t token,\n\t\t\t\t\t\t   MonoString *a1, MonoString *a2);\n\nMONO_API MonoException *\nmono_exception_from_name_domain        (MonoDomain *domain, MonoImage *image, \n\t\t\t\t\tconst char* name_space, \n\t\t\t\t\tconst char *name);\n\nMONO_API MonoException *\nmono_get_exception_divide_by_zero      (void);\n\nMONO_API MonoException *\nmono_get_exception_security            (void);\n\nMONO_API MonoException *\nmono_get_exception_arithmetic          (void);\n\nMONO_API MonoException *\nmono_get_exception_overflow            (void);\n\nMONO_API MonoException *\nmono_get_exception_null_reference      (void);\n\nMONO_API MonoException *\nmono_get_exception_execution_engine    (const char *msg);\n\nMONO_API MonoException *\nmono_get_exception_thread_abort        (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_thread_state        (const char *msg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_thread_interrupted  (void);\n\nMONO_API MonoException *\nmono_get_exception_serialization       (const char *msg);\n\nMONO_API MonoException *\nmono_get_exception_invalid_cast        (void);\n\nMONO_API MonoException *\nmono_get_exception_invalid_operation (const char *msg);\n\nMONO_API MonoException *\nmono_get_exception_index_out_of_range  (void);\n\nMONO_API MonoException *\nmono_get_exception_array_type_mismatch (void);\n\nMONO_API MonoException *\nmono_get_exception_type_load           (MonoString *class_name, char *assembly_name);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_missing_method      (const char *class_name, const char *member_name);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_missing_field       (const char *class_name, const char *member_name);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_not_implemented     (const char *msg);\n\nMONO_API MonoException *\nmono_get_exception_not_supported       (const char *msg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoException*\nmono_get_exception_argument_null       (const char *arg);\n\nMONO_API MonoException *\nmono_get_exception_argument            (const char *arg, const char *msg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_argument_out_of_range (const char *arg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_io                    (const char *msg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_file_not_found        (MonoString *fname);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_file_not_found2       (const char *msg, MonoString *fname);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_type_initialization (const char *type_name, MonoException *inner);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_synchronization_lock (const char *msg);\n\nMONO_API MonoException *\nmono_get_exception_cannot_unload_appdomain (const char *msg);\n\nMONO_API MonoException *\nmono_get_exception_appdomain_unloaded (void);\n\nMONO_API MonoException *\nmono_get_exception_bad_image_format (const char *msg);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_bad_image_format2 (const char *msg, MonoString *fname);\n\nMONO_API MonoException *\nmono_get_exception_stack_overflow (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_out_of_memory (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_field_access (void);\n\nMONO_API MonoException *\nmono_get_exception_method_access (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_reflection_type_load (MonoArray *types, MonoArray *exceptions);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoException *\nmono_get_exception_runtime_wrapped (MonoObject *wrapped_exception);\n\n/* Installs a function which is called when the runtime encounters an unhandled exception.\n * This hook isn't expected to return.\n * If no hook has been installed, the runtime will print a message before aborting.\n */\ntypedef void  (*MonoUnhandledExceptionFunc)         (MonoObject *exc, void *user_data);\nMONO_API void mono_install_unhandled_exception_hook (MonoUnhandledExceptionFunc func, void *user_data);\nvoid          mono_invoke_unhandled_exception_hook  (MonoObject *exc);\n\nMONO_END_DECLS\n\n#endif /* _MONO_METADATA_EXCEPTION_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/external-only.h",
    "content": "/**\n * \\file\n *   Shorthand and markers for functions only used by embedders.\n * MONO_ENTER_GC_UNSAFE is also a good indication of external_only.\n *\n * Author:\n *   Jay Krell (jaykrell@microsoft.com)\n *\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef MONO_EXTERNAL_ONLY\n\n#define MONO_EXTERNAL_ONLY_GC_UNSAFE(t, expr) \\\n\tt result; \t\t\\\n\tMONO_ENTER_GC_UNSAFE; \t\\\n\tresult = expr;\t\t\\\n\tMONO_EXIT_GC_UNSAFE;\t\\\n\treturn result;\n\n#define MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID(expr) \\\n\tMONO_ENTER_GC_UNSAFE; \t\\\n\texpr;\t\t\t\\\n\tMONO_EXIT_GC_UNSAFE;\t\\\n\n#define MONO_EXTERNAL_ONLY(t, expr) return expr;\n#define MONO_EXTERNAL_ONLY_VOID(expr) expr;\n\n#endif /* MONO_EXTERNAL_ONLY */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/fdhandle.h",
    "content": "\n#ifndef __MONO_METADATA_FDHANDLE_H__\n#define __MONO_METADATA_FDHANDLE_H__\n\n#include <config.h>\n#include <glib.h>\n\n#include \"utils/refcount.h\"\n\ntypedef enum {\n\tMONO_FDTYPE_FILE,\n\tMONO_FDTYPE_CONSOLE,\n\tMONO_FDTYPE_PIPE,\n\tMONO_FDTYPE_SOCKET,\n\tMONO_FDTYPE_COUNT\n} MonoFDType;\n\ntypedef struct {\n\tMonoRefCount ref;\n\tMonoFDType type;\n\tgint fd;\n} MonoFDHandle;\n\ntypedef struct {\n\tvoid (*close) (MonoFDHandle *fdhandle);\n\tvoid (*destroy) (MonoFDHandle *fdhandle);\n} MonoFDHandleCallback;\n\nvoid\nmono_fdhandle_register (MonoFDType type, MonoFDHandleCallback *callback);\n\nvoid\nmono_fdhandle_init (MonoFDHandle *fdhandle, MonoFDType type, gint fd);\n\nvoid\nmono_fdhandle_insert (MonoFDHandle *fdhandle);\n\ngboolean\nmono_fdhandle_try_insert (MonoFDHandle *fdhandle);\n\ngboolean\nmono_fdhandle_lookup_and_ref (gint fd, MonoFDHandle **fdhandle);\n\nvoid\nmono_fdhandle_unref (MonoFDHandle *fdhandle);\n\ngboolean\nmono_fdhandle_close (gint fd);\n\n#endif /* __MONO_METADATA_FDHANDLE_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/file-mmap.h",
    "content": "/**\n * \\file\n * Managed mmap wrappers.\n *\n * Authors:\n *\tRodrigo Kumpera\n *\n * Copyright 2014 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_METADATA_FILE_MMAP_H_\n#define _MONO_METADATA_FILE_MMAP_H_\n\n#include <config.h>\n#include <glib.h>\n\n#include <mono/metadata/object-internals.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/metadata/icalls.h>\n\nICALL_EXPORT\nvoid\nmono_mmap_close (void *mmap_handle, MonoError *error);\n\n// inheritability is an enum with the values 0 and 1.\nICALL_EXPORT\nvoid\nmono_mmap_configure_inheritability (void *mmap_handle, gint32 inheritability, MonoError *error);\n\nICALL_EXPORT\nvoid\nmono_mmap_flush (void *mmap_handle, MonoError *error);\n\nICALL_EXPORT\nvoid*\nmono_mmap_open_file (const gunichar2 *path, gint path_length, int mode, const gunichar2 *mapName, gint mapName_length, gint64 *capacity, int access, int options, int *win32error, MonoError *error);\n\nICALL_EXPORT\nvoid*\nmono_mmap_open_handle (void *handle, const gunichar2 *mapName, gint mapName_length, gint64 *capacity, int access, int options, int *win32error, MonoError *error);\n\nICALL_EXPORT\nint\nmono_mmap_map (void *handle, gint64 offset, gint64 *size, int access, void **mmap_handle, void **base_address, MonoError *error);\n\nICALL_EXPORT\nMonoBoolean\nmono_mmap_unmap (void *base_address, MonoError *error);\n\n#endif /* _MONO_METADATA_FILE_MMAP_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/filewatcher.h",
    "content": "/**\n * \\file\n * File System Watcher internal calls\n *\n * Authors:\n *\tGonzalo Paniagua Javier (gonzalo@ximian.com)\n *\n * (C) 2004 Novell, Inc. (http://www.novell.com)\n */\n\n#ifndef _MONO_METADATA_FILEWATCHER_H\n#define _MONO_METADATA_FILEWATCHER_H\n\n#include <mono/metadata/object.h>\n#include \"mono/utils/mono-compiler.h\"\n#include <glib.h>\n#include <mono/metadata/icalls.h>\n\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#endif\n\n#if !ENABLE_NETCORE\n\nICALL_EXPORT\ngint ves_icall_System_IO_FSW_SupportsFSW (void);\n\nICALL_EXPORT\nint ves_icall_System_IO_KqueueMonitor_kevent_notimeout (int *kq, gpointer changelist, int nchanges, gpointer eventlist, int nevents);\n\n#endif\n\n#ifdef HOST_IOS // This will obsoleted by System.Native as soon as it's ported to iOS\nMONO_API char* SystemNative_RealPath(const char* path);\nMONO_API void SystemNative_Sync (void);\n#endif\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/gc-internals.h",
    "content": "/**\n * \\file\n * Internal GC interface\n *\n * Author: Paolo Molaro <lupus@ximian.com>\n *\n * (C) 2002 Ximian, Inc.\n * Copyright 2012 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_METADATA_GC_INTERNAL_H__\n#define __MONO_METADATA_GC_INTERNAL_H__\n\n#include <glib.h>\n#include <mono/utils/gc_wrapper.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/threads-types.h>\n#include <mono/sgen/gc-internal-agnostic.h>\n#include <mono/metadata/icalls.h>\n\n#define mono_domain_finalizers_lock(domain) mono_os_mutex_lock (&(domain)->finalizable_objects_hash_lock);\n#define mono_domain_finalizers_unlock(domain) mono_os_mutex_unlock (&(domain)->finalizable_objects_hash_lock);\n\n/* Register a memory area as a conservatively scanned GC root */\n#define MONO_GC_REGISTER_ROOT_PINNING(x,src,key,msg) mono_gc_register_root ((char*)&(x), sizeof(x), MONO_GC_DESCRIPTOR_NULL, (src), (key), (msg))\n\n#define MONO_GC_UNREGISTER_ROOT(x) mono_gc_deregister_root ((char*)&(x))\n\n/*\n * Return a GC descriptor for an array containing N pointers to memory allocated\n * by mono_gc_alloc_fixed ().\n */\n/* For SGEN, the result of alloc_fixed () is not GC tracked memory */\n#define MONO_GC_ROOT_DESCR_FOR_FIXED(n) (mono_gc_is_moving () ? mono_gc_make_root_descr_all_refs (0) : MONO_GC_DESCRIPTOR_NULL)\n\n/* Register a memory location holding a single object reference as a GC root */\n#define MONO_GC_REGISTER_ROOT_SINGLE(x,src,key,msg) do { \\\n\tg_assert (sizeof (x) == sizeof (MonoObject*)); \\\n\tmono_gc_register_root ((char*)&(x), sizeof(MonoObject*), mono_gc_make_root_descr_all_refs (1), (src), (key),(msg)); \\\n\t} while (0)\n\n/*\n * This is used for fields which point to objects which are kept alive by other references\n * when using Boehm.\n */\n#define MONO_GC_REGISTER_ROOT_IF_MOVING(x,src,key,msg) do { \\\n\tif (mono_gc_is_moving ()) \\\n\t\tMONO_GC_REGISTER_ROOT_SINGLE(x,src,key,msg);\t\t\\\n} while (0)\n\n#define MONO_GC_UNREGISTER_ROOT_IF_MOVING(x) do { \\\n\tif (mono_gc_is_moving ()) \\\n\t\tMONO_GC_UNREGISTER_ROOT (x);\t\t\t\\\n} while (0)\n\n/* useful until we keep track of gc-references in corlib etc. */\n#define IS_GC_REFERENCE(class,t) (mono_gc_is_moving () ? FALSE : ((t)->type == MONO_TYPE_U && (class)->image == mono_defaults.corlib))\n\nvoid   mono_object_register_finalizer               (MonoObject  *obj);\n\nvoid\nmono_object_register_finalizer_handle (MonoObjectHandle obj);\n\nextern void mono_gc_init (void);\nextern void mono_gc_base_init (void);\nextern void mono_gc_cleanup (void);\nextern void mono_gc_base_cleanup (void);\nextern void mono_gc_init_icalls (void);\n\n/*\n * Return whenever the current thread is registered with the GC (i.e. started\n * by the GC pthread wrappers on unix.\n */\nextern gboolean mono_gc_is_gc_thread (void);\n\nextern gboolean mono_gc_is_finalizer_internal_thread (MonoInternalThread *thread);\n\nextern void mono_gc_set_stack_end (void *stack_end);\n\n/* only valid after the RECLAIM_START GC event and before RECLAIM_END\n * Not exported in public headers, but can be linked to (unsupported).\n */\ngboolean mono_object_is_alive (MonoObject* obj);\ngboolean mono_gc_is_finalizer_thread (MonoThread *thread);\n\nvoid mono_gchandle_set_target (guint32 gchandle, MonoObject *obj);\n\n/*Ephemeron functionality. Sgen only*/\ngboolean    mono_gc_ephemeron_array_add (MonoObject *obj);\n\n/* User defined marking function */\n/* It should work like this:\n * foreach (ref in GC references in the are structure pointed to by ADDR)\n *    mark_func (ref)\n */\ntypedef void (*MonoGCMarkFunc)     (MonoObject **addr, void *gc_data);\ntypedef void (*MonoGCRootMarkFunc) (void *addr, MonoGCMarkFunc mark_func, void *gc_data);\n\n/* Create a descriptor with a user defined marking function */\nMonoGCDescriptor mono_gc_make_root_descr_user (MonoGCRootMarkFunc marker);\n\n/* Return whenever user defined marking functions are supported */\ngboolean mono_gc_user_markers_supported (void);\n\n/* desc is the result from mono_gc_make_descr*. A NULL value means\n * all the words might contain GC pointers.\n * The memory is non-moving and it will be explicitly deallocated.\n * size bytes will be available from the returned address (ie, descr\n * must not be stored in the returned memory)\n */\nMonoObject* mono_gc_alloc_fixed      (size_t size, MonoGCDescriptor descr, MonoGCRootSource source, void *key, const char *msg);\n\n// C++ callers outside of metadata (mini/tasklets.c) must use mono_gc_alloc_fixed_no_descriptor\n// instead of mono_gc_alloc_fixed, or else compile twice -- boehm and sgen.\nMonoObject*\nmono_gc_alloc_fixed_no_descriptor (size_t size, MonoGCRootSource source, void *key, const char *msg);\n\nvoid  mono_gc_free_fixed             (void* addr);\n\n/* make sure the gchandle was allocated for an object in domain */\ngboolean mono_gchandle_is_in_domain (guint32 gchandle, MonoDomain *domain);\nvoid     mono_gchandle_free_domain  (MonoDomain *domain);\n\ntypedef void (*FinalizerThreadCallback) (gpointer user_data);\n\nMonoObject*\nmono_gc_alloc_pinned_obj (MonoVTable *vtable, size_t size);\n\nMonoObjectHandle\nmono_gc_alloc_handle_pinned_obj (MonoVTable *vtable, gsize size);\n\nMonoObject*\nmono_gc_alloc_obj (MonoVTable *vtable, size_t size);\n\nMonoObjectHandle\nmono_gc_alloc_handle_obj (MonoVTable *vtable, gsize size);\n\nMonoArray*\nmono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length);\n\nMonoArrayHandle\nmono_gc_alloc_handle_vector (MonoVTable *vtable, gsize size, gsize max_length);\n\nMonoArray*\nmono_gc_alloc_array (MonoVTable *vtable, size_t size, uintptr_t max_length, uintptr_t bounds_size);\n\nMonoArrayHandle\nmono_gc_alloc_handle_array (MonoVTable *vtable, gsize size, gsize max_length, gsize bounds_size);\n\nMonoString*\nmono_gc_alloc_string (MonoVTable *vtable, size_t size, gint32 len);\n\nMonoStringHandle\nmono_gc_alloc_handle_string (MonoVTable *vtable, gsize size, gint32 len);\n\nMonoObject*\nmono_gc_alloc_mature (MonoVTable *vtable, size_t size);\n\nMonoGCDescriptor mono_gc_make_descr_for_string (gsize *bitmap, int numbits);\n\nMonoObjectHandle\nmono_gc_alloc_handle_mature (MonoVTable *vtable, gsize size);\n\nvoid mono_gc_register_obj_with_weak_fields (void *obj);\nvoid\nmono_gc_register_object_with_weak_fields (MonoObjectHandle obj);\n\ntypedef void (*MonoFinalizationProc)(gpointer, gpointer); // same as SGenFinalizationProc, GC_finalization_proc\n\nvoid  mono_gc_register_for_finalization (MonoObject *obj, MonoFinalizationProc user_data);\nvoid  mono_gc_add_memory_pressure (gint64 value);\nMONO_API int   mono_gc_register_root (char *start, size_t size, MonoGCDescriptor descr, MonoGCRootSource source, void *key, const char *msg);\nvoid  mono_gc_deregister_root (char* addr);\nvoid  mono_gc_finalize_domain (MonoDomain *domain);\nvoid  mono_gc_run_finalize (void *obj, void *data);\nvoid  mono_gc_clear_domain (MonoDomain * domain);\n/* Signal early termination of finalizer processing inside the gc */\nvoid  mono_gc_suspend_finalizers (void);\n\n\n/* \n * Register a root which can only be written using a write barrier.\n * Writes to the root must be done using a write barrier (MONO_ROOT_SETREF).\n * If the root uses an user defined mark routine, the writes are not required to be\n * to the area between START and START+SIZE.\n * The write barrier allows the GC to avoid scanning this root at each collection, so it\n * is more efficient.\n * FIXME: Add an API for clearing remset entries if a root with a user defined\n * mark routine is deleted.\n */\nint mono_gc_register_root_wbarrier (char *start, size_t size, MonoGCDescriptor descr, MonoGCRootSource source, void *key, const char *msg);\n\nvoid mono_gc_wbarrier_set_root (gpointer ptr, MonoObject *value);\n\n/* Set a field of a root registered using mono_gc_register_root_wbarrier () */\n#define MONO_ROOT_SETREF(s,fieldname,value) do {\t\\\n\tmono_gc_wbarrier_set_root (&((s)->fieldname), (MonoObject*)value); \\\n} while (0)\n\n/* fast allocation support */\n\ntypedef enum {\n\t// Regular fast path allocator.\n\tMANAGED_ALLOCATOR_REGULAR,\n\t// Managed allocator that just calls into the runtime.\n\tMANAGED_ALLOCATOR_SLOW_PATH,\n\t// Managed allocator that works like the regular one but also calls into the profiler.\n\tMANAGED_ALLOCATOR_PROFILER,\n} ManagedAllocatorVariant;\n\nint mono_gc_get_aligned_size_for_allocator (int size);\nMonoMethod* mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size);\nMonoMethod* mono_gc_get_managed_array_allocator (MonoClass *klass);\nMonoMethod *mono_gc_get_managed_allocator_by_type (int atype, ManagedAllocatorVariant variant);\n\nguint32 mono_gc_get_managed_allocator_types (void);\n\n/* Return a short string identifying the GC, indented to be saved in AOT images */\nconst char *mono_gc_get_gc_name (void);\n\n/* Fast write barriers */\nMonoMethod* mono_gc_get_specific_write_barrier (gboolean is_concurrent);\nMonoMethod* mono_gc_get_write_barrier (void);\n\n/* Fast valuetype copy */\n/* WARNING: [dest, dest + size] must be within the bounds of a single type, otherwise the GC will lose remset entries */\nG_EXTERN_C void mono_gc_wbarrier_range_copy (gpointer dest, gconstpointer src, int size);\n\ntypedef void (*MonoRangeCopyFunction)(gpointer, gconstpointer, int size);\n\nMonoRangeCopyFunction\nmono_gc_get_range_copy_func (void);\n\n/* \n * Functions supplied by the runtime and called by the GC. Currently only used\n * by SGEN.\n */\ntypedef struct {\n\t/* \n\t * Function called during thread startup/attach to allocate thread-local data \n\t * needed by the other functions.\n\t */\n\tgpointer (*thread_attach_func) (void);\n\t/* \n\t * Function called during thread deatch to free the data allocated by\n\t * thread_attach_func.\n\t */\n\tvoid (*thread_detach_func) (gpointer user_data);\n\t/* \n\t * Function called from every thread when suspending for GC. It can save\n\t * data needed for marking from thread stacks. user_data is the data returned \n\t * by attach_func. This might called with GC locks held and the word stopped,\n\t * so it shouldn't do any synchronization etc.\n\t */\n\tvoid (*thread_suspend_func) (gpointer user_data, void *sigcontext, MonoContext *ctx);\n\t/* \n\t * Function called to mark from thread stacks. user_data is the data returned \n\t * by attach_func. This is called twice, with the word stopped:\n\t * - in the first pass, it should mark areas of the stack using\n\t *   conservative marking by calling mono_gc_conservatively_scan_area ().\n\t * - in the second pass, it should mark the remaining areas of the stack\n\t *   using precise marking by calling mono_gc_scan_object ().\n\t */\n\tvoid (*thread_mark_func) (gpointer user_data, guint8 *stack_start, guint8 *stack_end, gboolean precise, void *gc_data);\n\t/*\n\t * Function called for debugging to get the current managed method for\n\t * tracking the provenances of objects.\n\t */\n\tgpointer (*get_provenance_func) (void);\n\t/*\n\t * Same as thread_mark_func, mark the intepreter frames.\n\t */\n\tvoid (*interp_mark_func) (gpointer thread_info, GcScanFunc func, gpointer gc_data, gboolean precise);\n} MonoGCCallbacks;\n\n/* Set the callback functions callable by the GC */\nvoid mono_gc_set_gc_callbacks (MonoGCCallbacks *callbacks);\nMonoGCCallbacks *mono_gc_get_gc_callbacks (void);\n\n/* Functions callable from the thread mark func */\n\n/* Scan the memory area between START and END conservatively */\nvoid mono_gc_conservatively_scan_area (void *start, void *end);\n\n/* Scan OBJ, returning its new address */\nvoid *mono_gc_scan_object (void *obj, void *gc_data);\n\n/* Return the suspend signal number used by the GC to suspend threads,\n   or -1 if not applicable. */\nint mono_gc_get_suspend_signal (void);\n\n/* Return the suspend signal number used by the GC to suspend threads,\n   or -1 if not applicable. */\nint mono_gc_get_restart_signal (void);\n\n/*\n * Return a human readable description of the GC in malloc-ed memory.\n */\nchar* mono_gc_get_description (void);\n\n/*\n * Configure the GC to desktop mode\n */\nvoid mono_gc_set_desktop_mode (void);\n\n/*\n * Return whenever this GC can move objects\n */\ngboolean mono_gc_is_moving (void);\n\ntypedef void* (*MonoGCLockedCallbackFunc) (void *data);\n\nvoid* mono_gc_invoke_with_gc_lock (MonoGCLockedCallbackFunc func, void *data);\n\nint mono_gc_get_los_limit (void);\n\nguint64 mono_gc_get_allocated_bytes_for_current_thread (void);\n\nguint64 mono_gc_get_total_allocated_bytes (MonoBoolean precise);\n\nvoid mono_gc_get_gcmemoryinfo (gint64* fragmented_bytes,\n\t\t\t\t\t\t       gint64* heap_size_bytes,\n\t\t\t\t\t\t       gint64* high_memory_load_threshold_bytes,\n\t\t\t\t\t\t       gint64* memory_load_bytes,\n \t\t\t\t\t\t       gint64* total_available_memory_bytes);\n\nguint8* mono_gc_get_card_table (int *shift_bits, gpointer *card_mask);\nguint8* mono_gc_get_target_card_table (int *shift_bits, target_mgreg_t *card_mask);\ngboolean mono_gc_card_table_nursery_check (void);\n\nvoid* mono_gc_get_nursery (int *shift_bits, size_t *size);\n\n// Don't use directly; set/unset MONO_THREAD_INFO_FLAGS_NO_GC instead.\nvoid mono_gc_skip_thread_changing (gboolean skip);\nvoid mono_gc_skip_thread_changed (gboolean skip);\n\n#ifndef HOST_WIN32\nint mono_gc_pthread_create (pthread_t *new_thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);\n#endif\n\n/*\n * Return whenever GC is disabled\n */\ngboolean mono_gc_is_disabled (void);\n\n/*\n * Return whenever this is the null GC\n */\ngboolean mono_gc_is_null (void);\n\nvoid mono_gc_set_string_length (MonoString *str, gint32 new_length);\n\n#if defined(__MACH__)\nvoid mono_gc_register_mach_exception_thread (pthread_t thread);\npthread_t mono_gc_get_mach_exception_thread (void);\n#endif\n\ngboolean mono_gc_precise_stack_mark_enabled (void);\n\ntypedef struct _RefQueueEntry RefQueueEntry;\n\nstruct _RefQueueEntry {\n\tvoid *dis_link;\n\tguint32 gchandle;\n\tMonoDomain *domain;\n\tvoid *user_data;\n\tRefQueueEntry *next;\n};\n\nstruct _MonoReferenceQueue {\n\tRefQueueEntry *queue;\n\tmono_reference_queue_callback callback;\n\tMonoReferenceQueue *next;\n\tgboolean should_be_deleted;\n};\n\nenum {\n\tMONO_GC_FINALIZER_EXTENSION_VERSION = 1,\n};\n\ntypedef struct {\n\tint version;\n\tgboolean (*is_class_finalization_aware) (MonoClass *klass);\n\tvoid (*object_queued_for_finalization) (MonoObject *object);\n} MonoGCFinalizerCallbacks;\n\nMONO_API void mono_gc_register_finalizer_callbacks (MonoGCFinalizerCallbacks *callbacks);\n\n\n#ifdef HOST_WIN32\nBOOL APIENTRY mono_gc_dllmain (HMODULE module_handle, DWORD reason, LPVOID reserved);\n#endif\n\nMonoVTable *mono_gc_get_vtable (MonoObject *obj);\n\nguint mono_gc_get_vtable_bits (MonoClass *klass);\n\nvoid mono_gc_register_altstack (gpointer stack, gint32 stack_size, gpointer altstack, gint32 altstack_size);\n\ngboolean mono_gc_is_critical_method (MonoMethod *method);\n\nG_EXTERN_C // due to THREAD_INFO_TYPE varying\ngpointer mono_gc_thread_attach (THREAD_INFO_TYPE *info);\n\nG_EXTERN_C // due to THREAD_INFO_TYPE varying\nvoid mono_gc_thread_detach (THREAD_INFO_TYPE *info);\n\nG_EXTERN_C // due to THREAD_INFO_TYPE varying\nvoid mono_gc_thread_detach_with_lock (THREAD_INFO_TYPE *info);\n\nG_EXTERN_C // due to THREAD_INFO_TYPE varying\ngboolean mono_gc_thread_in_critical_region (THREAD_INFO_TYPE *info);\n\n/* If set, print debugging messages around finalizers. */\nextern gboolean mono_log_finalizers;\n\n/* If set, do not run finalizers. */\nextern gboolean mono_do_not_finalize;\n/* List of names of classes not to finalize. */\nextern gchar **mono_do_not_finalize_class_names;\n\n#endif /* __MONO_METADATA_GC_INTERNAL_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/handle-decl.h",
    "content": "/**\n * \\file\n * Handle to object in native code\n *\n * Authors:\n *  - Ludovic Henry <ludovic@xamarin.com>\n *  - Aleksey Klieger <aleksey.klieger@xamarin.com>\n *  - Rodrigo Kumpera <kumpera@xamarin.com>\n *\n * Copyright 2016 Dot net foundation.\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_HANDLE_DECL_H__\n#define __MONO_HANDLE_DECL_H__\n\n#include <config.h>\n#include <glib.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/utils/mono-compiler.h>\n\n// Type-safe handles are a struct with a pointer to pointer.\n// The only operations allowed on them are the functions/macros in this file, and assignment\n// from same handle type to same handle type.\n//\n// Raw handles are void* but still same underlying representation, really void**.\n//\n// marshal-ilgen.c does not know how to marshal type safe handles.\n// It passes/accepts raw handles and generated wrappers in C convert.\n\n/*\nHandle macros/functions\n*/\n\n#define TYPED_HANDLE_NAME(TYPE) TYPE ## Handle\n#define TYPED_OUT_HANDLE_NAME(TYPE) TYPE ## HandleOut\n#define TYPED_IN_OUT_HANDLE_NAME(TYPE) TYPE ## HandleInOut\n\n// internal helpers:\n#define MONO_HANDLE_CAST_FOR(type) mono_handle_cast_##type\n#define MONO_HANDLE_TYPECHECK_FOR(type) mono_handle_typecheck_##type\n\n/*\n * TYPED_HANDLE_DECL(SomeType):\n *   Expands to a decl for handles to SomeType.\n *\n * For example, TYPED_HANDLE_DECL(MonoObject) (see below) expands to:\n *\n * typedef struct {\n *   MonoObject **__raw;\n * } MonoObjectHandle,\n *   MonoObjectHandleOut,\n *   MonoObjectHandleInOut;\n *\n * Out is intended for out parameters, InOut is intended for ref parameters.\n * This is not enforced.\n * Internal helper functions are also generated.\n */\n#ifdef __cplusplus\n#define MONO_IF_CPLUSPLUS(x) x\n#else\n#define MONO_IF_CPLUSPLUS(x) /* nothing */\n#endif\n\n#define TYPED_HANDLE_DECL(TYPE)\t\t\t\t\t\t\t\\\n\ttypedef struct {\t\t\t\t\t\t\t\\\n\t\tMONO_IF_CPLUSPLUS (\t\t\t\t\t\t\\\n\t\t\tMONO_ALWAYS_INLINE\t\t\t\t\t\\\n\t\t\tTYPE * GetRaw () const { return __raw ? *__raw : NULL; } \\\n\t\t\tTYPE * volatile * Ref () { g_assert (__raw); return __raw; } \\\n\t\t)\t\t\t\t\t\t\t\t\\\n\t\tTYPE * volatile *__raw;\t\t\t\t\t\t\\\n\t} TYPED_HANDLE_NAME (TYPE),\t\t\t\t\t\t\\\n\t  TYPED_OUT_HANDLE_NAME (TYPE),\t\t\t\t\t\t\\\n\t  TYPED_IN_OUT_HANDLE_NAME (TYPE);\t\t\t\t\t\\\n/* Do not call these functions directly. Use MONO_HANDLE_NEW and MONO_HANDLE_CAST. */ \\\n/* Another way to do this involved casting mono_handle_new function to a different type. */ \\\nstatic inline MONO_ALWAYS_INLINE TYPED_HANDLE_NAME (TYPE) \t\\\nMONO_HANDLE_CAST_FOR (TYPE) (MonoRawHandle a)\t\t\t\\\n{\t\t\t\t\t\t\t\t\\\n\tTYPED_HANDLE_NAME (TYPE) b = { (TYPE**)a };\t\t\\\n\treturn b;\t\t\t\t\t\t\\\n}\t\t\t\t\t\t\t\t\\\nstatic inline MONO_ALWAYS_INLINE MonoObject* \t\t\t\\\nMONO_HANDLE_TYPECHECK_FOR (TYPE) (TYPE *a)\t\t\t\\\n{\t\t\t\t\t\t\t\t\\\n\treturn (MonoObject*)a;\t\t\t\t\t\\\n}\t\t\t\t\t\t\t\t\\\n/* Out/InOut synonyms for icall-def.h HANDLES () */\t\t\\\nstatic inline MONO_ALWAYS_INLINE TYPED_HANDLE_NAME (TYPE) \t\\\nMONO_HANDLE_CAST_FOR (TYPE##Out) (gpointer a)\t\t\t\\\n{\t\t\t\t\t\t\t\t\\\n\treturn MONO_HANDLE_CAST_FOR (TYPE) (a);\t\t\t\\\n}\t\t\t\t\t\t\t\t\\\nstatic inline MONO_ALWAYS_INLINE MonoObject* \t\t\t\\\nMONO_HANDLE_TYPECHECK_FOR (TYPE##Out) (TYPE *a)\t\t\t\\\n{\t\t\t\t\t\t\t\t\\\n\treturn MONO_HANDLE_TYPECHECK_FOR (TYPE) (a);\t\t\\\n}\t\t\t\t\t\t\t\t\\\nstatic inline MONO_ALWAYS_INLINE TYPED_HANDLE_NAME (TYPE) \t\\\nMONO_HANDLE_CAST_FOR (TYPE##InOut) (gpointer a)\t\t\t\\\n{\t\t\t\t\t\t\t\t\\\n\treturn MONO_HANDLE_CAST_FOR (TYPE) (a);\t\t\t\\\n}\t\t\t\t\t\t\t\t\\\nstatic inline MONO_ALWAYS_INLINE MonoObject* \t\t\t\\\nMONO_HANDLE_TYPECHECK_FOR (TYPE##InOut) (TYPE *a)\t\t\\\n{\t\t\t\t\t\t\t\t\\\n\treturn MONO_HANDLE_TYPECHECK_FOR (TYPE) (a);\t\t\\\n}\n\n#endif /* __MONO_HANDLE_DECL_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/handle.h",
    "content": "/**\n * \\file\n * Handle to object in native code\n *\n * Authors:\n *  - Ludovic Henry <ludovic@xamarin.com>\n *  - Aleksey Klieger <aleksey.klieger@xamarin.com>\n *  - Rodrigo Kumpera <kumpera@xamarin.com>\n *\n * Copyright 2016 Dot net foundation.\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_HANDLE_H__\n#define __MONO_HANDLE_H__\n\n#include <config.h>\n#include <glib.h>\n\n#include <mono/metadata/handle-decl.h>\n#include <mono/metadata/object.h>\n#include <mono/metadata/class.h>\n#include <mono/utils/mono-error-internals.h>\n#include <mono/utils/mono-threads.h>\n#include <mono/utils/checked-build.h>\n#include <mono/metadata/class-internals.h>\n\n/*\nHandle stack.\n\nThe handle stack is designed so it's efficient to pop a large amount of entries at once.\nThe stack is made out of a series of fixed size segments.\n\nTo do bulk operations you use a stack mark.\n\t\n*/\n\n/*\n3 is the number of fields besides the data in the struct;\n128 words makes each chunk 512 or 1024 bytes each\n*/\n#define OBJECTS_PER_HANDLES_CHUNK (128 - 3)\n\n/*\nWhether this config needs stack watermark recording to know where to start scanning from.\n*/\n#ifdef HOST_WATCHOS\n#define MONO_NEEDS_STACK_WATERMARK 1\n#endif\n\ntypedef struct _HandleChunk HandleChunk;\n\n/*\n * Define MONO_HANDLE_TRACK_OWNER to store the file and line number of each call to MONO_HANDLE_NEW\n * in the handle stack.  (This doubles the amount of memory used for handles, so it's only useful for debugging).\n */\n/*#define MONO_HANDLE_TRACK_OWNER*/\n\n/*\n * Define MONO_HANDLE_TRACK_SP to record the C stack pointer at the time of each HANDLE_FUNCTION_ENTER and\n * to ensure that when a new handle is allocated the previous newest handle is not lower in the stack.\n * This is useful to catch missing HANDLE_FUNCTION_ENTER / HANDLE_FUNCTION_RETURN pairs which could cause\n * handle leaks.\n */\n/*#define MONO_HANDLE_TRACK_SP*/\n\ntypedef struct {\n\tgpointer o; /* MonoObject ptr */\n#ifdef MONO_HANDLE_TRACK_OWNER\n\tconst char *owner;\n\tgpointer backtrace_ips[7]; /* result of backtrace () at time of allocation */\n#endif\n#ifdef MONO_HANDLE_TRACK_SP\n\tgpointer alloc_sp; /* sp from HandleStack:stackmark_sp at time of allocation */\n#endif\n} HandleChunkElem;\n\nstruct _HandleChunk {\n\tint size; //number of handles\n\tHandleChunk *prev, *next;\n\tHandleChunkElem elems [OBJECTS_PER_HANDLES_CHUNK];\n};\n\ntypedef struct MonoHandleStack {\n\tHandleChunk *top; //alloc from here\n\tHandleChunk *bottom; //scan from here\n#ifdef MONO_HANDLE_TRACK_SP\n\tgpointer stackmark_sp; // C stack pointer top when from most recent mono_stack_mark_init\n#endif\n} HandleStack;\n\n// Keep this in sync with RuntimeStructs.cs\ntypedef struct {\n\tint size;\n\tHandleChunk *chunk;\n#ifdef MONO_HANDLE_TRACK_SP\n\tgpointer prev_sp; // C stack pointer from prior mono_stack_mark_init\n#endif\n} HandleStackMark;\n\n// There are two types of handles.\n//  Pointers to volatile pointers in managed frames.\n//    These are allocated by icall wrappers in marshal-ilgen.c.\n//  Pointers to non-volatile pointers in TLS.\n//    These are allocated by MONO_HANDLE_NEW.\ntypedef void volatile * MonoRawHandle;\n\ntypedef void (*GcScanFunc) (gpointer*, gpointer);\n\n\n/* If Centrinel is analyzing Mono, use the SUPPRESS macros to mark the bodies\n * of the handle macros as allowed to perform operations on raw pointers to\n * managed objects.  Take care to UNSUPPRESS the _arguments_ to the macros - we\n * want warnings if the argument uses pointers unsafely.\n */\n#ifdef __CENTRINEL__\n#define MONO_HANDLE_SUPPRESS_SCOPE(b) __CENTRINEL_SUPPRESS_SCOPE(b)\n#define MONO_HANDLE_SUPPRESS(expr) __CENTRINEL_SUPPRESS(expr)\n#define MONO_HANDLE_UNSUPPRESS(expr) __CENTRINEL_UNSUPPRESS(expr)\n#else\n#define MONO_HANDLE_SUPPRESS_SCOPE(b) ;\n#define MONO_HANDLE_SUPPRESS(expr) (expr)\n#define MONO_HANDLE_UNSUPPRESS(expr) (expr)\n#endif\n\n#ifndef MONO_HANDLE_TRACK_OWNER\nMonoRawHandle mono_handle_new (MonoObject *object, MonoThreadInfo *info);\n#else\nMonoRawHandle mono_handle_new (MonoObject *object, MonoThreadInfo *info, const char* owner);\n#endif\n\nvoid mono_handle_stack_scan (HandleStack *stack, GcScanFunc func, gpointer gc_data, gboolean precise, gboolean check);\ngboolean mono_handle_stack_is_empty (HandleStack *stack);\nHandleStack* mono_handle_stack_alloc (void);\nvoid mono_handle_stack_free (HandleStack *handlestack);\nMonoRawHandle mono_stack_mark_pop_value (MonoThreadInfo *info, HandleStackMark *stackmark, MonoRawHandle value);\nMonoThreadInfo* mono_stack_mark_record_size (MonoThreadInfo *info, HandleStackMark *stackmark, const char *func_name);\nvoid mono_handle_stack_free_domain (HandleStack *stack, MonoDomain *domain);\n\n#ifdef MONO_HANDLE_TRACK_SP\nvoid mono_handle_chunk_leak_check (HandleStack *handles);\n#endif\n\nstatic inline void\nmono_stack_mark_init (MonoThreadInfo *info, HandleStackMark *stackmark)\n{\n#ifdef MONO_HANDLE_TRACK_SP\n\tgpointer sptop = &stackmark;\n#endif\n\tHandleStack *handles = info->handle_stack;\n\tstackmark->size = handles->top->size;\n\tstackmark->chunk = handles->top;\n#ifdef MONO_HANDLE_TRACK_SP\n\tstackmark->prev_sp = handles->stackmark_sp;\n\thandles->stackmark_sp = sptop;\n#endif\n}\n\nstatic inline void\nmono_stack_mark_pop (MonoThreadInfo *info, HandleStackMark *stackmark)\n{\n\tHandleStack *handles = info->handle_stack;\n\tHandleChunk *old_top = stackmark->chunk;\n\told_top->size = stackmark->size;\n\tmono_memory_write_barrier ();\n\thandles->top = old_top;\n#ifdef MONO_HANDLE_TRACK_SP\n\tmono_memory_write_barrier (); /* write to top before prev_sp */\n\thandles->stackmark_sp = stackmark->prev_sp;\n#endif\n}\n\n// There are deliberately locals and a constant NULL global with this same name.\nextern MonoThreadInfo * const mono_thread_info_current_var;\n\n/*\nIcall macros\n*/\n#define SETUP_ICALL_COMMON\t\\\n\tdo { \\\n\t\tMONO_DISABLE_WARNING(4459) /* declaration of 'identifier' hides global declaration */ \\\n\t\tERROR_DECL (error);\t\\\n\t\t/* There are deliberately locals and a constant NULL global with this same name. */ \\\n\t\tMonoThreadInfo *mono_thread_info_current_var = mono_thread_info_current (); \\\n\t\tMONO_RESTORE_WARNING \\\n\n#define CLEAR_ICALL_COMMON\t\\\n\tmono_error_set_pending_exception (error);\n\n// FIXME There should be fast and slow versions of this, i.e. with and without local variable.\n#define SETUP_ICALL_FRAME\t\\\n\tHandleStackMark __mark;\t\\\n\tmono_stack_mark_init (mono_thread_info_current_var ? mono_thread_info_current_var : mono_thread_info_current (), &__mark);\n\n// FIXME This should be one function call since it is not fully inlined.\n#define CLEAR_ICALL_FRAME\t\\\n\tmono_stack_mark_pop (mono_stack_mark_record_size (mono_thread_info_current_var, &__mark, __FUNCTION__), &__mark);\n\n// FIXME This should be one function call since it is not fully inlined.\n#define CLEAR_ICALL_FRAME_VALUE(RESULT, HANDLE)\t\t\t\t\\\n\t(RESULT) = g_cast (mono_stack_mark_pop_value (mono_stack_mark_record_size (mono_thread_info_current_var, &__mark, __FUNCTION__), &__mark, (HANDLE)));\n\n#define HANDLE_FUNCTION_ENTER() do {\t\t\t\t\\\n\tMONO_DISABLE_WARNING(4459) /* declaration of 'identifier' hides global declaration */ \\\n\t/* There are deliberately locals and a constant NULL global with this same name. */ \\\n\tMonoThreadInfo *mono_thread_info_current_var = mono_thread_info_current ();\t\\\n\tMONO_RESTORE_WARNING \\\n\tSETUP_ICALL_FRAME\t\t\t\t\t\\\n\n#define HANDLE_FUNCTION_RETURN()\t\t\\\n\tCLEAR_ICALL_FRAME;\t\t\t\\\n\t} while (0)\n\n// Do not do this often, but icall state can be manually managed.\n//\n// SETUP_ICALL_FUNCTION\n// loop { // Does not have to be a loop.\n//    SETUP_ICALL_FRAME\n//    ..\n//    CLEAR_ICALL_FRAME\n// }\n//\n// As with HANDLE_FUNCTION_RETURN, you must not\n// skip CLEAR_ICALL_FRAME -- no break, continue, return, or goto (goto label at CLEAR_ICALL_FRAME is idiom).\n//\n#define SETUP_ICALL_FUNCTION \\\n\tMONO_DISABLE_WARNING(4459) /* declaration of 'identifier' hides global declaration */ \\\n\t/* There are deliberately locals and a constant NULL global with this same name. */ \\\n\tMonoThreadInfo *mono_thread_info_current_var = mono_thread_info_current () \\\n\tMONO_RESTORE_WARNING\n\n// A common use of manual icall frame management is for loop.\n// It can also be used for conditionality, where only some paths\n// through a function allocate handles and frame teardown does\n// coincide with function return. For example: emit_invoke_call.\n//\n#define HANDLE_LOOP_PREPARE SETUP_ICALL_FUNCTION\n\n// Return a non-pointer or non-managed pointer, e.g. gboolean.\n// VAL should be a local variable or at least not use handles in the current frame.\n// i.e. it is \"val\", not \"expr\".\n#define HANDLE_FUNCTION_RETURN_VAL(VAL)\t\t\\\n\tCLEAR_ICALL_FRAME;\t\t\t\\\n\treturn (VAL);\t\t\t\t\\\n\t} while (0)\n\n// Return a raw pointer from coop handle.\n#define HANDLE_FUNCTION_RETURN_OBJ(HANDLE)\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\\\n\t\tvoid* __result = MONO_HANDLE_RAW (HANDLE);\t\\\n\t\tCLEAR_ICALL_FRAME;\t\t\t\t\\\n\t\treturn g_cast (__result);\t\t\t\\\n\t} while (0); } while (0);\n\n// Return a coop handle from coop handle.\n#define HANDLE_FUNCTION_RETURN_REF(TYPE, HANDLE)\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\\\n\t\tMonoObjectHandle __result;\t\t\t\t\\\n\t\tCLEAR_ICALL_FRAME_VALUE (__result.__raw, (HANDLE).__raw); \\\n\t\treturn MONO_HANDLE_CAST (TYPE, __result);\t\t\\\n\t} while (0); } while (0);\n\n#ifdef MONO_NEEDS_STACK_WATERMARK\n\nstatic void\nmono_thread_info_pop_stack_mark (MonoThreadInfo *info, void *old_mark)\n{\n\tinfo->stack_mark = old_mark;\n}\n\nstatic void*\nmono_thread_info_push_stack_mark (MonoThreadInfo *info, void *mark)\n{\n\tvoid *old = info->stack_mark;\n\tinfo->stack_mark = mark;\n\treturn old;\n}\n\n#define SETUP_STACK_WATERMARK\t\\\n\tint __dummy;\t\\\n\t__builtin_unwind_init ();\t\\\n\tvoid *__old_stack_mark = mono_thread_info_push_stack_mark (mono_thread_info_current_var, &__dummy);\n\n#define CLEAR_STACK_WATERMARK\t\\\n\tmono_thread_info_pop_stack_mark (mono_thread_info_current_var, __old_stack_mark);\n\n#else\n#define SETUP_STACK_WATERMARK\n#define CLEAR_STACK_WATERMARK\n#endif\n\n#define ICALL_ENTRY()\t\\\n\tSETUP_ICALL_COMMON\t\\\n\tSETUP_ICALL_FRAME\t\\\n\tSETUP_STACK_WATERMARK\n\n#define ICALL_RETURN()\t\\\n\tdo {\t\\\n\t\tCLEAR_STACK_WATERMARK\t\\\n\t\tCLEAR_ICALL_COMMON\t\\\n\t\tCLEAR_ICALL_FRAME\t\\\n\t\treturn;\t\\\n\t} while (0); } while (0)\n\n#define ICALL_RETURN_VAL(VAL)\t\\\n\tdo {\t\\\n\t\tCLEAR_STACK_WATERMARK\t\\\n\t\tCLEAR_ICALL_COMMON\t\\\n\t\tCLEAR_ICALL_FRAME\t\\\n\t\treturn VAL;\t\\\n\t} while (0); } while (0)\n\n#define ICALL_RETURN_OBJ(HANDLE)\t\\\n\tdo {\t\\\n\t\tCLEAR_STACK_WATERMARK\t\\\n\t\tCLEAR_ICALL_COMMON\t\\\n\t\tvoid* __ret = MONO_HANDLE_RAW (HANDLE);\t\\\n\t\tCLEAR_ICALL_FRAME\t\\\n\t\treturn g_cast (__ret);\t\\\n\t} while (0); } while (0)\n\n/*\nHandle macros/functions\n*/\n#ifdef MONO_HANDLE_TRACK_OWNER\n#define STRINGIFY_(x) #x\n#define STRINGIFY(x) STRINGIFY_(x)\n#define HANDLE_OWNER (__FILE__ \":\" STRINGIFY (__LINE__))\n#endif\n\n//XXX add functions to get/set raw, set field, set field to null, set array, set array to null\n#define MONO_HANDLE_DCL(TYPE, NAME) TYPED_HANDLE_NAME(TYPE) NAME = MONO_HANDLE_NEW (TYPE, (NAME ## _raw))\n\n// With Visual C++ compiling as C, the type of a ternary expression\n// yielding two unrelated non-void pointers is the type of the first, plus a warning.\n// This can be used to simulate gcc typeof extension.\n// Otherwise we are forced to evaluate twice, or use C++.\n#ifdef _MSC_VER\ntypedef struct _MonoTypeofCastHelper *MonoTypeofCastHelper; // a pointer type unrelated to anything else\n#define MONO_TYPEOF_CAST(typeexpr, expr) __pragma(warning(suppress:4133))(0 ? (typeexpr) : (MonoTypeofCastHelper)(expr))\n#else\n#define MONO_TYPEOF_CAST(typeexpr, expr) ((__typeof__ (typeexpr))(expr))\n#endif\n\n/*\n * Create handle for the object OBJECT.\n * The handle will keep the object alive and pinned.\n */\n#ifndef MONO_HANDLE_TRACK_OWNER\n\n#define MONO_HANDLE_NEW(type, object) \\\n\t(MONO_HANDLE_CAST_FOR (type) (mono_handle_new (MONO_HANDLE_TYPECHECK_FOR (type) (object), mono_thread_info_current_var)))\n\n#else\n\n#define MONO_HANDLE_NEW(type, object) \\\n\t(MONO_HANDLE_CAST_FOR (type) (mono_handle_new (MONO_HANDLE_TYPECHECK_FOR (type) (object), mono_thread_info_current_var, HANDLE_OWNER)))\n\n#endif\n\n#define MONO_HANDLE_CAST(type, value) (MONO_HANDLE_CAST_FOR (type) ((value).__raw))\n\n/*\n * Return the raw object reference stored in the handle.\n * The objref is valid while the handle is alive and\n * points to it.\n */\n#ifdef __cplusplus\n#define MONO_HANDLE_RAW(handle)     ((handle).GetRaw())\n#else\n#define MONO_HANDLE_RAW(handle)     (MONO_TYPEOF_CAST (*(handle).__raw, mono_handle_raw ((handle).__raw)))\n#endif\n#define MONO_HANDLE_IS_NULL(handle) (mono_handle_is_null ((handle).__raw))\n\n#define MONO_BOOL(x)             (!!MONO_HANDLE_SUPPRESS (x))\n#define MONO_HANDLE_BOOL(handle) (MONO_BOOL (!MONO_HANDLE_IS_NULL (handle)))\n\n/*\nWARNING WARNING WARNING\n\nThe following functions require a particular evaluation ordering to ensure correctness.\nWe must not have exposed handles while any sort of evaluation is happening as that very evaluation might trigger\na safepoint and break us.\n\nThis is why we evaluate index and value before any call to MONO_HANDLE_RAW or other functions that deal with naked objects.\n*/\n#define MONO_HANDLE_SETRAW(HANDLE, FIELD, VALUE) do {\t\t\t\\\n\t\tMONO_HANDLE_SUPPRESS_SCOPE(1);\t\t\t\t\\\n\t\tMonoObject *__val = MONO_HANDLE_SUPPRESS ((MonoObject*)(MONO_HANDLE_UNSUPPRESS (VALUE))); \\\n\t\tMONO_OBJECT_SETREF_INTERNAL (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE)), FIELD, __val); \\\n\t} while (0)\n\n// handle->field = value for managed pointer\n#define MONO_HANDLE_SET(HANDLE, FIELD, VALUE) do {\t\t\t\\\n\t\tMonoObjectHandle __val = MONO_HANDLE_CAST (MonoObject, VALUE);\t\\\n\t\tdo {\t\t\t\t\t\t\t\\\n\t\t\tMONO_HANDLE_SUPPRESS_SCOPE(1);\t\t\t\\\n\t\t\tMONO_OBJECT_SETREF_INTERNAL (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE)), FIELD, MONO_HANDLE_RAW (__val)); \\\n\t\t} while (0);\t\t\t\t\t\t\\\n\t} while (0)\n\n// resultHandle = handle->field\n/* N.B. RESULT is evaluated before HANDLE */\n#define MONO_HANDLE_GET(RESULT, HANDLE, FIELD) do {\t\t\t\\\n\t\tMonoObjectHandle __dest = MONO_HANDLE_CAST (MonoObject, RESULT);\t\\\n\t\tMONO_HANDLE_SUPPRESS (*(gpointer*)__dest.__raw = (gpointer)MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE))->FIELD); \\\n\t} while (0)\n\n// Get handle->field as a type-handle.\n#define MONO_HANDLE_NEW_GET(TYPE,HANDLE,FIELD) (MONO_HANDLE_NEW(TYPE,MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE))->FIELD)))\n\n// Get handle->field, where field is not a pointer (an integer or non-managed pointer).\n#define MONO_HANDLE_GETVAL(HANDLE, FIELD) MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE))->FIELD)\n\n// Get handle->field as a boolean, i.e. typically compare managed pointer to NULL,\n// though any type is ok.\n#define MONO_HANDLE_GET_BOOL(handle, field) (MONO_BOOL (MONO_HANDLE_GETVAL (handle, field)))\n\n// handle->field = (type)value, for non-managed pointers\n// This would be easier to write with the gcc extension typeof,\n// but it is not widely enough implemented (i.e. Microsoft C).\n// The value copy is needed in cases computing value causes a GC\n#define MONO_HANDLE_SETVAL(HANDLE, FIELD, TYPE, VALUE) do {\t\\\n\t\tTYPE __val = (VALUE);\t\\\n\t\tif (0) { TYPE * typecheck G_GNUC_UNUSED = &MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (HANDLE)->FIELD); } \\\n\t\tMONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE))->FIELD = __val); \\\n\t } while (0)\n\n// handle [idx] = value (for managed pointers)\n#define MONO_HANDLE_ARRAY_SETREF(HANDLE, IDX, VALUE) do {\t\\\n\t\tuintptr_t __idx = (IDX);\t\\\n   \t\tMonoObjectHandle __val = MONO_HANDLE_CAST (MonoObject, VALUE);\t\t\\\n\t\t{\t/* FIXME scope needed by Centrinel */\t\t\\\n\t\t\t/* FIXME mono_array_setref_fast is not an expression. */ \\\n\t\t\tMONO_HANDLE_SUPPRESS_SCOPE(1);\t\t\t\\\n\t\t\tmono_array_setref_fast (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE)), __idx, MONO_HANDLE_RAW (__val)); \\\n\t\t}\t\t\t\t\t\t\t\\\n\t} while (0)\n\n// handle [idx] = (type)value (for non-managed types)\n#define MONO_HANDLE_ARRAY_SETVAL(HANDLE, TYPE, IDX, VALUE) do {\t\t\\\n\t\tuintptr_t __idx = (IDX);\t\t\t\t\\\n   \t\tTYPE __val = (VALUE);\t\t\t\t\t\\\n\t\t{\t/* FIXME scope needed by Centrinel */\t\t\\\n\t\t\t/* FIXME mono_array_set is not an expression. */ \\\n\t\t\tMONO_HANDLE_SUPPRESS_SCOPE(1);\t\t\t\\\n\t\t\tmono_array_set_internal (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE)), TYPE, __idx, __val); \\\n\t\t}\t\t\t\t\t\t\t\\\n\t} while (0)\n\n#if 0 // This is never used.\n// handle [idx] = value\n#define MONO_HANDLE_ARRAY_SETRAW(HANDLE, IDX, VALUE) do {\t\\\n\t\tMONO_HANDLE_SUPPRESS_SCOPE(1);\t\t\t\\\n\t\tuintptr_t __idx = MONO_HANDLE_UNSUPPRESS(IDX);\t\\\n\t\tMonoObject *__val = (MonoObject*)(VALUE);\t\\\n\t\tmono_array_setref_fast (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE)), __idx, __val); \\\n\t} while (0)\n#endif\n\n/* N.B. DEST is evaluated AFTER all the other arguments */\n#define MONO_HANDLE_ARRAY_GETVAL(DEST, HANDLE, TYPE, IDX) do {\t\t\\\n\t\tMonoArrayHandle __arr = (HANDLE);\t\t\t\\\n\t\tuintptr_t __idx = (IDX);\t\t\t\t\\\n\t\tTYPE __result = MONO_HANDLE_SUPPRESS (mono_array_get_internal (MONO_HANDLE_RAW(__arr), TYPE, __idx)); \\\n\t\t(DEST) =  __result;\t\t\t\t\t\\\n\t} while (0)\n\n// dest = handle [idx] (for managed pointers)\n#define MONO_HANDLE_ARRAY_GETREF(DEST, HANDLE, IDX) do {\t\t\\\n\t\tmono_handle_array_getref (MONO_HANDLE_CAST(MonoObject, (DEST)), (HANDLE), (IDX)); \\\n\t} while (0)\n\n#define MONO_HANDLE_ASSIGN_RAW(DESTH, SRCP) (mono_handle_assign_raw (MONO_HANDLE_CAST (MonoObject, (DESTH)), (SRCP)))\n#define MONO_HANDLE_ASSIGN(DESTH, SRCH)     (MONO_HANDLE_ASSIGN_RAW ((DESTH), MONO_HANDLE_RAW (SRCH)))\n\n#define MONO_HANDLE_DOMAIN(HANDLE) MONO_HANDLE_SUPPRESS (mono_object_domain (MONO_HANDLE_RAW (MONO_HANDLE_CAST (MonoObject, MONO_HANDLE_UNSUPPRESS (HANDLE)))))\n\n#define mono_handle_domain(handle) MONO_HANDLE_DOMAIN ((handle))\n\n/* Given an object and a MonoClassField, return the value (must be non-object)\n * of the field.  It's the caller's responsibility to check that the object is\n * of the correct class. */\n#define MONO_HANDLE_GET_FIELD_VAL(HANDLE,TYPE,FIELD) (*(TYPE *)(mono_handle_unsafe_field_addr (MONO_HANDLE_CAST (MonoObject, (HANDLE)), (FIELD))))\n#define MONO_HANDLE_GET_FIELD_BOOL(handle, type, field) (MONO_BOOL (MONO_HANDLE_GET_FIELD_VAL ((handle), type, (field))))\n\n#define MONO_HANDLE_NEW_GET_FIELD(HANDLE,TYPE,FIELD) MONO_HANDLE_NEW (TYPE, MONO_HANDLE_SUPPRESS (*(TYPE**)(mono_handle_unsafe_field_addr (MONO_HANDLE_CAST (MonoObject, MONO_HANDLE_UNSUPPRESS (HANDLE)), (FIELD)))))\n\n#define MONO_HANDLE_SET_FIELD_VAL(HANDLE,TYPE,FIELD,VAL) do {\t\t\\\n\t\tMonoObjectHandle __obj = (HANDLE);\t\t\t\\\n\t\tMonoClassField *__field = (FIELD);\t\t\t\\\n\t\tTYPE __value = (VAL);\t\t\t\t\t\\\n\t\t*(TYPE*)(mono_handle_unsafe_field_addr (__obj, __field)) = __value; \\\n\t} while (0)\n\n#define MONO_HANDLE_SET_FIELD_REF(HANDLE,FIELD,VALH) do {\t\t\\\n\t\tMonoObjectHandle __obj = MONO_HANDLE_CAST (MonoObject, (HANDLE)); \\\n\t\tMonoClassField *__field = (FIELD);\t\t\t\\\n\t\tMonoObjectHandle __value = MONO_HANDLE_CAST (MonoObject, (VALH)); \\\n\t\tMONO_HANDLE_SUPPRESS (mono_gc_wbarrier_generic_store_internal (mono_handle_unsafe_field_addr (__obj, __field), MONO_HANDLE_RAW (__value))); \\\n\t} while (0)\n\n#define MONO_HANDLE_GET_CLASS(handle) (MONO_HANDLE_GETVAL (MONO_HANDLE_CAST (MonoObject, (handle)), vtable)->klass)\n\n/* Baked typed handles we all want */\nTYPED_HANDLE_DECL (MonoString);\nTYPED_HANDLE_DECL (MonoArray);\nTYPED_HANDLE_DECL (MonoObject);\nTYPED_HANDLE_DECL (MonoException);\nTYPED_HANDLE_DECL (MonoAppContext);\n\n// Structs cannot be cast to structs.\n// As well, a function is needed because an anonymous struct cannot be initialized in C.\nstatic inline MonoObjectHandle\nmono_handle_cast (gpointer a)\n{\n\treturn *(MonoObjectHandle*)&a;\n}\n\nstatic inline MONO_ALWAYS_INLINE gboolean\nmono_handle_is_null (MonoRawHandle raw_handle)\n{\n\tMONO_HANDLE_SUPPRESS_SCOPE (1);\n\tMonoObjectHandle *handle = (MonoObjectHandle*)&raw_handle;\n\treturn !handle->__raw || !*handle->__raw;\n}\n\nstatic inline MONO_ALWAYS_INLINE gpointer\nmono_handle_raw (MonoRawHandle raw_handle)\n{\n\tMONO_HANDLE_SUPPRESS_SCOPE (1);\n\tMonoObjectHandle *handle = (MonoObjectHandle*)&raw_handle;\n\treturn handle->__raw ? *handle->__raw : NULL;\n}\n\n/* Unfortunately MonoThreadHandle is already a typedef used for something unrelated.  So\n * the coop handle for MonoThread* is MonoThreadObjectHandle.\n */\ntypedef MonoThread MonoThreadObject;\nTYPED_HANDLE_DECL (MonoThreadObject);\n\n/*\nThis is the constant for a handle that points nowhere.\nConstant handles may be initialized to it, but non-constant\nhandles must be NEW'ed. Uses of these are suspicious and should\nbe reviewed and probably changed FIXME.\n*/\n#define NULL_HANDLE (mono_null_value_handle ())\n#define NULL_HANDLE_INIT { 0 }\nstatic inline MonoObjectHandle\nmono_null_value_handle (void)\n{\n\tMonoObjectHandle result = NULL_HANDLE_INIT;\n\treturn result;\n}\n#define NULL_HANDLE_STRING \t\t(MONO_HANDLE_CAST (MonoString, NULL_HANDLE))\n#define NULL_HANDLE_ARRAY  \t\t(MONO_HANDLE_CAST (MonoArray,  NULL_HANDLE))\n#define NULL_HANDLE_STRING_BUILDER\t(MONO_HANDLE_CAST (MonoStringBuilder, NULL_HANDLE))\n\n#if __cplusplus\n\n// Use this to convert a THandle to a raw T** such as for a ref or out parameter, without\n// copying back and forth through an intermediate. The handle must already be allocated,\n// such as icall marshaling does for out and ref parameters.\n#define MONO_HANDLE_REF(h) (h.Ref ())\n\n#else\n\nstatic inline void volatile*\nmono_handle_ref (void volatile* p)\n{\n\tg_assert (p);\n\treturn p;\n}\n\n// Use this to convert a THandle to a raw T** such as for a ref or out parameter, without\n// copying back and forth through an intermediate. The handle must already be allocated,\n// such as icall marshaling does for out and ref parameters.\n#define MONO_HANDLE_REF(handle) (MONO_TYPEOF_CAST ((handle).__raw, mono_handle_ref ((handle).__raw)))\n\n#endif\n\nstatic inline MonoObjectHandle\nmono_handle_assign_raw (MonoObjectHandleOut dest, void *src)\n{\n\tg_assert (dest.__raw);\n\tMONO_HANDLE_SUPPRESS (*dest.__raw = (MonoObject*)src);\n\treturn dest;\n}\n\n/* It is unsafe to call this function directly - it does not pin the handle!  Use MONO_HANDLE_GET_FIELD_VAL(). */\nstatic inline gpointer\nmono_handle_unsafe_field_addr (MonoObjectHandle h, MonoClassField *field)\n{\n\treturn MONO_HANDLE_SUPPRESS (((gchar *)MONO_HANDLE_RAW (h)) + field->offset);\n}\n\n//FIXME this should go somewhere else\nMonoStringHandle mono_string_new_handle (MonoDomain *domain, const char *data, MonoError *error);\nMonoArrayHandle mono_array_new_handle (MonoDomain *domain, MonoClass *eclass, uintptr_t n, MonoError *error);\nMonoArrayHandle\nmono_array_new_full_handle (MonoDomain *domain, MonoClass *array_class, uintptr_t *lengths, intptr_t *lower_bounds, MonoError *error);\n\n#define mono_array_handle_setref(array,index,value) MONO_HANDLE_ARRAY_SETREF ((array), (index), (value))\n\nvoid\nmono_handle_array_getref (MonoObjectHandleOut dest, MonoArrayHandle array, uintptr_t index);\n\n#define mono_handle_class(o) MONO_HANDLE_SUPPRESS (mono_object_class (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (o))))\n\n#define mono_handle_vtable(o) MONO_HANDLE_GETVAL (o, vtable)\n\n/* Local handles to global GC handles and back */\n\nuint32_t\nmono_gchandle_from_handle (MonoObjectHandle handle, mono_bool pinned);\n\nMonoObjectHandle\nmono_gchandle_get_target_handle (uint32_t gchandle);\n\ngboolean\nmono_gchandle_target_equal (uint32_t gchandle, MonoObjectHandle equal);\n\nvoid\nmono_gchandle_target_is_null_or_equal (uint32_t gchandle, MonoObjectHandle equal, gboolean *is_null,\n\tgboolean *is_equal);\n\nvoid\nmono_gchandle_set_target_handle (guint32 gchandle, MonoObjectHandle obj);\n\nvoid\nmono_array_handle_memcpy_refs (MonoArrayHandle dest, uintptr_t dest_idx, MonoArrayHandle src, uintptr_t src_idx, uintptr_t len);\n\n/* Pins the MonoArray using a gchandle and returns a pointer to the\n * element with the given index (where each element is of the given\n * size.  Call mono_gchandle_free to unpin.\n */\ngpointer\nmono_array_handle_pin_with_size (MonoArrayHandle handle, int size, uintptr_t index, uint32_t *gchandle);\n\n#define MONO_ARRAY_HANDLE_PIN(handle,type,index,gchandle_out) ((type*)mono_array_handle_pin_with_size (MONO_HANDLE_CAST(MonoArray,(handle)), sizeof (type), (index), (gchandle_out)))\n\nvoid\nmono_value_copy_array_handle (MonoArrayHandle dest, int dest_idx, gconstpointer src, int count);\n\ngunichar2 *\nmono_string_handle_pin_chars (MonoStringHandle s, uint32_t *gchandle_out);\n\ngpointer\nmono_object_handle_pin_unbox (MonoObjectHandle boxed_valuetype_obj, uint32_t *gchandle_out);\n\nstatic inline gpointer\nmono_handle_unbox_unsafe (MonoObjectHandle handle)\n{\n\tg_assert (m_class_is_valuetype (MONO_HANDLE_GETVAL (handle, vtable)->klass));\n\treturn MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (handle) + 1);\n}\n\nvoid\nmono_error_set_exception_handle (MonoError *error, MonoExceptionHandle exc);\n\nMonoAppContextHandle\nmono_context_get_handle (void);\n\nvoid\nmono_context_set_handle (MonoAppContextHandle new_context);\n\nguint32\nmono_gchandle_new_weakref_from_handle (MonoObjectHandle handle);\n\nint\nmono_handle_hash (MonoObjectHandle object);\n\nguint32\nmono_gchandle_new_weakref_from_handle_track_resurrection (MonoObjectHandle handle);\n\n#endif /* __MONO_HANDLE_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-decl.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_ICALL_DECL_H__\n#define __MONO_METADATA_ICALL_DECL_H__\n\n#include \"appdomain-icalls.h\"\n#include \"class.h\"\n#include \"console-io.h\"\n#include \"environment.h\"\n#include \"file-mmap.h\"\n#include \"filewatcher.h\"\n#include \"gc-internals.h\"\n#include \"handle-decl.h\"\n#include \"handle.h\"\n#include \"locales.h\"\n#include \"marshal.h\"\n#include \"monitor.h\"\n#include \"mono-perfcounters.h\"\n#include \"object-forward.h\"\n#include \"object-internals.h\"\n#include \"rand.h\"\n#include \"reflection.h\"\n#include \"security-core-clr.h\"\n#include \"security-manager.h\"\n#include \"security.h\"\n#include \"string-icalls.h\"\n#include \"threadpool-io.h\"\n#include \"threadpool.h\"\n#include \"mono/utils/mono-digest.h\"\n#include \"mono/utils/mono-forward-internal.h\"\n#include \"w32event.h\"\n#include \"w32file.h\"\n#include \"w32mutex.h\"\n#include \"w32process.h\"\n#include \"w32semaphore.h\"\n#include \"w32socket.h\"\n#include \"mono/utils/mono-proclib.h\"\n\n/* From MonoProperty.cs */\ntypedef enum {\n\tPInfo_Attributes = 1,\n\tPInfo_GetMethod  = 1 << 1,\n\tPInfo_SetMethod  = 1 << 2,\n\tPInfo_ReflectedType = 1 << 3,\n\tPInfo_DeclaringType = 1 << 4,\n\tPInfo_Name = 1 << 5\n} PInfo;\n\n#include \"icall-table.h\"\n\n#define NOHANDLES(inner) inner\n#define HANDLES_REUSE_WRAPPER(...) /* nothing */\n\n// Generate prototypes for coop icall wrappers and coop icalls.\n#define MONO_HANDLE_REGISTER_ICALL(func, ret, nargs, argtypes) \\\n\tMONO_HANDLE_DECLARE (,,func ## _impl, ret, nargs, argtypes); \\\n\tMONO_HANDLE_REGISTER_ICALL_DECLARE_RAW (func, ret, nargs, argtypes);\n#define ICALL_TYPE(id, name, first)\t/* nothing */\n#define ICALL(id, name, func) \t\t/* nothing */\n#define HANDLES(id, name, func, ret, nargs, argtypes) \\\n\tMONO_HANDLE_DECLARE_RAW (id, name, func, ret, nargs, argtypes); \\\n\tMONO_HANDLE_DECLARE (id, name, func, ret, nargs, argtypes);\n#include \"icall-def.h\"\n#undef ICALL_TYPE\n#undef ICALL\n#undef HANDLES\n#undef HANDLES_REUSE_WRAPPER\n#undef NOHANDLES\n#undef MONO_HANDLE_REGISTER_ICALL\n\n// This is sorted.\n// grep ICALL_EXPORT | sort | uniq\nICALL_EXPORT MonoAssemblyName* ves_icall_System_Reflection_AssemblyName_GetNativeName (MonoAssembly*);\nICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_is_subclass_of (MonoType*, MonoType*);\nICALL_EXPORT MonoBoolean ves_icall_System_Environment_GetIs64BitOperatingSystem (void);\nICALL_EXPORT MonoBoolean ves_icall_System_Environment_get_HasShutdownStarted (void);\nICALL_EXPORT MonoBoolean ves_icall_System_GCHandle_CheckCurrentDomain (guint32 gchandle);\nICALL_EXPORT MonoBoolean ves_icall_System_IO_DriveInfo_GetDiskFreeSpace (const gunichar2*, gint32, guint64*, guint64*, guint64*, gint32*);\nICALL_EXPORT MonoBoolean ves_icall_System_Reflection_AssemblyName_ParseAssemblyName (const char*, MonoAssemblyName*, MonoBoolean*, MonoBoolean* is_token_defined_arg);\nICALL_EXPORT MonoBoolean ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_SufficientExecutionStack (void);\nICALL_EXPORT MonoBoolean ves_icall_System_Threading_Thread_YieldInternal (void);\nICALL_EXPORT void ves_icall_System_Threading_Thread_GetCurrentThread (MonoThread * volatile *);\nICALL_EXPORT void ves_icall_System_ArgIterator_Setup (MonoArgIterator*, char*, char*);\nICALL_EXPORT MonoType* ves_icall_System_ArgIterator_IntGetNextArgType (MonoArgIterator*);\nICALL_EXPORT void ves_icall_System_ArgIterator_IntGetNextArg (MonoArgIterator*, MonoTypedRef*);\nICALL_EXPORT void ves_icall_System_ArgIterator_IntGetNextArgWithType (MonoArgIterator*, MonoTypedRef*, MonoType*);\nICALL_EXPORT double ves_icall_System_Math_Abs_double (double);\nICALL_EXPORT double ves_icall_System_Math_Acos (double);\nICALL_EXPORT double ves_icall_System_Math_Acosh (double);\nICALL_EXPORT double ves_icall_System_Math_Asin (double);\nICALL_EXPORT double ves_icall_System_Math_Asinh (double);\nICALL_EXPORT double ves_icall_System_Math_Atan (double);\nICALL_EXPORT double ves_icall_System_Math_Atan2 (double, double);\nICALL_EXPORT double ves_icall_System_Math_Atanh (double);\nICALL_EXPORT double ves_icall_System_Math_Cbrt (double);\nICALL_EXPORT double ves_icall_System_Math_Ceiling (double);\nICALL_EXPORT double ves_icall_System_Math_Cos (double);\nICALL_EXPORT double ves_icall_System_Math_Cosh (double);\nICALL_EXPORT double ves_icall_System_Math_Exp (double);\nICALL_EXPORT double ves_icall_System_Math_FMod (double, double);\nICALL_EXPORT double ves_icall_System_Math_Floor (double);\nICALL_EXPORT double ves_icall_System_Math_Log (double);\nICALL_EXPORT double ves_icall_System_Math_Log10 (double);\nICALL_EXPORT double ves_icall_System_Math_ModF (double, double*);\nICALL_EXPORT double ves_icall_System_Math_Pow (double, double);\nICALL_EXPORT double ves_icall_System_Math_Round (double);\nICALL_EXPORT double ves_icall_System_Math_Sin (double);\nICALL_EXPORT double ves_icall_System_Math_Sinh (double);\nICALL_EXPORT double ves_icall_System_Math_Sqrt (double);\nICALL_EXPORT double ves_icall_System_Math_Tan (double);\nICALL_EXPORT double ves_icall_System_Math_Tanh (double);\nICALL_EXPORT float ves_icall_System_MathF_Acos (float);\nICALL_EXPORT float ves_icall_System_MathF_Acosh (float);\nICALL_EXPORT float ves_icall_System_MathF_Asin (float);\nICALL_EXPORT float ves_icall_System_MathF_Asinh (float);\nICALL_EXPORT float ves_icall_System_MathF_Atan (float);\nICALL_EXPORT float ves_icall_System_MathF_Atan2 (float, float);\nICALL_EXPORT float ves_icall_System_MathF_Atanh (float);\nICALL_EXPORT float ves_icall_System_MathF_Cbrt (float);\nICALL_EXPORT float ves_icall_System_MathF_Ceiling (float);\nICALL_EXPORT float ves_icall_System_MathF_Cos (float);\nICALL_EXPORT float ves_icall_System_MathF_Cosh (float);\nICALL_EXPORT float ves_icall_System_MathF_Exp (float);\nICALL_EXPORT float ves_icall_System_MathF_FMod (float, float);\nICALL_EXPORT float ves_icall_System_MathF_Floor (float);\nICALL_EXPORT float ves_icall_System_MathF_Log (float);\nICALL_EXPORT float ves_icall_System_MathF_Log10 (float);\nICALL_EXPORT float ves_icall_System_MathF_ModF (float, float*);\nICALL_EXPORT float ves_icall_System_MathF_Pow (float, float);\nICALL_EXPORT float ves_icall_System_MathF_Sin (float);\nICALL_EXPORT float ves_icall_System_MathF_Sinh (float);\nICALL_EXPORT float ves_icall_System_MathF_Sqrt (float);\nICALL_EXPORT float ves_icall_System_MathF_Tan (float);\nICALL_EXPORT float ves_icall_System_MathF_Tanh (float);\nICALL_EXPORT float ves_icall_System_Math_Abs_single (float);\n#if ENABLE_NETCORE\nICALL_EXPORT gint32 ves_icall_System_Math_ILogB (double);\nICALL_EXPORT double ves_icall_System_Math_Log2 (double);\nICALL_EXPORT double ves_icall_System_Math_ScaleB (double, gint32);\nICALL_EXPORT double ves_icall_System_Math_FusedMultiplyAdd (double, double, double);\nICALL_EXPORT gint32 ves_icall_System_MathF_ILogB (float);\nICALL_EXPORT float ves_icall_System_MathF_Log2 (float);\nICALL_EXPORT float ves_icall_System_MathF_ScaleB (float, gint32);\nICALL_EXPORT float ves_icall_System_MathF_FusedMultiplyAdd (float, float, float);\n#endif\nICALL_EXPORT gint ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetOffsetToStringData (void);\nICALL_EXPORT gint32 ves_icall_System_Environment_get_ProcessorCount (void);\nICALL_EXPORT gint32 ves_icall_System_Environment_get_TickCount (void);\n#if ENABLE_NETCORE\nICALL_EXPORT gint64 ves_icall_System_Environment_get_TickCount64 (void);\n#endif\nICALL_EXPORT gint64 ves_icall_System_DateTime_GetSystemTimeAsFileTime (void);\nICALL_EXPORT gint64 ves_icall_System_Diagnostics_Process_GetProcessData (int, gint32, MonoProcessError*);\nICALL_EXPORT gint64 ves_icall_System_Diagnostics_Stopwatch_GetTimestamp (void);\nICALL_EXPORT gint64 ves_icall_System_GC_GetTotalMemory (MonoBoolean forceCollection);\nICALL_EXPORT gint64 ves_icall_System_Threading_Timer_GetTimeMonotonic (void);\nICALL_EXPORT gpointer ves_icall_System_GCHandle_GetAddrOfPinnedObject (guint32 handle);\nICALL_EXPORT int ves_icall_Interop_Sys_DoubleToString (double, char*, char*, int);\nICALL_EXPORT int ves_icall_System_Environment_get_Platform (void);\nICALL_EXPORT int ves_icall_System_GC_GetCollectionCount (int);\nICALL_EXPORT int ves_icall_System_GC_GetMaxGeneration (void);\nICALL_EXPORT gint64 ves_icall_System_GC_GetAllocatedBytesForCurrentThread (void);\nICALL_EXPORT int ves_icall_System_Threading_Thread_SystemMaxStackSize (void);\nICALL_EXPORT int ves_icall_get_method_attributes (MonoMethod* method);\nICALL_EXPORT void ves_icall_Mono_Runtime_RegisterReportingForNativeLib (const char*, const char*);\nICALL_EXPORT void ves_icall_Mono_Runtime_RegisterReportingForAllNativeLibs (void);\nICALL_EXPORT void ves_icall_System_Array_GetGenericValue_icall (MonoArray**, guint32, gpointer);\nICALL_EXPORT void ves_icall_System_Array_SetGenericValue_icall (MonoArray**, guint32, gpointer);\nICALL_EXPORT void ves_icall_System_Buffer_MemcpyInternal (gpointer dest, gconstpointer src, gint32 count);\nICALL_EXPORT void ves_icall_System_Environment_Exit (int);\nICALL_EXPORT void ves_icall_System_GCHandle_FreeHandle (guint32 handle);\nICALL_EXPORT void ves_icall_System_GC_InternalCollect (int generation);\nICALL_EXPORT void ves_icall_System_GC_RecordPressure (gint64);\nICALL_EXPORT void ves_icall_System_GC_WaitForPendingFinalizers (void);\nICALL_EXPORT void ves_icall_System_GC_GetGCMemoryInfo (gint64*, gint64*, gint64*, gint64*, gint64*);\n\n#if !ENABLE_NETCORE\nICALL_EXPORT void ves_icall_System_IO_LogcatTextWriter_Log (const char*, gint32, const char*);\n#endif\nICALL_EXPORT void ves_icall_System_NumberFormatter_GetFormatterTables (guint64 const**, gint32 const**, gunichar2 const**, gunichar2 const**, gint64 const**, gint32 const**);\n#if ENABLE_NETCORE\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_Memmove (guint8*, guint8*, size_t);\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_RhBulkMoveWithWriteBarrier (guint8*, guint8*, size_t);\n#else\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_Memmove (guint8*, guint8*, guint);\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_Memmove_wbarrier (guint8*, guint8*, guint, MonoType*);\n#endif\n#if ENABLE_NETCORE\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_ZeroMemory (guint8*, size_t);\n#else\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_ZeroMemory (guint8*, guint);\n#endif\nICALL_EXPORT void ves_icall_System_Runtime_RuntimeImports_ecvt_s(char*, size_t, double, int, int*, int*);\n\n#if defined(ENABLE_MONODROID) || defined(ENABLE_MONOTOUCH) || defined(TARGET_WASM)\nICALL_EXPORT gpointer ves_icall_System_IO_Compression_DeflateStreamNative_CreateZStream (gint32 compress, MonoBoolean gzip, gpointer feeder, gpointer data);\nICALL_EXPORT gint32 ves_icall_System_IO_Compression_DeflateStreamNative_CloseZStream (gpointer stream);\nICALL_EXPORT gint32 ves_icall_System_IO_Compression_DeflateStreamNative_Flush (gpointer stream);\nICALL_EXPORT gint32 ves_icall_System_IO_Compression_DeflateStreamNative_ReadZStream (gpointer stream, gpointer buffer, gint32 length);\nICALL_EXPORT gint32 ves_icall_System_IO_Compression_DeflateStreamNative_WriteZStream (gpointer stream, gpointer buffer, gint32 length);\n#endif\n\n#if defined(ENABLE_MONODROID)\nICALL_EXPORT gpointer ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CreateNLSocket (void);\nICALL_EXPORT gint32 ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_ReadEvents (gpointer sock, gpointer buffer, gint32 count, gint32 size);\nICALL_EXPORT gpointer ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CloseNLSocket (gpointer sock);\n#endif\n\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_CloseProcess (gpointer handle);\nICALL_EXPORT gpointer ves_icall_Microsoft_Win32_NativeMethods_GetCurrentProcess (void);\nICALL_EXPORT gint32 ves_icall_Microsoft_Win32_NativeMethods_GetCurrentProcessId (void);\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_GetExitCodeProcess (gpointer handle, gint32 *exitcode);\nICALL_EXPORT gint32 ves_icall_Microsoft_Win32_NativeMethods_GetPriorityClass (gpointer handle);\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_GetProcessTimes (gpointer handle, gint64 *creation_time, gint64 *exit_time, gint64 *kernel_time, gint64 *user_time);\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_GetProcessWorkingSetSize (gpointer handle, gsize *min, gsize *max);\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_SetPriorityClass (gpointer handle, gint32 priorityClass);\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_SetProcessWorkingSetSize (gpointer handle, gsize min, gsize max);\nICALL_EXPORT MonoBoolean ves_icall_Microsoft_Win32_NativeMethods_TerminateProcess (gpointer handle, gint32 exitcode);\nICALL_EXPORT gint32 ves_icall_Microsoft_Win32_NativeMethods_WaitForInputIdle (gpointer handle, gint32 milliseconds);\n\nICALL_EXPORT MonoBoolean ves_icall_Mono_TlsProviderFactory_IsBtlsSupported (void);\n\nICALL_EXPORT void ves_icall_Mono_Runtime_AnnotateMicrosoftTelemetry (const char *key, const char *value);\nICALL_EXPORT void ves_icall_Mono_Runtime_DisableMicrosoftTelemetry (void);\nICALL_EXPORT int ves_icall_Mono_Runtime_CheckCrashReportingLog (const char *directory, MonoBoolean clear);\nICALL_EXPORT void ves_icall_Mono_Runtime_EnableCrashReportingLog (const char *directory);\n\nICALL_EXPORT void ves_icall_System_Array_InternalCreate (MonoArray *volatile* result, MonoType* type, gint32 rank, gint32* pLengths, gint32* pLowerBounds);\nICALL_EXPORT MonoBoolean ves_icall_System_Array_CanChangePrimitive (MonoReflectionType *volatile* ref_src_type_handle, MonoReflectionType *volatile* ref_dst_type_handle, MonoBoolean reliable);\n\nICALL_EXPORT MonoBoolean ves_icall_System_Diagnostics_Debugger_IsAttached_internal (void);\nICALL_EXPORT MonoBoolean ves_icall_System_Diagnostics_Debugger_IsLogging (void);\nICALL_EXPORT void ves_icall_System_Diagnostics_Debugger_Log (int level, MonoString *volatile* category, MonoString *volatile* message);\n\nICALL_EXPORT void ves_icall_Mono_RuntimeGPtrArrayHandle_GPtrArrayFree (GPtrArray *ptr_array);\nICALL_EXPORT void ves_icall_Mono_RuntimeMarshal_FreeAssemblyName (MonoAssemblyName *aname, MonoBoolean free_struct);\nICALL_EXPORT void ves_icall_Mono_SafeStringMarshal_GFree (void *c_str);\nICALL_EXPORT char* ves_icall_Mono_SafeStringMarshal_StringToUtf8 (MonoString *volatile* s);\nICALL_EXPORT MonoType* ves_icall_Mono_RuntimeClassHandle_GetTypeFromClass (MonoClass *klass);\n\nICALL_EXPORT MonoBoolean ves_icall_Mono_Security_Cryptography_KeyPairPersistence_CanSecure (const gunichar2*);\nICALL_EXPORT MonoBoolean ves_icall_Mono_Security_Cryptography_KeyPairPersistence_IsMachineProtected (const gunichar2*);\nICALL_EXPORT MonoBoolean ves_icall_Mono_Security_Cryptography_KeyPairPersistence_IsUserProtected (const gunichar2*);\nICALL_EXPORT MonoBoolean ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine (const gunichar2*);\nICALL_EXPORT MonoBoolean ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser (const gunichar2*);\nICALL_EXPORT void ves_icall_Mono_Interop_ComInteropProxy_AddProxy  (gpointer pUnk, MonoComInteropProxy *volatile* proxy_handle);\nICALL_EXPORT void ves_icall_Mono_Interop_ComInteropProxy_FindProxy (gpointer pUnk, MonoComInteropProxy *volatile* proxy_handle);\n\nICALL_EXPORT gpointer    ves_icall_System_Net_Sockets_Socket_Accept_icall (gsize, gint32*, MonoBoolean);\nICALL_EXPORT gint32      ves_icall_System_Net_Sockets_Socket_Available_icall (gsize, gint32*);\nICALL_EXPORT void        ves_icall_System_Net_Sockets_Socket_Blocking_icall (gsize sock, MonoBoolean block, gint32 *werror);\nICALL_EXPORT void        ves_icall_System_Net_Sockets_Socket_Close_icall (gsize sock, gint32 *werror);\nICALL_EXPORT void        ves_icall_System_Net_Sockets_Socket_Disconnect_icall (gsize sock, MonoBoolean reuse, gint32 *werror);\nICALL_EXPORT MonoBoolean ves_icall_System_Net_Sockets_Socket_Duplicate_icall (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle, gint32 *werror);\nICALL_EXPORT void        ves_icall_System_Net_Sockets_Socket_Listen_icall (gsize sock, guint32 backlog, gint32 *werror);\nICALL_EXPORT MonoBoolean ves_icall_System_Net_Sockets_Socket_Poll_icall (gsize sock, gint mode, gint timeout, gint32 *werror);\nICALL_EXPORT gint32      ves_icall_System_Net_Sockets_Socket_Receive_icall (gsize sock, gchar *buffer, gint32 count, gint32 flags, gint32 *werror, MonoBoolean blocking);\nICALL_EXPORT gint32      ves_icall_System_Net_Sockets_Socket_Receive_array_icall (gsize sock, WSABUF *buffers, gint32 count, gint32 flags, gint32 *werror, MonoBoolean blocking);\nICALL_EXPORT gint32      ves_icall_System_Net_Sockets_Socket_Send_icall (gsize sock, gchar *buffer, gint32 count, gint32 flags, gint32 *werror, MonoBoolean blocking);\nICALL_EXPORT gint32      ves_icall_System_Net_Sockets_Socket_Send_array_icall (gsize sock, WSABUF *buffers, gint32 count, gint32 flags, gint32 *werror, MonoBoolean blocking);\nICALL_EXPORT void        ves_icall_System_Net_Sockets_Socket_Shutdown_icall (gsize sock, gint32 how, gint32 *werror);\nICALL_EXPORT MonoBoolean ves_icall_System_Net_Sockets_Socket_SupportPortReuse_icall (MonoProtocolType proto);\n\nICALL_EXPORT gpointer   ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMem\t\t(int);\nICALL_EXPORT gpointer   ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMemSize\t(gsize);\nICALL_EXPORT gpointer   ves_icall_System_Runtime_InteropServices_Marshal_AllocHGlobal\t\t(gsize);\nICALL_EXPORT gpointer   ves_icall_System_Runtime_InteropServices_Marshal_ReAllocCoTaskMem\t(gpointer ptr, int size);\nICALL_EXPORT gpointer   ves_icall_System_Runtime_InteropServices_Marshal_ReAllocHGlobal\t\t(gpointer, gsize);\nICALL_EXPORT      char* ves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalAnsi    (const gunichar2*, int);\nICALL_EXPORT gunichar2*\tves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalUni\t(const gunichar2*, int);\n\nICALL_EXPORT gpointer    ves_icall_System_Threading_Semaphore_CreateSemaphore_icall     (gint32 initialCount, gint32 maximumCount, const gunichar2 *name, gint32 name_length, gint32 *win32error);\nICALL_EXPORT gpointer    ves_icall_System_Threading_Semaphore_OpenSemaphore_icall       (const gunichar2 *name, gint32 name_length, gint32 rights, gint32 *win32error);\nICALL_EXPORT MonoBoolean ves_icall_System_Threading_Semaphore_ReleaseSemaphore_internal (gpointer handle, gint32 releaseCount, gint32 *prevcount);\n\n#endif // __MONO_METADATA_ICALL_DECL_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-def-netcore.h",
    "content": "ICALL_TYPE(SAFEWAITHANDLE, \"Microsoft.Win32.SafeHandles.SafeWaitHandle\", SAFEWAITHANDLE_1) // && UNIX\nNOHANDLES(ICALL(SAFEWAITHANDLE_1, \"CloseEventInternal\", ves_icall_System_Threading_Events_CloseEvent_internal))\n\nICALL_TYPE(RUNTIME, \"Mono.Runtime\", RUNTIME_20)\nNOHANDLES(ICALL(RUNTIME_20, \"AnnotateMicrosoftTelemetry_internal\", ves_icall_Mono_Runtime_AnnotateMicrosoftTelemetry))\nNOHANDLES(ICALL(RUNTIME_19, \"CheckCrashReportLog_internal\", ves_icall_Mono_Runtime_CheckCrashReportingLog))\nNOHANDLES(ICALL(RUNTIME_1, \"DisableMicrosoftTelemetry\", ves_icall_Mono_Runtime_DisableMicrosoftTelemetry))\nHANDLES(RUNTIME_15, \"DumpStateSingle_internal\", ves_icall_Mono_Runtime_DumpStateSingle, MonoString, 2, (guint64_ref, guint64_ref))\nHANDLES(RUNTIME_16, \"DumpStateTotal_internal\", ves_icall_Mono_Runtime_DumpStateTotal, MonoString, 2, (guint64_ref, guint64_ref))\nNOHANDLES(ICALL(RUNTIME_18, \"EnableCrashReportLog_internal\", ves_icall_Mono_Runtime_EnableCrashReportingLog))\nHANDLES(RUNTIME_2, \"EnableMicrosoftTelemetry_internal\", ves_icall_Mono_Runtime_EnableMicrosoftTelemetry, void, 6, (const_char_ptr, const_char_ptr, const_char_ptr, const_char_ptr, const_char_ptr, const_char_ptr))\nHANDLES(RUNTIME_3, \"ExceptionToState_internal\", ves_icall_Mono_Runtime_ExceptionToState, MonoString, 3, (MonoException, guint64_ref, guint64_ref))\nHANDLES(RUNTIME_4, \"GetDisplayName\", ves_icall_Mono_Runtime_GetDisplayName, MonoString, 0, ())\nHANDLES(RUNTIME_12, \"GetNativeStackTrace\", ves_icall_Mono_Runtime_GetNativeStackTrace, MonoString, 1, (MonoException))\nNOHANDLES(ICALL(RUNTIME_21, \"RegisterReportingForAllNativeLibs_internal\", ves_icall_Mono_Runtime_RegisterReportingForAllNativeLibs))\nNOHANDLES(ICALL(RUNTIME_17, \"RegisterReportingForNativeLib_internal\", ves_icall_Mono_Runtime_RegisterReportingForNativeLib))\nHANDLES(RUNTIME_13, \"SendMicrosoftTelemetry_internal\", ves_icall_Mono_Runtime_SendMicrosoftTelemetry, void, 3, (const_char_ptr, guint64, guint64))\nHANDLES(RUNTIME_14, \"WriteStateToFile_internal\", ves_icall_Mono_Runtime_DumpTelemetry, void, 3, (const_char_ptr, guint64, guint64))\n\nICALL_TYPE(RTCLASS, \"Mono.RuntimeClassHandle\", RTCLASS_1)\nNOHANDLES(ICALL(RTCLASS_1, \"GetTypeFromClass\", ves_icall_Mono_RuntimeClassHandle_GetTypeFromClass))\n\nICALL_TYPE(RTPTRARRAY, \"Mono.RuntimeGPtrArrayHandle\", RTPTRARRAY_1)\nNOHANDLES(ICALL(RTPTRARRAY_1, \"GPtrArrayFree\", ves_icall_Mono_RuntimeGPtrArrayHandle_GPtrArrayFree))\n\nICALL_TYPE(RTMARSHAL, \"Mono.RuntimeMarshal\", RTMARSHAL_1)\nNOHANDLES(ICALL(RTMARSHAL_1, \"FreeAssemblyName\", ves_icall_Mono_RuntimeMarshal_FreeAssemblyName))\n\nICALL_TYPE(SAFESTRMARSHAL, \"Mono.SafeStringMarshal\", SAFESTRMARSHAL_1)\nNOHANDLES(ICALL(SAFESTRMARSHAL_1, \"GFree\", ves_icall_Mono_SafeStringMarshal_GFree))\nNOHANDLES(ICALL(SAFESTRMARSHAL_2, \"StringToUtf8_icall\", ves_icall_Mono_SafeStringMarshal_StringToUtf8))\n\nICALL_TYPE(ARGI, \"System.ArgIterator\", ARGI_1)\nNOHANDLES(ICALL(ARGI_1, \"IntGetNextArg\",         ves_icall_System_ArgIterator_IntGetNextArg))\nNOHANDLES(ICALL(ARGI_2, \"IntGetNextArgType\",     ves_icall_System_ArgIterator_IntGetNextArgType))\nNOHANDLES(ICALL(ARGI_3, \"IntGetNextArgWithType\", ves_icall_System_ArgIterator_IntGetNextArgWithType))\nNOHANDLES(ICALL(ARGI_4, \"Setup\",                 ves_icall_System_ArgIterator_Setup))\n\nICALL_TYPE(ARRAY, \"System.Array\", ARRAY_0)\nNOHANDLES(ICALL(ARRAY_0, \"CanChangePrimitive\", ves_icall_System_Array_CanChangePrimitive))\nHANDLES(ARRAY_4, \"FastCopy\",         ves_icall_System_Array_FastCopy, MonoBoolean, 5, (MonoArray, int, MonoArray, int, int))\nHANDLES(ARRAY_4a, \"GetCorElementTypeOfElementType\", ves_icall_System_Array_GetCorElementTypeOfElementType, gint32, 1, (MonoArray))\nNOHANDLES(ICALL(ARRAY_5, \"GetGenericValue_icall\", ves_icall_System_Array_GetGenericValue_icall))\nHANDLES(ARRAY_6, \"GetLength\",        ves_icall_System_Array_GetLength, gint32, 2, (MonoArray, gint32))\nHANDLES(ARRAY_7, \"GetLowerBound\",    ves_icall_System_Array_GetLowerBound, gint32, 2, (MonoArray, gint32))\nHANDLES(ARRAY_9, \"GetValue\",         ves_icall_System_Array_GetValue, MonoObject, 2, (MonoArray, MonoArray))\nHANDLES(ARRAY_10, \"GetValueImpl\",    ves_icall_System_Array_GetValueImpl, MonoObject, 2, (MonoArray, guint32))\nNOHANDLES(ICALL(ARRAY_10a, \"InternalCreate\", ves_icall_System_Array_InternalCreate))\nHANDLES(ARRAY_10b, \"IsValueOfElementType\", ves_icall_System_Array_IsValueOfElementType, gint32, 2, (MonoArray, MonoObject))\nNOHANDLES(ICALL(ARRAY_11, \"SetGenericValue_icall\", ves_icall_System_Array_SetGenericValue_icall))\nHANDLES(ARRAY_12, \"SetValue\",         ves_icall_System_Array_SetValue, void, 3, (MonoArray, MonoObject, MonoArray))\nHANDLES(ARRAY_13, \"SetValueImpl\",  ves_icall_System_Array_SetValueImpl, void, 3, (MonoArray, MonoObject, guint32))\nHANDLES(ARRAY_14, \"SetValueRelaxedImpl\",  ves_icall_System_Array_SetValueRelaxedImpl, void, 3, (MonoArray, MonoObject, guint32))\n\nICALL_TYPE(BUFFER, \"System.Buffer\", BUFFER_0)\nNOHANDLES(ICALL(BUFFER_0, \"BulkMoveWithWriteBarrier\", ves_icall_System_Runtime_RuntimeImports_RhBulkMoveWithWriteBarrier))\nNOHANDLES(ICALL(BUFFER_2, \"__Memmove\", ves_icall_System_Runtime_RuntimeImports_Memmove))\nNOHANDLES(ICALL(BUFFER_3, \"__ZeroMemory\", ves_icall_System_Runtime_RuntimeImports_ZeroMemory))\n\nICALL_TYPE(DELEGATE, \"System.Delegate\", DELEGATE_1)\nHANDLES(DELEGATE_1, \"AllocDelegateLike_internal\", ves_icall_System_Delegate_AllocDelegateLike_internal, MonoMulticastDelegate, 1, (MonoDelegate))\nHANDLES(DELEGATE_2, \"CreateDelegate_internal\", ves_icall_System_Delegate_CreateDelegate_internal, MonoObject, 4, (MonoReflectionType, MonoObject, MonoReflectionMethod, MonoBoolean))\nHANDLES(DELEGATE_3, \"GetVirtualMethod_internal\", ves_icall_System_Delegate_GetVirtualMethod_internal, MonoReflectionMethod, 1, (MonoDelegate))\n\nICALL_TYPE(DEBUGR, \"System.Diagnostics.Debugger\", DEBUGR_1)\nNOHANDLES(ICALL(DEBUGR_1, \"IsAttached_internal\", ves_icall_System_Diagnostics_Debugger_IsAttached_internal))\nNOHANDLES(ICALL(DEBUGR_2, \"IsLogging\", ves_icall_System_Diagnostics_Debugger_IsLogging))\nNOHANDLES(ICALL(DEBUGR_3, \"Log_icall\", ves_icall_System_Diagnostics_Debugger_Log))\n\nICALL_TYPE(ENUM, \"System.Enum\", ENUM_1)\nHANDLES(ENUM_1, \"GetEnumValuesAndNames\", ves_icall_System_Enum_GetEnumValuesAndNames, MonoBoolean, 3, (MonoReflectionType, MonoArrayOut, MonoArrayOut))\nHANDLES(ENUM_2, \"InternalBoxEnum\", ves_icall_System_Enum_ToObject, MonoObject, 2, (MonoReflectionType, guint64))\nHANDLES(ENUM_3, \"InternalGetCorElementType\", ves_icall_System_Enum_InternalGetCorElementType, int, 1, (MonoObject))\nHANDLES(ENUM_4, \"InternalGetUnderlyingType\", ves_icall_System_Enum_get_underlying_type, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(ENUM_5, \"InternalHasFlag\", ves_icall_System_Enum_InternalHasFlag, MonoBoolean, 2, (MonoObject, MonoObject))\n\nICALL_TYPE(ENV, \"System.Environment\", ENV_1)\nNOHANDLES(ICALL(ENV_1, \"Exit\", ves_icall_System_Environment_Exit))\nHANDLES(ENV_1a, \"FailFast\", ves_icall_System_Environment_FailFast, void, 3, (MonoString, MonoException, MonoString))\nHANDLES(ENV_2, \"GetCommandLineArgs\", ves_icall_System_Environment_GetCommandLineArgs, MonoArray, 0, ())\nHANDLES(ENV_3, \"GetEnvironmentVariableNames\", ves_icall_System_Environment_GetEnvironmentVariableNames, MonoArray, 0, ())\nNOHANDLES(ICALL(ENV_4, \"GetProcessorCount\", ves_icall_System_Environment_get_ProcessorCount))\nNOHANDLES(ICALL(ENV_9, \"get_ExitCode\", mono_environment_exitcode_get))\nHANDLES(ENV_11, \"get_MachineName\", ves_icall_System_Environment_get_MachineName, MonoString, 0, ())\nNOHANDLES(ICALL(ENV_13, \"get_Platform\", ves_icall_System_Environment_get_Platform))\nNOHANDLES(ICALL(ENV_15, \"get_TickCount\", ves_icall_System_Environment_get_TickCount))\nNOHANDLES(ICALL(ENV_15a, \"get_TickCount64\", ves_icall_System_Environment_get_TickCount64))\nHANDLES(ENV_16, \"get_UserName\", ves_icall_System_Environment_get_UserName, MonoString, 0, ())\nHANDLES(ENV_17, \"internalGetEnvironmentVariable_native\", ves_icall_System_Environment_GetEnvironmentVariable_native, MonoString, 1, (const_char_ptr))\nNOHANDLES(ICALL(ENV_20, \"set_ExitCode\", mono_environment_exitcode_set))\n\nICALL_TYPE(GC, \"System.GC\", GC_10)\nNOHANDLES(ICALL(GC_10, \"GetAllocatedBytesForCurrentThread\", ves_icall_System_GC_GetAllocatedBytesForCurrentThread))\nNOHANDLES(ICALL(GC_0, \"GetCollectionCount\", ves_icall_System_GC_GetCollectionCount))\nHANDLES(GC_0a, \"GetGeneration\", ves_icall_System_GC_GetGeneration, int, 1, (MonoObject))\nNOHANDLES(ICALL(GC_0b, \"GetMaxGeneration\", ves_icall_System_GC_GetMaxGeneration))\nHANDLES(GC_11, \"GetTotalAllocatedBytes\", ves_icall_System_GC_GetTotalAllocatedBytes, guint64, 1, (MonoBoolean))\nNOHANDLES(ICALL(GC_1, \"GetTotalMemory\", ves_icall_System_GC_GetTotalMemory))\nNOHANDLES(ICALL(GC_2, \"InternalCollect\", ves_icall_System_GC_InternalCollect))\nNOHANDLES(ICALL(GC_4a, \"RecordPressure\", ves_icall_System_GC_RecordPressure))\nNOHANDLES(ICALL(GC_6, \"WaitForPendingFinalizers\", ves_icall_System_GC_WaitForPendingFinalizers))\nNOHANDLES(ICALL(GC_12, \"_GetGCMemoryInfo\", ves_icall_System_GC_GetGCMemoryInfo))\nHANDLES(GC_6b, \"_ReRegisterForFinalize\", ves_icall_System_GC_ReRegisterForFinalize, void, 1, (MonoObject))\nHANDLES(GC_7, \"_SuppressFinalize\", ves_icall_System_GC_SuppressFinalize, void, 1, (MonoObject))\nHANDLES(GC_9, \"get_ephemeron_tombstone\", ves_icall_System_GC_get_ephemeron_tombstone, MonoObject, 0, ())\nHANDLES(GC_8, \"register_ephemeron_array\", ves_icall_System_GC_register_ephemeron_array, void, 1, (MonoObject))\n\nICALL_TYPE(STREAM, \"System.IO.Stream\", STREAM_1)\nHANDLES(STREAM_1, \"HasOverriddenBeginEndRead\", ves_icall_System_IO_Stream_HasOverriddenBeginEndRead, MonoBoolean, 1, (MonoObject))\nHANDLES(STREAM_2, \"HasOverriddenBeginEndWrite\", ves_icall_System_IO_Stream_HasOverriddenBeginEndWrite, MonoBoolean, 1, (MonoObject))\n\nICALL_TYPE(MATH, \"System.Math\", MATH_19)\nNOHANDLES(ICALL(MATH_19, \"Abs(double)\", ves_icall_System_Math_Abs_double))\nNOHANDLES(ICALL(MATH_20, \"Abs(single)\", ves_icall_System_Math_Abs_single))\nNOHANDLES(ICALL(MATH_1, \"Acos\", ves_icall_System_Math_Acos))\nNOHANDLES(ICALL(MATH_1a, \"Acosh\", ves_icall_System_Math_Acosh))\nNOHANDLES(ICALL(MATH_2, \"Asin\", ves_icall_System_Math_Asin))\nNOHANDLES(ICALL(MATH_2a, \"Asinh\", ves_icall_System_Math_Asinh))\nNOHANDLES(ICALL(MATH_3, \"Atan\", ves_icall_System_Math_Atan))\nNOHANDLES(ICALL(MATH_4, \"Atan2\", ves_icall_System_Math_Atan2))\nNOHANDLES(ICALL(MATH_4a, \"Atanh\", ves_icall_System_Math_Atanh))\nNOHANDLES(ICALL(MATH_4b, \"Cbrt\", ves_icall_System_Math_Cbrt))\nNOHANDLES(ICALL(MATH_21, \"Ceiling\", ves_icall_System_Math_Ceiling))\nNOHANDLES(ICALL(MATH_5, \"Cos\", ves_icall_System_Math_Cos))\nNOHANDLES(ICALL(MATH_6, \"Cosh\", ves_icall_System_Math_Cosh))\nNOHANDLES(ICALL(MATH_7, \"Exp\", ves_icall_System_Math_Exp))\nNOHANDLES(ICALL(MATH_7a, \"FMod\", ves_icall_System_Math_FMod))\nNOHANDLES(ICALL(MATH_8, \"Floor\", ves_icall_System_Math_Floor))\nNOHANDLES(ICALL(MATH_22, \"FusedMultiplyAdd\", ves_icall_System_Math_FusedMultiplyAdd))\nNOHANDLES(ICALL(MATH_23, \"ILogB\", ves_icall_System_Math_ILogB))\nNOHANDLES(ICALL(MATH_9, \"Log\", ves_icall_System_Math_Log))\nNOHANDLES(ICALL(MATH_10, \"Log10\", ves_icall_System_Math_Log10))\nNOHANDLES(ICALL(MATH_24, \"Log2\", ves_icall_System_Math_Log2))\nNOHANDLES(ICALL(MATH_10a, \"ModF\", ves_icall_System_Math_ModF))\nNOHANDLES(ICALL(MATH_11, \"Pow\", ves_icall_System_Math_Pow))\nNOHANDLES(ICALL(MATH_12, \"Round\", ves_icall_System_Math_Round))\nNOHANDLES(ICALL(MATH_25, \"ScaleB\", ves_icall_System_Math_ScaleB))\nNOHANDLES(ICALL(MATH_14, \"Sin\", ves_icall_System_Math_Sin))\nNOHANDLES(ICALL(MATH_15, \"Sinh\", ves_icall_System_Math_Sinh))\nNOHANDLES(ICALL(MATH_16, \"Sqrt\", ves_icall_System_Math_Sqrt))\nNOHANDLES(ICALL(MATH_17, \"Tan\", ves_icall_System_Math_Tan))\nNOHANDLES(ICALL(MATH_18, \"Tanh\", ves_icall_System_Math_Tanh))\n\nICALL_TYPE(MATHF, \"System.MathF\", MATHF_1)\nNOHANDLES(ICALL(MATHF_1, \"Acos\", ves_icall_System_MathF_Acos))\nNOHANDLES(ICALL(MATHF_2, \"Acosh\", ves_icall_System_MathF_Acosh))\nNOHANDLES(ICALL(MATHF_3, \"Asin\", ves_icall_System_MathF_Asin))\nNOHANDLES(ICALL(MATHF_4, \"Asinh\", ves_icall_System_MathF_Asinh))\nNOHANDLES(ICALL(MATHF_5, \"Atan\", ves_icall_System_MathF_Atan))\nNOHANDLES(ICALL(MATHF_6, \"Atan2\", ves_icall_System_MathF_Atan2))\nNOHANDLES(ICALL(MATHF_7, \"Atanh\", ves_icall_System_MathF_Atanh))\nNOHANDLES(ICALL(MATHF_8, \"Cbrt\", ves_icall_System_MathF_Cbrt))\nNOHANDLES(ICALL(MATHF_9, \"Ceiling\", ves_icall_System_MathF_Ceiling))\nNOHANDLES(ICALL(MATHF_10, \"Cos\", ves_icall_System_MathF_Cos))\nNOHANDLES(ICALL(MATHF_11, \"Cosh\", ves_icall_System_MathF_Cosh))\nNOHANDLES(ICALL(MATHF_12, \"Exp\", ves_icall_System_MathF_Exp))\nNOHANDLES(ICALL(MATHF_22, \"FMod\", ves_icall_System_MathF_FMod))\nNOHANDLES(ICALL(MATHF_13, \"Floor\", ves_icall_System_MathF_Floor))\nNOHANDLES(ICALL(MATHF_24, \"FusedMultiplyAdd\", ves_icall_System_MathF_FusedMultiplyAdd))\nNOHANDLES(ICALL(MATHF_25, \"ILogB\", ves_icall_System_MathF_ILogB))\nNOHANDLES(ICALL(MATHF_14, \"Log\", ves_icall_System_MathF_Log))\nNOHANDLES(ICALL(MATHF_15, \"Log10\", ves_icall_System_MathF_Log10))\nNOHANDLES(ICALL(MATHF_26, \"Log2\", ves_icall_System_MathF_Log2))\nNOHANDLES(ICALL(MATHF_23, \"ModF(single,single*)\", ves_icall_System_MathF_ModF))\nNOHANDLES(ICALL(MATHF_16, \"Pow\", ves_icall_System_MathF_Pow))\nNOHANDLES(ICALL(MATHF_27, \"ScaleB\", ves_icall_System_MathF_ScaleB))\nNOHANDLES(ICALL(MATHF_17, \"Sin\", ves_icall_System_MathF_Sin))\nNOHANDLES(ICALL(MATHF_18, \"Sinh\", ves_icall_System_MathF_Sinh))\nNOHANDLES(ICALL(MATHF_19, \"Sqrt\", ves_icall_System_MathF_Sqrt))\nNOHANDLES(ICALL(MATHF_20, \"Tan\", ves_icall_System_MathF_Tan))\nNOHANDLES(ICALL(MATHF_21, \"Tanh\", ves_icall_System_MathF_Tanh))\n\nICALL_TYPE(OBJ, \"System.Object\", OBJ_3)\nHANDLES(OBJ_3, \"MemberwiseClone\", ves_icall_System_Object_MemberwiseClone, MonoObject, 1, (MonoObject))\n\nICALL_TYPE(ASSEM, \"System.Reflection.Assembly\", ASSEM_2)\nHANDLES(ASSEM_2, \"GetCallingAssembly\", ves_icall_System_Reflection_Assembly_GetCallingAssembly, MonoReflectionAssembly, 0, ())\nHANDLES(ASSEM_3, \"GetEntryAssemblyNative\", ves_icall_System_Reflection_Assembly_GetEntryAssembly, MonoReflectionAssembly, 0, ())\nHANDLES(ASSEM_4, \"GetExecutingAssembly\", ves_icall_System_Reflection_Assembly_GetExecutingAssembly, MonoReflectionAssembly, 1, (MonoStackCrawlMark_ptr))\nHANDLES(ASSEM_5, \"InternalGetAssemblyName\", ves_icall_System_Reflection_Assembly_InternalGetAssemblyName, void, 3, (MonoString, MonoAssemblyName_ref, MonoStringOut))\nHANDLES(ASSEM_6, \"InternalGetType\", ves_icall_System_Reflection_Assembly_InternalGetType, MonoReflectionType, 5, (MonoReflectionAssembly, MonoReflectionModule, MonoString, MonoBoolean, MonoBoolean))\nHANDLES(ASSEM_7, \"InternalLoad\", ves_icall_System_Reflection_Assembly_InternalLoad, MonoReflectionAssembly, 3, (MonoString, MonoStackCrawlMark_ptr, gpointer))\n\nICALL_TYPE(ASSEMN, \"System.Reflection.AssemblyName\", ASSEMN_0)\nNOHANDLES(ICALL(ASSEMN_0, \"GetNativeName\", ves_icall_System_Reflection_AssemblyName_GetNativeName))\nNOHANDLES(ICALL(ASSEMN_3, \"ParseAssemblyName\", ves_icall_System_Reflection_AssemblyName_ParseAssemblyName))\nNOHANDLES(ICALL(ASSEMN_2, \"get_public_token\", mono_digest_get_public_token))\n\nICALL_TYPE(MCATTR, \"System.Reflection.CustomAttribute\", MCATTR_1)\nHANDLES(MCATTR_1, \"GetCustomAttributesDataInternal\", ves_icall_MonoCustomAttrs_GetCustomAttributesDataInternal, MonoArray, 1, (MonoObject))\nHANDLES(MCATTR_2, \"GetCustomAttributesInternal\", ves_icall_MonoCustomAttrs_GetCustomAttributesInternal, MonoArray, 3, (MonoObject, MonoReflectionType, MonoBoolean))\nHANDLES(MCATTR_3, \"IsDefinedInternal\", ves_icall_MonoCustomAttrs_IsDefinedInternal, MonoBoolean, 2, (MonoObject, MonoReflectionType))\n\nICALL_TYPE(CATTR_DATA, \"System.Reflection.CustomAttributeData\", CATTR_DATA_1)\nHANDLES(CATTR_DATA_1, \"ResolveArgumentsInternal\", ves_icall_System_Reflection_CustomAttributeData_ResolveArgumentsInternal, void, 6, (MonoReflectionMethod, MonoReflectionAssembly, gpointer, guint32, MonoArrayOut, MonoArrayOut))\n\nICALL_TYPE(ASSEMB, \"System.Reflection.Emit.AssemblyBuilder\", ASSEMB_1)\nHANDLES(ASSEMB_1, \"UpdateNativeCustomAttributes\", ves_icall_AssemblyBuilder_UpdateNativeCustomAttributes, void, 1, (MonoReflectionAssemblyBuilder))\nHANDLES(ASSEMB_2, \"basic_init\", ves_icall_AssemblyBuilder_basic_init, void, 1, (MonoReflectionAssemblyBuilder))\n\nICALL_TYPE(CATTRB, \"System.Reflection.Emit.CustomAttributeBuilder\", CATTRB_1)\nHANDLES(CATTRB_1, \"GetBlob\", ves_icall_CustomAttributeBuilder_GetBlob, MonoArray, 7, (MonoReflectionAssembly, MonoObject, MonoArray, MonoArray, MonoArray, MonoArray, MonoArray))\n\nICALL_TYPE(DYNM, \"System.Reflection.Emit.DynamicMethod\", DYNM_1)\nHANDLES(DYNM_1, \"create_dynamic_method\", ves_icall_DynamicMethod_create_dynamic_method, void, 1, (MonoReflectionDynamicMethod))\n\nICALL_TYPE(ENUMB, \"System.Reflection.Emit.EnumBuilder\", ENUMB_1)\nHANDLES(ENUMB_1, \"setup_enum_type\", ves_icall_EnumBuilder_setup_enum_type, void, 2, (MonoReflectionType, MonoReflectionType))\n\nICALL_TYPE(MODULEB, \"System.Reflection.Emit.ModuleBuilder\", MODULEB_10)\nHANDLES(MODULEB_10, \"GetRegisteredToken\", ves_icall_ModuleBuilder_GetRegisteredToken, MonoObject, 2, (MonoReflectionModuleBuilder, guint32))\nHANDLES(MODULEB_8, \"RegisterToken\", ves_icall_ModuleBuilder_RegisterToken, void, 3, (MonoReflectionModuleBuilder, MonoObject, guint32))\nHANDLES(MODULEB_2, \"basic_init\", ves_icall_ModuleBuilder_basic_init, void, 1, (MonoReflectionModuleBuilder))\nHANDLES(MODULEB_5, \"getMethodToken\", ves_icall_ModuleBuilder_getMethodToken, gint32, 3, (MonoReflectionModuleBuilder, MonoReflectionMethod, MonoArray))\nHANDLES(MODULEB_6, \"getToken\", ves_icall_ModuleBuilder_getToken, gint32, 3, (MonoReflectionModuleBuilder, MonoObject, MonoBoolean))\nHANDLES(MODULEB_7, \"getUSIndex\", ves_icall_ModuleBuilder_getUSIndex, guint32, 2, (MonoReflectionModuleBuilder, MonoString))\nHANDLES(MODULEB_9, \"set_wrappers_type\", ves_icall_ModuleBuilder_set_wrappers_type, void, 2, (MonoReflectionModuleBuilder, MonoReflectionType))\n\nICALL_TYPE(SIGH, \"System.Reflection.Emit.SignatureHelper\", SIGH_1)\nHANDLES(SIGH_1, \"get_signature_field\", ves_icall_SignatureHelper_get_signature_field, MonoArray, 1, (MonoReflectionSigHelper))\nHANDLES(SIGH_2, \"get_signature_local\", ves_icall_SignatureHelper_get_signature_local, MonoArray, 1, (MonoReflectionSigHelper))\n\nICALL_TYPE(TYPEB, \"System.Reflection.Emit.TypeBuilder\", TYPEB_1)\nHANDLES(TYPEB_1, \"create_runtime_class\", ves_icall_TypeBuilder_create_runtime_class, MonoReflectionType, 1, (MonoReflectionTypeBuilder))\n\nICALL_TYPE(FIELDI, \"System.Reflection.FieldInfo\", FILEDI_1)\nHANDLES(FILEDI_1, \"get_marshal_info\", ves_icall_System_Reflection_FieldInfo_get_marshal_info, MonoReflectionMarshalAsAttribute, 1, (MonoReflectionField))\n\nHANDLES(FILEDI_2, \"internal_from_handle_type\", ves_icall_System_Reflection_FieldInfo_internal_from_handle_type, MonoReflectionField, 2, (MonoClassField_ref, MonoType_ref))\n\nICALL_TYPE(MBASE, \"System.Reflection.MethodBase\", MBASE_1)\nHANDLES(MBASE_1, \"GetCurrentMethod\", ves_icall_GetCurrentMethod, MonoReflectionMethod, 0, ())\n\nICALL_TYPE(MMETHI, \"System.Reflection.MonoMethodInfo\", MMETHI_4)\nNOHANDLES(ICALL(MMETHI_4, \"get_method_attributes\", ves_icall_get_method_attributes))\nHANDLES(MMETHI_1, \"get_method_info\", ves_icall_get_method_info, void, 2, (MonoMethod_ptr, MonoMethodInfo_ref))\nHANDLES(MMETHI_2, \"get_parameter_info\", ves_icall_System_Reflection_MonoMethodInfo_get_parameter_info, MonoArray, 2, (MonoMethod_ptr, MonoReflectionMethod))\nHANDLES(MMETHI_3, \"get_retval_marshal\", ves_icall_System_MonoMethodInfo_get_retval_marshal, MonoReflectionMarshalAsAttribute, 1, (MonoMethod_ptr))\n\nICALL_TYPE(RASSEM, \"System.Reflection.RuntimeAssembly\", RASSEM_1)\nHANDLES(RASSEM_1, \"GetExportedTypes\", ves_icall_System_Reflection_RuntimeAssembly_GetExportedTypes, MonoArray, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_1a, \"GetFilesInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetFilesInternal, MonoObject, 3, (MonoReflectionAssembly, MonoString, MonoBoolean))\nHANDLES(RASSEM_2, \"GetManifestModuleInternal\", ves_icall_System_Reflection_Assembly_GetManifestModuleInternal, MonoReflectionModule, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_3, \"GetManifestResourceInfoInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetManifestResourceInfoInternal, MonoBoolean, 3, (MonoReflectionAssembly, MonoString, MonoManifestResourceInfo))\nHANDLES(RASSEM_4, \"GetManifestResourceInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetManifestResourceInternal, gpointer, 4, (MonoReflectionAssembly, MonoString, gint32_ref, MonoReflectionModuleOut))\nHANDLES(RASSEM_5, \"GetManifestResourceNames\", ves_icall_System_Reflection_RuntimeAssembly_GetManifestResourceNames, MonoArray, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_6, \"GetModulesInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetModulesInternal, MonoArray, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_6b, \"GetTopLevelForwardedTypes\", ves_icall_System_Reflection_RuntimeAssembly_GetTopLevelForwardedTypes, MonoArray, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_7, \"InternalGetReferencedAssemblies\", ves_icall_System_Reflection_Assembly_InternalGetReferencedAssemblies, GPtrArray_ptr, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_8, \"InternalImageRuntimeVersion\", ves_icall_System_Reflection_RuntimeAssembly_InternalImageRuntimeVersion, MonoString, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_9, \"get_EntryPoint\", ves_icall_System_Reflection_RuntimeAssembly_get_EntryPoint, MonoReflectionMethod, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_10, \"get_code_base\", ves_icall_System_Reflection_RuntimeAssembly_get_code_base, MonoString, 2, (MonoReflectionAssembly, MonoBoolean))\nHANDLES(RASSEM_11, \"get_fullname\", ves_icall_System_Reflection_RuntimeAssembly_get_fullname, MonoString, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_12, \"get_location\", ves_icall_System_Reflection_RuntimeAssembly_get_location, MonoString, 1, (MonoReflectionAssembly))\n\nICALL_TYPE(MCMETH, \"System.Reflection.RuntimeConstructorInfo\", MCMETH_1)\nHANDLES(MCMETH_1, \"GetGenericMethodDefinition_impl\", ves_icall_RuntimeMethodInfo_GetGenericMethodDefinition, MonoReflectionMethod, 1, (MonoReflectionMethod))\nHANDLES(MCMETH_2, \"InternalInvoke\", ves_icall_InternalInvoke, MonoObject, 4, (MonoReflectionMethod, MonoObject, MonoArray, MonoExceptionOut))\nHANDLES(MCMETH_3, \"get_core_clr_security_level\", ves_icall_RuntimeMethodInfo_get_core_clr_security_level, int, 1, (MonoReflectionMethod))\nHANDLES_REUSE_WRAPPER(MCMETH_4, \"get_metadata_token\", ves_icall_reflection_get_token)\n\nICALL_TYPE(MEV, \"System.Reflection.RuntimeEventInfo\", MEV_1)\nHANDLES(MEV_1, \"get_event_info\", ves_icall_RuntimeEventInfo_get_event_info, void, 2, (MonoReflectionMonoEvent, MonoEventInfo_ref))\nHANDLES_REUSE_WRAPPER(MEV_2, \"get_metadata_token\", ves_icall_reflection_get_token)\nHANDLES(MEV_3, \"internal_from_handle_type\", ves_icall_System_Reflection_EventInfo_internal_from_handle_type, MonoReflectionEvent, 2, (MonoEvent_ref, MonoType_ref))\n\nICALL_TYPE(MFIELD, \"System.Reflection.RuntimeFieldInfo\", MFIELD_1)\nHANDLES(MFIELD_1, \"GetFieldOffset\", ves_icall_RuntimeFieldInfo_GetFieldOffset, gint32, 1, (MonoReflectionField))\nHANDLES(MFIELD_2, \"GetParentType\", ves_icall_RuntimeFieldInfo_GetParentType, MonoReflectionType, 2, (MonoReflectionField, MonoBoolean))\nHANDLES(MFIELD_3, \"GetRawConstantValue\", ves_icall_RuntimeFieldInfo_GetRawConstantValue, MonoObject, 1, (MonoReflectionField))\nHANDLES(MFIELD_4, \"GetTypeModifiers\", ves_icall_System_Reflection_FieldInfo_GetTypeModifiers, MonoArray, 2, (MonoReflectionField, MonoBoolean))\nHANDLES(MFIELD_5, \"GetValueInternal\", ves_icall_RuntimeFieldInfo_GetValueInternal, MonoObject, 2, (MonoReflectionField, MonoObject))\nHANDLES(MFIELD_6, \"ResolveType\", ves_icall_RuntimeFieldInfo_ResolveType, MonoReflectionType, 1, (MonoReflectionField))\nHANDLES(MFIELD_7, \"SetValueInternal\", ves_icall_RuntimeFieldInfo_SetValueInternal, void, 3, (MonoReflectionField, MonoObject, MonoObject))\nHANDLES_REUSE_WRAPPER(MFIELD_8, \"UnsafeGetValue\", ves_icall_RuntimeFieldInfo_GetValueInternal)\nHANDLES(MFIELD_9, \"get_core_clr_security_level\", ves_icall_RuntimeFieldInfo_get_core_clr_security_level, int, 1, (MonoReflectionField))\nHANDLES_REUSE_WRAPPER(MFIELD_10, \"get_metadata_token\", ves_icall_reflection_get_token)\n\nICALL_TYPE(RMETHODINFO, \"System.Reflection.RuntimeMethodInfo\", RMETHODINFO_1)\nHANDLES(RMETHODINFO_1, \"GetGenericArguments\", ves_icall_RuntimeMethodInfo_GetGenericArguments, MonoArray, 1, (MonoReflectionMethod))\nHANDLES_REUSE_WRAPPER(RMETHODINFO_2, \"GetGenericMethodDefinition_impl\", ves_icall_RuntimeMethodInfo_GetGenericMethodDefinition)\nHANDLES(RMETHODINFO_3, \"GetMethodBodyInternal\", ves_icall_System_Reflection_RuntimeMethodInfo_GetMethodBodyInternal, MonoReflectionMethodBody, 1, (MonoMethod_ptr))\nHANDLES(RMETHODINFO_4, \"GetMethodFromHandleInternalType_native\", ves_icall_System_Reflection_RuntimeMethodInfo_GetMethodFromHandleInternalType_native, MonoReflectionMethod, 3, (MonoMethod_ptr, MonoType_ptr, MonoBoolean))\nHANDLES(RMETHODINFO_5, \"GetPInvoke\", ves_icall_RuntimeMethodInfo_GetPInvoke, void, 4, (MonoReflectionMethod, int_ref, MonoStringOut, MonoStringOut))\nHANDLES_REUSE_WRAPPER(RMETHODINFO_6, \"InternalInvoke\", ves_icall_InternalInvoke)\nHANDLES(RMETHODINFO_7, \"MakeGenericMethod_impl\", ves_icall_RuntimeMethodInfo_MakeGenericMethod_impl, MonoReflectionMethod, 2, (MonoReflectionMethod, MonoArray))\nHANDLES(RMETHODINFO_8, \"get_IsGenericMethod\", ves_icall_RuntimeMethodInfo_get_IsGenericMethod, MonoBoolean, 1, (MonoReflectionMethod))\nHANDLES(RMETHODINFO_9, \"get_IsGenericMethodDefinition\", ves_icall_RuntimeMethodInfo_get_IsGenericMethodDefinition, MonoBoolean, 1, (MonoReflectionMethod))\nHANDLES(RMETHODINFO_10, \"get_base_method\", ves_icall_RuntimeMethodInfo_get_base_method, MonoReflectionMethod, 2, (MonoReflectionMethod, MonoBoolean))\nHANDLES_REUSE_WRAPPER(RMETHODINFO_11, \"get_core_clr_security_level\", ves_icall_RuntimeMethodInfo_get_core_clr_security_level)\nHANDLES_REUSE_WRAPPER(RMETHODINFO_12, \"get_metadata_token\", ves_icall_reflection_get_token)\nHANDLES(RMETHODINFO_13, \"get_name\", ves_icall_RuntimeMethodInfo_get_name, MonoString, 1, (MonoReflectionMethod))\n\nICALL_TYPE(MODULE, \"System.Reflection.RuntimeModule\", MODULE_2)\nHANDLES(MODULE_2, \"GetGlobalType\", ves_icall_System_Reflection_RuntimeModule_GetGlobalType, MonoReflectionType, 1, (MonoImage_ptr))\nHANDLES(MODULE_3, \"GetGuidInternal\", ves_icall_System_Reflection_RuntimeModule_GetGuidInternal, void, 2, (MonoImage_ptr, MonoArray))\nHANDLES(MODULE_14, \"GetHINSTANCE\", ves_icall_System_Reflection_RuntimeModule_GetHINSTANCE, gpointer, 1, (MonoImage_ptr))\nHANDLES(MODULE_4, \"GetMDStreamVersion\", ves_icall_System_Reflection_RuntimeModule_GetMDStreamVersion, gint32, 1, (MonoImage_ptr))\nHANDLES(MODULE_5, \"GetPEKind\", ves_icall_System_Reflection_RuntimeModule_GetPEKind, void, 3, (MonoImage_ptr, gint32_ptr, gint32_ptr))\nHANDLES(MODULE_6, \"InternalGetTypes\", ves_icall_System_Reflection_RuntimeModule_InternalGetTypes, MonoArray, 1, (MonoImage_ptr))\nHANDLES(MODULE_7, \"ResolveFieldToken\", ves_icall_System_Reflection_RuntimeModule_ResolveFieldToken, MonoClassField_ptr, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_8, \"ResolveMemberToken\", ves_icall_System_Reflection_RuntimeModule_ResolveMemberToken, MonoObject, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_9, \"ResolveMethodToken\", ves_icall_System_Reflection_RuntimeModule_ResolveMethodToken, MonoMethod_ptr, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_10, \"ResolveSignature\", ves_icall_System_Reflection_RuntimeModule_ResolveSignature, MonoArray, 3, (MonoImage_ptr, guint32, MonoResolveTokenError_ref))\nHANDLES(MODULE_11, \"ResolveStringToken\", ves_icall_System_Reflection_RuntimeModule_ResolveStringToken, MonoString, 3, (MonoImage_ptr, guint32, MonoResolveTokenError_ref))\nHANDLES(MODULE_12, \"ResolveTypeToken\", ves_icall_System_Reflection_RuntimeModule_ResolveTypeToken, MonoType_ptr, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_13, \"get_MetadataToken\", ves_icall_reflection_get_token, guint32, 1, (MonoObject))\n\nICALL_TYPE(PARAMI, \"System.Reflection.RuntimeParameterInfo\", MPARAMI_1)\nHANDLES_REUSE_WRAPPER(MPARAMI_1, \"GetMetadataToken\", ves_icall_reflection_get_token)\nHANDLES(MPARAMI_2, \"GetTypeModifiers\", ves_icall_RuntimeParameterInfo_GetTypeModifiers, MonoArray, 4, (MonoReflectionType, MonoObject, int, MonoBoolean))\n\nICALL_TYPE(MPROP, \"System.Reflection.RuntimePropertyInfo\", MPROP_1)\nHANDLES(MPROP_1, \"GetTypeModifiers\", ves_icall_RuntimePropertyInfo_GetTypeModifiers, MonoArray, 2, (MonoReflectionProperty, MonoBoolean))\nHANDLES(MPROP_2, \"get_default_value\", ves_icall_property_info_get_default_value, MonoObject, 1, (MonoReflectionProperty))\nHANDLES_REUSE_WRAPPER(MPROP_3, \"get_metadata_token\", ves_icall_reflection_get_token)\nHANDLES(MPROP_4, \"get_property_info\", ves_icall_RuntimePropertyInfo_get_property_info, void, 3, (MonoReflectionProperty, MonoPropertyInfo_ref, PInfo))\nHANDLES(MPROP_5, \"internal_from_handle_type\", ves_icall_System_Reflection_RuntimePropertyInfo_internal_from_handle_type, MonoReflectionProperty, 2, (MonoProperty_ptr, MonoType_ptr))\n\nICALL_TYPE(RUNH, \"System.Runtime.CompilerServices.RuntimeHelpers\", RUNH_1)\nHANDLES(RUNH_1, \"GetObjectValue\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetObjectValue, MonoObject, 1, (MonoObject))\nHANDLES(RUNH_2, \"GetUninitializedObjectInternal\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetUninitializedObjectInternal, MonoObject, 1, (MonoType_ptr))\nHANDLES(RUNH_3, \"InitializeArray\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray, void, 2, (MonoArray, MonoClassField_ptr))\nHANDLES(RUNH_7, \"InternalGetHashCode\", mono_object_hash_icall, int, 1, (MonoObject))\nHANDLES(RUNH_3a, \"PrepareMethod\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_PrepareMethod, void, 3, (MonoMethod_ptr, gpointer, int))\nHANDLES(RUNH_4, \"RunClassConstructor\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_RunClassConstructor, void, 1, (MonoType_ptr))\nHANDLES(RUNH_5, \"RunModuleConstructor\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_RunModuleConstructor, void, 1, (MonoImage_ptr))\nNOHANDLES(ICALL(RUNH_5h, \"SufficientExecutionStack\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_SufficientExecutionStack))\n\nICALL_TYPE(GCH, \"System.Runtime.InteropServices.GCHandle\", GCH_1)\nHANDLES(GCH_1, \"InternalAlloc\", ves_icall_System_GCHandle_InternalAlloc, gpointer, 2, (MonoObject, gint32))\nHANDLES(GCH_2, \"InternalFree\", ves_icall_System_GCHandle_InternalFree, void, 1, (gpointer))\nHANDLES(GCH_3, \"InternalGet\", ves_icall_System_GCHandle_InternalGet, MonoObject, 1, (gpointer))\nHANDLES(GCH_4, \"InternalSet\", ves_icall_System_GCHandle_InternalSet, void, 2, (gpointer, MonoObject))\n\nICALL_TYPE(MARSHAL, \"System.Runtime.InteropServices.Marshal\", MARSHAL_2)\nNOHANDLES(ICALL(MARSHAL_2, \"AllocCoTaskMem\", ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMem))\nNOHANDLES(ICALL(MARSHAL_3, \"AllocHGlobal\", ves_icall_System_Runtime_InteropServices_Marshal_AllocHGlobal))\nNOHANDLES(ICALL(MARSHAL_50, \"BufferToBSTR\", ves_icall_System_Runtime_InteropServices_Marshal_BufferToBSTR))\nHANDLES(MARSHAL_4, \"DestroyStructure\", ves_icall_System_Runtime_InteropServices_Marshal_DestroyStructure, void, 2, (gpointer, MonoReflectionType))\nNOHANDLES(ICALL(MARSHAL_5, \"FreeBSTR\", ves_icall_System_Runtime_InteropServices_Marshal_FreeBSTR))\nNOHANDLES(ICALL(MARSHAL_6, \"FreeCoTaskMem\", ves_icall_System_Runtime_InteropServices_Marshal_FreeCoTaskMem))\nNOHANDLES(ICALL(MARSHAL_7, \"FreeHGlobal\", ves_icall_System_Runtime_InteropServices_Marshal_FreeHGlobal))\nHANDLES(MARSHAL_9, \"GetDelegateForFunctionPointerInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetDelegateForFunctionPointerInternal, MonoDelegate, 2, (gpointer, MonoReflectionType))\nHANDLES(MARSHAL_10, \"GetFunctionPointerForDelegateInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetFunctionPointerForDelegateInternal, gpointer, 1, (MonoDelegate))\nNOHANDLES(ICALL(MARSHAL_11, \"GetLastWin32Error\", ves_icall_System_Runtime_InteropServices_Marshal_GetLastWin32Error))\nHANDLES(MARSHAL_48a, \"IsPinnableType\", ves_icall_System_Runtime_InteropServices_Marshal_IsPinnableType, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(MARSHAL_12, \"OffsetOf\", ves_icall_System_Runtime_InteropServices_Marshal_OffsetOf, int, 2, (MonoReflectionType, MonoString))\nHANDLES(MARSHAL_13, \"PrelinkInternal\", ves_icall_System_Runtime_InteropServices_Marshal_Prelink, void, 1, (MonoReflectionMethod))\nHANDLES(MARSHAL_17, \"PtrToStringBSTR\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringBSTR, MonoString, 1, (mono_bstr_const))\nHANDLES(MARSHAL_20, \"PtrToStructureInternal\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStructureInternal, void, 3, (gconstpointer, MonoObject, MonoBoolean))\nNOHANDLES(ICALL(MARSHAL_43, \"ReAllocCoTaskMem\", ves_icall_System_Runtime_InteropServices_Marshal_ReAllocCoTaskMem))\nNOHANDLES(ICALL(MARSHAL_23, \"ReAllocHGlobal\", ves_icall_System_Runtime_InteropServices_Marshal_ReAllocHGlobal))\nNOHANDLES(ICALL(MARSHAL_29a, \"SetLastWin32Error\", ves_icall_System_Runtime_InteropServices_Marshal_SetLastWin32Error))\nHANDLES(MARSHAL_30, \"SizeOf\", ves_icall_System_Runtime_InteropServices_Marshal_SizeOf, guint32, 1, (MonoReflectionType))\nHANDLES(MARSHAL_31, \"SizeOfHelper\", ves_icall_System_Runtime_InteropServices_Marshal_SizeOfHelper, guint32, 2, (MonoReflectionType, MonoBoolean))\nHANDLES(MARSHAL_34, \"StructureToPtr\", ves_icall_System_Runtime_InteropServices_Marshal_StructureToPtr, void, 3, (MonoObject, gpointer, MonoBoolean))\n\nICALL_TYPE(NATIVEL, \"System.Runtime.InteropServices.NativeLibrary\", NATIVEL_1)\nHANDLES(NATIVEL_1, \"FreeLib\", ves_icall_System_Runtime_InteropServices_NativeLibrary_FreeLib, void, 1, (gpointer))\nHANDLES(NATIVEL_2, \"GetSymbol\", ves_icall_System_Runtime_InteropServices_NativeLibrary_GetSymbol, gpointer, 3, (gpointer, MonoString, MonoBoolean))\nHANDLES(NATIVEL_3, \"LoadByName\", ves_icall_System_Runtime_InteropServices_NativeLibrary_LoadByName, gpointer, 5, (MonoString, MonoReflectionAssembly, MonoBoolean, guint32, MonoBoolean))\nHANDLES(NATIVEL_4, \"LoadFromPath\", ves_icall_System_Runtime_InteropServices_NativeLibrary_LoadFromPath, gpointer, 2, (MonoString, MonoBoolean))\n\nICALL_TYPE(ALC, \"System.Runtime.Loader.AssemblyLoadContext\", ALC_5)\nHANDLES(ALC_5, \"GetLoadContextForAssembly\", ves_icall_System_Runtime_Loader_AssemblyLoadContext_GetLoadContextForAssembly, gpointer, 1, (MonoReflectionAssembly))\nHANDLES(ALC_4, \"InternalGetLoadedAssemblies\", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalGetLoadedAssemblies, MonoArray, 0, ())\nHANDLES(ALC_2, \"InternalInitializeNativeALC\", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalInitializeNativeALC, gpointer, 3, (gpointer, MonoBoolean, MonoBoolean))\nHANDLES(ALC_1, \"InternalLoadFile\", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalLoadFile, MonoReflectionAssembly, 3, (gpointer, MonoString, MonoStackCrawlMark_ptr))\nHANDLES(ALC_3, \"InternalLoadFromStream\", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalLoadFromStream, MonoReflectionAssembly, 5, (gpointer, gpointer, gint32, gpointer, gint32))\n\nICALL_TYPE(RFH, \"System.RuntimeFieldHandle\", RFH_1)\nHANDLES(RFH_1, \"GetValueDirect\", ves_icall_System_RuntimeFieldHandle_GetValueDirect, MonoObject, 4, (MonoReflectionField, MonoReflectionType, MonoTypedRef_ptr, MonoReflectionType))\nHANDLES(RFH_1a, \"SetValueDirect\", ves_icall_System_RuntimeFieldHandle_SetValueDirect, void, 5, (MonoReflectionField, MonoReflectionType, MonoTypedRef_ptr, MonoObject, MonoReflectionType))\nHANDLES_REUSE_WRAPPER(RFH_2, \"SetValueInternal\", ves_icall_RuntimeFieldInfo_SetValueInternal)\n\nICALL_TYPE(MHAN, \"System.RuntimeMethodHandle\", MHAN_1)\nHANDLES(MHAN_1, \"GetFunctionPointer\", ves_icall_RuntimeMethodHandle_GetFunctionPointer, gpointer, 1, (MonoMethod_ptr))\n\nICALL_TYPE(RT, \"System.RuntimeType\", RT_1)\nHANDLES(RT_1, \"CreateInstanceInternal\", ves_icall_System_Activator_CreateInstanceInternal, MonoObject, 1, (MonoReflectionType))\nHANDLES(RT_2, \"GetConstructors_native\", ves_icall_RuntimeType_GetConstructors_native, GPtrArray_ptr, 2, (MonoReflectionType, guint32))\nHANDLES(RT_30, \"GetCorrespondingInflatedConstructor\", ves_icall_RuntimeType_GetCorrespondingInflatedMethod, MonoReflectionMethod, 2, (MonoReflectionType, MonoReflectionMethod))\nHANDLES_REUSE_WRAPPER(RT_31, \"GetCorrespondingInflatedMethod\", ves_icall_RuntimeType_GetCorrespondingInflatedMethod)\nHANDLES(RT_3, \"GetEvents_native\", ves_icall_RuntimeType_GetEvents_native, GPtrArray_ptr, 3, (MonoReflectionType, char_ptr, guint32))\nHANDLES(RT_5, \"GetFields_native\", ves_icall_RuntimeType_GetFields_native, GPtrArray_ptr, 4, (MonoReflectionType, char_ptr, guint32, guint32))\nHANDLES(RT_6, \"GetGenericArgumentsInternal\", ves_icall_RuntimeType_GetGenericArguments, MonoArray, 2, (MonoReflectionType, MonoBoolean))\nHANDLES(RT_9, \"GetGenericParameterPosition\", ves_icall_RuntimeType_GetGenericParameterPosition, gint32, 1, (MonoReflectionType))\nHANDLES(RT_10, \"GetInterfaceMapData\", ves_icall_RuntimeType_GetInterfaceMapData, void, 4, (MonoReflectionType, MonoReflectionType, MonoArrayOut, MonoArrayOut))\nHANDLES(RT_11, \"GetInterfaces\", ves_icall_RuntimeType_GetInterfaces, MonoArray, 1, (MonoReflectionType))\nHANDLES(RT_12, \"GetMethodsByName_native\", ves_icall_RuntimeType_GetMethodsByName_native, GPtrArray_ptr, 4, (MonoReflectionType, const_char_ptr, guint32, guint32))\nHANDLES(RT_13, \"GetNestedTypes_native\", ves_icall_RuntimeType_GetNestedTypes_native, GPtrArray_ptr, 4, (MonoReflectionType, char_ptr, guint32, guint32))\nHANDLES(RT_14, \"GetPacking\", ves_icall_RuntimeType_GetPacking, void, 3, (MonoReflectionType, guint32_ref, guint32_ref))\nHANDLES(RT_15, \"GetPropertiesByName_native\", ves_icall_RuntimeType_GetPropertiesByName_native, GPtrArray_ptr, 4, (MonoReflectionType, char_ptr, guint32, guint32))\nHANDLES(RT_17, \"MakeGenericType\", ves_icall_RuntimeType_MakeGenericType, MonoReflectionType, 2, (MonoReflectionType, MonoArray))\nHANDLES(RT_18, \"MakePointerType\", ves_icall_RuntimeType_MakePointerType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RT_19, \"getFullName\", ves_icall_System_RuntimeType_getFullName, MonoString, 3, (MonoReflectionType, MonoBoolean, MonoBoolean))\nHANDLES(RT_21, \"get_DeclaringMethod\", ves_icall_RuntimeType_get_DeclaringMethod, MonoReflectionMethod, 1, (MonoReflectionType))\nHANDLES(RT_22, \"get_DeclaringType\", ves_icall_RuntimeType_get_DeclaringType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RT_23, \"get_Name\", ves_icall_RuntimeType_get_Name, MonoString, 1, (MonoReflectionType))\nHANDLES(RT_24, \"get_Namespace\", ves_icall_RuntimeType_get_Namespace, MonoString, 1, (MonoReflectionType))\nHANDLES(RT_26, \"make_array_type\", ves_icall_RuntimeType_make_array_type, MonoReflectionType, 2, (MonoReflectionType, int))\nHANDLES(RT_27, \"make_byref_type\", ves_icall_RuntimeType_make_byref_type, MonoReflectionType, 1, (MonoReflectionType))\n\nICALL_TYPE(RTH, \"System.RuntimeTypeHandle\", RTH_1)\nHANDLES(RTH_1, \"GetArrayRank\", ves_icall_RuntimeTypeHandle_GetArrayRank, gint32, 1, (MonoReflectionType))\nHANDLES(RTH_2, \"GetAssembly\", ves_icall_RuntimeTypeHandle_GetAssembly, MonoReflectionAssembly, 1, (MonoReflectionType))\nHANDLES(RTH_3, \"GetAttributes\", ves_icall_RuntimeTypeHandle_GetAttributes, guint32, 1, (MonoReflectionType))\nHANDLES(RTH_4, \"GetBaseType\", ves_icall_RuntimeTypeHandle_GetBaseType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RTH_4a, \"GetCorElementType\", ves_icall_RuntimeTypeHandle_GetCorElementType, guint32, 1, (MonoReflectionType))\nHANDLES(RTH_5, \"GetElementType\", ves_icall_RuntimeTypeHandle_GetElementType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RTH_19, \"GetGenericParameterInfo\", ves_icall_RuntimeTypeHandle_GetGenericParameterInfo, MonoGenericParamInfo_ptr, 1, (MonoReflectionType))\nHANDLES(RTH_6, \"GetGenericTypeDefinition_impl\", ves_icall_RuntimeTypeHandle_GetGenericTypeDefinition_impl, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES_REUSE_WRAPPER(RTH_7, \"GetMetadataToken\", ves_icall_reflection_get_token)\nHANDLES(RTH_8, \"GetModule\", ves_icall_RuntimeTypeHandle_GetModule, MonoReflectionModule, 1, (MonoReflectionType))\nHANDLES(RTH_9, \"HasInstantiation\", ves_icall_RuntimeTypeHandle_HasInstantiation, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_20, \"HasReferences\", ves_icall_RuntimeTypeHandle_HasReferences, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_21, \"IsByRefLike\", ves_icall_RuntimeTypeHandle_IsByRefLike, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_12, \"IsComObject\", ves_icall_RuntimeTypeHandle_IsComObject, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_13, \"IsGenericTypeDefinition\", ves_icall_RuntimeTypeHandle_IsGenericTypeDefinition, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_14, \"IsGenericVariable\", ves_icall_RuntimeTypeHandle_IsGenericVariable, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_15, \"IsInstanceOfType\", ves_icall_RuntimeTypeHandle_IsInstanceOfType, guint32, 2, (MonoReflectionType, MonoObject))\n//HANDLES(RTH_17a, \"is_subclass_of\", ves_icall_RuntimeTypeHandle_is_subclass_of, MonoBoolean, 2, (MonoType_ptr, MonoType_ptr))\nHANDLES(RTH_17a, \"internal_from_name\", ves_icall_System_RuntimeTypeHandle_internal_from_name, MonoReflectionType, 6, (MonoString, MonoStackCrawlMark_ptr, MonoReflectionAssembly, MonoBoolean, MonoBoolean, MonoBoolean))\nNOHANDLES(ICALL(RTH_17b, \"is_subclass_of\", ves_icall_RuntimeTypeHandle_is_subclass_of))\nHANDLES(RTH_18, \"type_is_assignable_from\", ves_icall_RuntimeTypeHandle_type_is_assignable_from, guint32, 2, (MonoReflectionType, MonoReflectionType))\n\nICALL_TYPE(STRING, \"System.String\", STRING_1)\nNOHANDLES(ICALL(STRING_1, \".ctor(System.ReadOnlySpan`1<char>)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_1a, \".ctor(char*)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_2, \".ctor(char*,int,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_3, \".ctor(char,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_4, \".ctor(char[])\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_5, \".ctor(char[],int,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_6, \".ctor(sbyte*)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_7, \".ctor(sbyte*,int,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_8, \".ctor(sbyte*,int,int,System.Text.Encoding)\", ves_icall_System_String_ctor_RedirectToCreateString))\nHANDLES(STRING_9, \"FastAllocateString\", ves_icall_System_String_FastAllocateString, MonoString, 1, (gint32))\nHANDLES(STRING_10, \"InternalIntern\", ves_icall_System_String_InternalIntern, MonoString, 1, (MonoString))\nHANDLES(STRING_11, \"InternalIsInterned\", ves_icall_System_String_InternalIsInterned, MonoString, 1, (MonoString))\n\nICALL_TYPE(NATIVEC, \"System.Threading.EventWaitHandle\", EWH_1) // && Unix\nHANDLES(EWH_1, \"CreateEventInternal\", ves_icall_System_Threading_Events_CreateEvent_icall, gpointer, 5, (MonoBoolean, MonoBoolean, const_gunichar2_ptr, gint32, gint32_ref))\nNOHANDLES(ICALL(EWH_2, \"ResetEventInternal\",  ves_icall_System_Threading_Events_ResetEvent_internal))\nNOHANDLES(ICALL(EWH_3, \"SetEventInternal\",    ves_icall_System_Threading_Events_SetEvent_internal))\n\nICALL_TYPE(ILOCK, \"System.Threading.Interlocked\", ILOCK_1)\nNOHANDLES(ICALL(ILOCK_1, \"Add(int&,int)\", ves_icall_System_Threading_Interlocked_Add_Int))\nNOHANDLES(ICALL(ILOCK_2, \"Add(long&,long)\", ves_icall_System_Threading_Interlocked_Add_Long))\nNOHANDLES(ICALL(ILOCK_4, \"CompareExchange(double&,double,double)\", ves_icall_System_Threading_Interlocked_CompareExchange_Double))\nNOHANDLES(ICALL(ILOCK_5, \"CompareExchange(int&,int,int)\", ves_icall_System_Threading_Interlocked_CompareExchange_Int))\nNOHANDLES(ICALL(ILOCK_6, \"CompareExchange(int&,int,int,bool&)\", ves_icall_System_Threading_Interlocked_CompareExchange_Int_Success))\nNOHANDLES(ICALL(ILOCK_7, \"CompareExchange(intptr&,intptr,intptr)\", ves_icall_System_Threading_Interlocked_CompareExchange_IntPtr))\nNOHANDLES(ICALL(ILOCK_8, \"CompareExchange(long&,long,long)\", ves_icall_System_Threading_Interlocked_CompareExchange_Long))\nNOHANDLES(ICALL(ILOCK_9, \"CompareExchange(object&,object&,object&,object&)\", ves_icall_System_Threading_Interlocked_CompareExchange_Object))\nNOHANDLES(ICALL(ILOCK_10, \"CompareExchange(single&,single,single)\", ves_icall_System_Threading_Interlocked_CompareExchange_Single))\nNOHANDLES(ICALL(ILOCK_11, \"Decrement(int&)\", ves_icall_System_Threading_Interlocked_Decrement_Int))\nNOHANDLES(ICALL(ILOCK_12, \"Decrement(long&)\", ves_icall_System_Threading_Interlocked_Decrement_Long))\nNOHANDLES(ICALL(ILOCK_14, \"Exchange(double&,double)\", ves_icall_System_Threading_Interlocked_Exchange_Double))\nNOHANDLES(ICALL(ILOCK_15, \"Exchange(int&,int)\", ves_icall_System_Threading_Interlocked_Exchange_Int))\nNOHANDLES(ICALL(ILOCK_16, \"Exchange(intptr&,intptr)\", ves_icall_System_Threading_Interlocked_Exchange_IntPtr))\nNOHANDLES(ICALL(ILOCK_17, \"Exchange(long&,long)\", ves_icall_System_Threading_Interlocked_Exchange_Long))\nNOHANDLES(ICALL(ILOCK_18, \"Exchange(object&,object&,object&)\", ves_icall_System_Threading_Interlocked_Exchange_Object))\nNOHANDLES(ICALL(ILOCK_19, \"Exchange(single&,single)\", ves_icall_System_Threading_Interlocked_Exchange_Single))\nNOHANDLES(ICALL(ILOCK_20, \"Increment(int&)\", ves_icall_System_Threading_Interlocked_Increment_Int))\nNOHANDLES(ICALL(ILOCK_21, \"Increment(long&)\", ves_icall_System_Threading_Interlocked_Increment_Long))\nNOHANDLES(ICALL(ILOCK_22, \"MemoryBarrierProcessWide\", ves_icall_System_Threading_Interlocked_MemoryBarrierProcessWide))\nNOHANDLES(ICALL(ILOCK_23, \"Read(long&)\", ves_icall_System_Threading_Interlocked_Read_Long))\n\nICALL_TYPE(MONIT, \"System.Threading.Monitor\", MONIT_0)\nHANDLES(MONIT_0, \"Enter\", ves_icall_System_Threading_Monitor_Monitor_Enter, void, 1, (MonoObject))\nHANDLES(MONIT_1, \"Exit\", mono_monitor_exit_icall, void, 1, (MonoObject))\nHANDLES(MONIT_2, \"Monitor_pulse\", ves_icall_System_Threading_Monitor_Monitor_pulse, void, 1, (MonoObject))\nHANDLES(MONIT_3, \"Monitor_pulse_all\", ves_icall_System_Threading_Monitor_Monitor_pulse_all, void, 1, (MonoObject))\nHANDLES(MONIT_4, \"Monitor_test_owner\", ves_icall_System_Threading_Monitor_Monitor_test_owner, MonoBoolean, 1, (MonoObject))\nHANDLES(MONIT_5, \"Monitor_test_synchronised\", ves_icall_System_Threading_Monitor_Monitor_test_synchronised, MonoBoolean, 1, (MonoObject))\nHANDLES(MONIT_7, \"Monitor_wait\", ves_icall_System_Threading_Monitor_Monitor_wait, MonoBoolean, 3, (MonoObject, guint32, MonoBoolean))\nNOHANDLES(ICALL(MONIT_8, \"get_LockContentionCount\", ves_icall_System_Threading_Monitor_Monitor_LockContentionCount))\nHANDLES(MONIT_9, \"try_enter_with_atomic_var\", ves_icall_System_Threading_Monitor_Monitor_try_enter_with_atomic_var, void, 4, (MonoObject, guint32, MonoBoolean, MonoBoolean_ref))\n\nICALL_TYPE(MUTEX, \"System.Threading.Mutex\", MUTEX_1)\nHANDLES(MUTEX_1, \"CreateMutex_icall\", ves_icall_System_Threading_Mutex_CreateMutex_icall, gpointer, 4, (MonoBoolean, const_gunichar2_ptr, gint32, MonoBoolean_ref))\nHANDLES(MUTEX_2, \"OpenMutex_icall\", ves_icall_System_Threading_Mutex_OpenMutex_icall, gpointer, 4, (const_gunichar2_ptr, gint32, gint32, gint32_ref))\nNOHANDLES(ICALL(MUTEX_3, \"ReleaseMutex_internal\", ves_icall_System_Threading_Mutex_ReleaseMutex_internal))\n\nICALL_TYPE(SEMA, \"System.Threading.Semaphore\", SEMA_1)\nNOHANDLES(ICALL(SEMA_1, \"CreateSemaphore_icall\", ves_icall_System_Threading_Semaphore_CreateSemaphore_icall))\nNOHANDLES(ICALL(SEMA_2, \"OpenSemaphore_icall\", ves_icall_System_Threading_Semaphore_OpenSemaphore_icall))\nNOHANDLES(ICALL(SEMA_3, \"ReleaseSemaphore_internal\", ves_icall_System_Threading_Semaphore_ReleaseSemaphore_internal))\n\nICALL_TYPE(THREAD, \"System.Threading.Thread\", THREAD_1)\nHANDLES(THREAD_1, \"ClrState\", ves_icall_System_Threading_Thread_ClrState, void, 2, (MonoInternalThread, guint32))\nHANDLES(ITHREAD_2, \"FreeInternal\", ves_icall_System_Threading_InternalThread_Thread_free_internal, void, 1, (MonoInternalThread))\nHANDLES(THREAD_15, \"GetCurrentOSThreadId\", ves_icall_System_Threading_Thread_GetCurrentOSThreadId, guint64, 0, ())\nHANDLES(THREAD_16, \"GetCurrentProcessorNumber\", ves_icall_System_Threading_Thread_GetCurrentProcessorNumber, gint32, 0, ())\nHANDLES(THREAD_3, \"GetState\", ves_icall_System_Threading_Thread_GetState, guint32, 1, (MonoInternalThread))\nHANDLES(THREAD_4, \"InitInternal\", ves_icall_System_Threading_Thread_InitInternal, void, 1, (MonoThreadObject))\nNOHANDLES(ICALL(THREAD_5, \"InitializeCurrentThread_icall\", ves_icall_System_Threading_Thread_GetCurrentThread))\nHANDLES(THREAD_6, \"InterruptInternal\", ves_icall_System_Threading_Thread_Interrupt_internal, void, 1, (MonoThreadObject))\nHANDLES(THREAD_7, \"JoinInternal\", ves_icall_System_Threading_Thread_Join_internal, MonoBoolean, 2, (MonoThreadObject, int))\nHANDLES(THREAD_8, \"SetName_icall\", ves_icall_System_Threading_Thread_SetName_icall, void, 3, (MonoInternalThread, const_gunichar2_ptr, gint32))\nHANDLES(THREAD_9, \"SetPriority\", ves_icall_System_Threading_Thread_SetPriority, void, 2, (MonoThreadObject, int))\nHANDLES(THREAD_10, \"SetState\", ves_icall_System_Threading_Thread_SetState, void, 2, (MonoInternalThread, guint32))\nHANDLES(THREAD_11, \"SleepInternal\", ves_icall_System_Threading_Thread_Sleep_internal, void, 2, (gint32, MonoBoolean))\nHANDLES(THREAD_13, \"StartInternal\", ves_icall_System_Threading_Thread_StartInternal, void, 1, (MonoThreadObject))\nNOHANDLES(ICALL(THREAD_14, \"YieldInternal\", ves_icall_System_Threading_Thread_YieldInternal))\n\nICALL_TYPE(WAITH, \"System.Threading.WaitHandle\", WAITH_1)\nHANDLES(WAITH_1, \"SignalAndWait_Internal\", ves_icall_System_Threading_WaitHandle_SignalAndWait_Internal, gint32, 3, (gpointer, gpointer, gint32))\nHANDLES(WAITH_2, \"Wait_internal\", ves_icall_System_Threading_WaitHandle_Wait_internal, gint32, 4, (gpointer_ptr, gint32, MonoBoolean, gint32))\n\nICALL_TYPE(TYPE, \"System.Type\", TYPE_1)\nHANDLES(TYPE_1, \"internal_from_handle\", ves_icall_System_Type_internal_from_handle, MonoReflectionType, 1, (MonoType_ref))\n\nICALL_TYPE(TYPEDR, \"System.TypedReference\", TYPEDR_1)\nHANDLES(TYPEDR_1, \"InternalMakeTypedReference\", ves_icall_System_TypedReference_InternalMakeTypedReference, void, 4, (MonoTypedRef_ptr, MonoObject, MonoArray, MonoReflectionType))\nHANDLES(TYPEDR_2, \"InternalToObject\", ves_icall_System_TypedReference_ToObject, MonoObject, 1, (MonoTypedRef_ptr))\n\nICALL_TYPE(VALUET, \"System.ValueType\", VALUET_1)\nHANDLES(VALUET_1, \"InternalEquals\", ves_icall_System_ValueType_Equals, MonoBoolean, 3, (MonoObject, MonoObject, MonoArrayOut))\nHANDLES(VALUET_2, \"InternalGetHashCode\", ves_icall_System_ValueType_InternalGetHashCode, gint32, 2, (MonoObject, MonoArrayOut))\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-def.h",
    "content": "/**\n * \\file\n * This file contains the default set of the mono internal calls.\n * Each type that has internal call methods must be declared here\n * with the ICALL_TYPE macro as follows:\n *\n * \tICALL_TYPE(typeid, typename, first_icall_id)\n *\n * typeid must be a C symbol name unique to the type, don't worry about namespace\n * \tpollution, since it will be automatically prefixed to avoid it.\n * typename is a C string containing the full name of the type\n * first_icall_id is the symbol ID of the first internal call of the declared\n * \ttype (see below)\n *\n * The list of internal calls of the methods of a type must follow the\n * type declaration. Each internal call is defined by the following macro:\n *\n * \tICALL(icallid, methodname, cfuncptr)\n *\n * icallid must be a C symbol, unique for each icall defined in this file and\n * typically equal to the typeid + '_' + a sequential number.\n * methodname is a C string defining the method name and the optional signature\n * (the signature is required only when several internal calls in the type\n * have the same name)\n * cfuncptr is the C function that implements the internal call. Note that this\n * file is included at the end of metadata/icall.c, so the C function must be\n * visible to the compiler there.\n *\n * *** Adding a new internal call ***\n * Remember that ICALL_TYPE declarations must be kept sorted wrt each other\n * ICALL_TYPE declaration. The same happens for ICALL declarations, but only\n * limited to the icall list of each type. The sorting is based on the type or\n * method name.\n * When adding a new icall, make sure it is inserted correctly in the list and\n * that it defines a unique ID. ID are currently numbered and ordered, but if\n * you need to insert a method in the middle, don't bother renaming all the symbols.\n * Remember to change also the first_icall_id argument in the ICALL_TYPE\n * declaration if you add a new icall at the beginning of a type's icall list.\n *\n *\n * *** (Experimental) Cooperative GC support via Handles and MonoError ***\n * An icall can use the coop GC handles infrastructure from handles.h to avoid some\n * boilerplate when manipulating managed objects from runtime code and to use MonoError for\n * threading exceptions out to managed callerrs:\n *\n * HANDLES(icallid, methodname, cfuncptr, return-type, number-of-parameters, (parameter-types))\n * types:\n *   managed types are just MonoObject, MonoString, etc. `*` and Handle prefix are appended automatically.\n *   Types must be single identifiers, and be handled in icall-table.h.\n *   MonoError is added to the list automatically.\n *   A function with no parameters is \"0, ()\"\n *   \"Out\" and \"InOut\" types are appended with \"Out\" and \"InOut\". In is assumed.\n *   Out and InOut raw pointers get \"**\" appended. In gets just \"*\".\n *   Out/InOut only applied to managed pointers/handles.\n *   Things like \"int*\" are supported by typedefs like \"typedef int *int_ptr\".\n *   \"void*\" and \"HANDLE\" are written \"gpointer\".\n *   The list of available types is in icall-table.h.\n *   Using a type not there errors unceremoniously.\n *\n * An icall with a HANDLES() declaration wrapped around it will have a generated wrapper\n * that:\n *   (1) Updates the coop handle stack on entry and exit\n *   (2) Call the cfuncptr with a new signature:\n *     (a) All managed object reference in arguments will be wrapped in a type-unsafe handle\n *         (i.e., MonoString* becomes struct { MonoString* raw }* aka MonoRawHandle*)\n *     (b) the same for the return value (MonoObject* return becomes MonoObjectHandle)\n *     (c) An additional final argument is added of type MonoError*\n *     example:    class object {\n *                     [MethodImplOptions(InternalCall)]\n *                     String some_icall (object[] x);\n *                 }\n *     should be implemented as:\n *        MonoStringHandle some_icall (MonoObjectHandle this_handle, MonoArrayHandle x_handle, MonoError *error);\n *   (3) The wrapper will automatically call mono_error_set_pending_exception (error) and raise the resulting exception.\n * Note:  valuetypes use the same calling convention as normal.\n *\n * HANDLES() wrappers are generated dynamically by marshal-ilgen.c, using metadata to see types, producing type-unsafe handles (void*).\n * HANDLES() additional small wrappers are generated statically by icall-table.h, using the signatures here, producing\n * type-safe handles, i.e. MonoString* => MonoRawHandle* => struct { MonoString** raw }.\n *\n */\n\n//\n// _ref means marshal-ilgen.c created a handle for an interior pointer.\n// _ptr means marshal-ilgen.c passed the parameter through unchanged.\n// At the C level, they are the same.\n//\n// If the C# managed declaration for an icall, with 7 parameters, is:\n// \tobject your_internal_call (int x, object y, ref int z, IntPtr p, ref MyStruct c, ref MyClass, out string s);\n//\n// you should write:\n// \tHANDLES(ID_n, \"your_internal_call\", \"ves_icall_your_internal_call\", MonoObject, 7, (gint32, MonoObject, gint32_ref, gpointer, MyStruct_ref, MyClassInOut, MonoStringOut))\n//\n// 7 is the number of parameters, the length of the last macro parameter.\n// IntPtr is unchecked. You could also say gsize or gssize.\n//\n// and marshal-ilgen.c will generate a call to\n// \tMonoRawHandle* ves_icall_your_internal_call_raw (gint32, MonoRawHandle*, gint32*, gpointer, MyStruct*, MonoRawHandle*, MonoRawHandle*);\n//\n// whose body will be generated by the HANDLES() macro, and which will call the following function that you have to implement:\n// \tMonoObjectHandle ves_icall_your_internal_call (gint32, MonoObjectHandle, gint32*, gpointer, MyStruct*, MyClassHandleInOut, MonoStringOut, MonoError *error);\n//\n// Note the extra MonoError* argument.\n// Note that \"ref\" becomes \"HandleInOut\" for managed types.\n// \"_ref\" becomes \"*\" for unmanaged types.\n// \"_out\" becomes \"HandleOut\" or \"*\".\n// \"HandleIn\" is the default for managed types, and is just called \"Handle\".\n//\n\n#if ENABLE_NETCORE\n#include \"icall-def-netcore.h\"\n#else\n\nICALL_TYPE(CLR_INTEROP_SYS, \"Interop/Sys\", CLR_INTEROP_SYS_1)\nNOHANDLES(ICALL(CLR_INTEROP_SYS_1, \"DoubleToString\", ves_icall_Interop_Sys_DoubleToString))\n\nICALL_TYPE(NATIVEMETHODS, \"Microsoft.Win32.NativeMethods\", NATIVEMETHODS_1)\nNOHANDLES(ICALL(NATIVEMETHODS_1, \"CloseProcess\", ves_icall_Microsoft_Win32_NativeMethods_CloseProcess))\nNOHANDLES(ICALL(NATIVEMETHODS_2, \"GetCurrentProcess\", ves_icall_Microsoft_Win32_NativeMethods_GetCurrentProcess))\nNOHANDLES(ICALL(NATIVEMETHODS_3, \"GetCurrentProcessId\", ves_icall_Microsoft_Win32_NativeMethods_GetCurrentProcessId))\nNOHANDLES(ICALL(NATIVEMETHODS_4, \"GetExitCodeProcess\", ves_icall_Microsoft_Win32_NativeMethods_GetExitCodeProcess))\nNOHANDLES(ICALL(NATIVEMETHODS_5, \"GetPriorityClass\", ves_icall_Microsoft_Win32_NativeMethods_GetPriorityClass))\nNOHANDLES(ICALL(NATIVEMETHODS_6, \"GetProcessTimes\", ves_icall_Microsoft_Win32_NativeMethods_GetProcessTimes))\nNOHANDLES(ICALL(NATIVEMETHODS_7, \"GetProcessWorkingSetSize\", ves_icall_Microsoft_Win32_NativeMethods_GetProcessWorkingSetSize))\nNOHANDLES(ICALL(NATIVEMETHODS_8, \"SetPriorityClass\", ves_icall_Microsoft_Win32_NativeMethods_SetPriorityClass))\nNOHANDLES(ICALL(NATIVEMETHODS_9, \"SetProcessWorkingSetSize\", ves_icall_Microsoft_Win32_NativeMethods_SetProcessWorkingSetSize))\nNOHANDLES(ICALL(NATIVEMETHODS_10, \"TerminateProcess\", ves_icall_Microsoft_Win32_NativeMethods_TerminateProcess))\nNOHANDLES(ICALL(NATIVEMETHODS_11, \"WaitForInputIdle\", ves_icall_Microsoft_Win32_NativeMethods_WaitForInputIdle))\n\n#ifndef DISABLE_COM\nICALL_TYPE(COMPROX, \"Mono.Interop.ComInteropProxy\", COMPROX_1)\nNOHANDLES(ICALL(COMPROX_1, \"AddProxy\", ves_icall_Mono_Interop_ComInteropProxy_AddProxy))\nNOHANDLES(ICALL(COMPROX_2, \"FindProxy\", ves_icall_Mono_Interop_ComInteropProxy_FindProxy))\n#endif\n\nICALL_TYPE(TLS_PROVIDER_FACTORY, \"Mono.Net.Security.MonoTlsProviderFactory\", TLS_PROVIDER_FACTORY_1)\nNOHANDLES(ICALL(TLS_PROVIDER_FACTORY_1, \"IsBtlsSupported\", ves_icall_Mono_TlsProviderFactory_IsBtlsSupported))\n\nICALL_TYPE(RUNTIME, \"Mono.Runtime\", RUNTIME_20)\nNOHANDLES(ICALL(RUNTIME_20, \"AnnotateMicrosoftTelemetry_internal\", ves_icall_Mono_Runtime_AnnotateMicrosoftTelemetry))\nNOHANDLES(ICALL(RUNTIME_19, \"CheckCrashReportLog_internal\", ves_icall_Mono_Runtime_CheckCrashReportingLog))\nNOHANDLES(ICALL(RUNTIME_1, \"DisableMicrosoftTelemetry\", ves_icall_Mono_Runtime_DisableMicrosoftTelemetry))\nHANDLES(RUNTIME_15, \"DumpStateSingle_internal\", ves_icall_Mono_Runtime_DumpStateSingle, MonoString, 2, (guint64_ref, guint64_ref))\nHANDLES(RUNTIME_16, \"DumpStateTotal_internal\", ves_icall_Mono_Runtime_DumpStateTotal, MonoString, 2, (guint64_ref, guint64_ref))\nNOHANDLES(ICALL(RUNTIME_18, \"EnableCrashReportLog_internal\", ves_icall_Mono_Runtime_EnableCrashReportingLog))\nHANDLES(RUNTIME_2, \"EnableMicrosoftTelemetry_internal\", ves_icall_Mono_Runtime_EnableMicrosoftTelemetry, void, 6, (const_char_ptr, const_char_ptr, const_char_ptr, const_char_ptr, const_char_ptr, const_char_ptr))\nHANDLES(RUNTIME_3, \"ExceptionToState_internal\", ves_icall_Mono_Runtime_ExceptionToState, MonoString, 3, (MonoException, guint64_ref, guint64_ref))\nHANDLES(RUNTIME_4, \"GetDisplayName\", ves_icall_Mono_Runtime_GetDisplayName, MonoString, 0, ())\nHANDLES(RUNTIME_12, \"GetNativeStackTrace\", ves_icall_Mono_Runtime_GetNativeStackTrace, MonoString, 1, (MonoException))\nNOHANDLES(ICALL(RUNTIME_21, \"RegisterReportingForAllNativeLibs_internal\", ves_icall_Mono_Runtime_RegisterReportingForAllNativeLibs))\nNOHANDLES(ICALL(RUNTIME_17, \"RegisterReportingForNativeLib_internal\", ves_icall_Mono_Runtime_RegisterReportingForNativeLib))\nHANDLES(RUNTIME_13, \"SendMicrosoftTelemetry_internal\", ves_icall_Mono_Runtime_SendMicrosoftTelemetry, void, 3, (const_char_ptr, guint64, guint64))\nHANDLES(RUNTIME_14, \"WriteStateToFile_internal\", ves_icall_Mono_Runtime_DumpTelemetry, void, 3, (const_char_ptr, guint64, guint64))\n\nICALL_TYPE(RTCLASS, \"Mono.RuntimeClassHandle\", RTCLASS_1)\nNOHANDLES(ICALL(RTCLASS_1, \"GetTypeFromClass\", ves_icall_Mono_RuntimeClassHandle_GetTypeFromClass))\n\nICALL_TYPE(RTPTRARRAY, \"Mono.RuntimeGPtrArrayHandle\", RTPTRARRAY_1)\nNOHANDLES(ICALL(RTPTRARRAY_1, \"GPtrArrayFree\", ves_icall_Mono_RuntimeGPtrArrayHandle_GPtrArrayFree))\n\nICALL_TYPE(RTMARSHAL, \"Mono.RuntimeMarshal\", RTMARSHAL_1)\nNOHANDLES(ICALL(RTMARSHAL_1, \"FreeAssemblyName\", ves_icall_Mono_RuntimeMarshal_FreeAssemblyName))\n\nICALL_TYPE(SAFESTRMARSHAL, \"Mono.SafeStringMarshal\", SAFESTRMARSHAL_1)\nNOHANDLES(ICALL(SAFESTRMARSHAL_1, \"GFree\", ves_icall_Mono_SafeStringMarshal_GFree))\nNOHANDLES(ICALL(SAFESTRMARSHAL_2, \"StringToUtf8_icall\", ves_icall_Mono_SafeStringMarshal_StringToUtf8))\n\n#ifndef PLATFORM_RO_FS\nICALL_TYPE(KPAIR, \"Mono.Security.Cryptography.KeyPairPersistence\", KPAIR_1)\nNOHANDLES(ICALL(KPAIR_1, \"_CanSecure\", ves_icall_Mono_Security_Cryptography_KeyPairPersistence_CanSecure))\nNOHANDLES(ICALL(KPAIR_2, \"_IsMachineProtected\", ves_icall_Mono_Security_Cryptography_KeyPairPersistence_IsMachineProtected))\nNOHANDLES(ICALL(KPAIR_3, \"_IsUserProtected\", ves_icall_Mono_Security_Cryptography_KeyPairPersistence_IsUserProtected))\nNOHANDLES(ICALL(KPAIR_4, \"_ProtectMachine\", ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine))\nNOHANDLES(ICALL(KPAIR_5, \"_ProtectUser\", ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser))\n#endif /* !PLATFORM_RO_FS */\n\nICALL_TYPE(APPDOM, \"System.AppDomain\", APPDOM_23)\nHANDLES(APPDOM_23, \"DoUnhandledException\", ves_icall_System_AppDomain_DoUnhandledException, void, 2, (MonoAppDomain, MonoException))\nHANDLES(APPDOM_1, \"ExecuteAssembly\", ves_icall_System_AppDomain_ExecuteAssembly, gint32, 3, (MonoAppDomain, MonoReflectionAssembly, MonoArray))\nHANDLES(APPDOM_2, \"GetAssemblies\", ves_icall_System_AppDomain_GetAssemblies, MonoArray, 2, (MonoAppDomain, MonoBoolean))\nHANDLES(APPDOM_3, \"GetData\", ves_icall_System_AppDomain_GetData, MonoObject, 2, (MonoAppDomain, MonoString))\nHANDLES(APPDOM_4, \"InternalGetContext\", ves_icall_System_AppDomain_InternalGetContext, MonoAppContext, 0, ())\nHANDLES(APPDOM_5, \"InternalGetDefaultContext\", ves_icall_System_AppDomain_InternalGetDefaultContext, MonoAppContext, 0, ())\nHANDLES(APPDOM_6, \"InternalGetProcessGuid\", ves_icall_System_AppDomain_InternalGetProcessGuid, MonoString, 1, (MonoString))\nHANDLES(APPDOM_7, \"InternalIsFinalizingForUnload\", ves_icall_System_AppDomain_InternalIsFinalizingForUnload, MonoBoolean, 1, (gint32))\nHANDLES(APPDOM_8, \"InternalPopDomainRef\", ves_icall_System_AppDomain_InternalPopDomainRef, void, 0, ())\nHANDLES(APPDOM_9, \"InternalPushDomainRef\", ves_icall_System_AppDomain_InternalPushDomainRef, void, 1, (MonoAppDomain))\nHANDLES(APPDOM_10, \"InternalPushDomainRefByID\", ves_icall_System_AppDomain_InternalPushDomainRefByID, void, 1, (gint32))\nHANDLES(APPDOM_11, \"InternalSetContext\", ves_icall_System_AppDomain_InternalSetContext, MonoAppContext, 1, (MonoAppContext))\nHANDLES(APPDOM_12, \"InternalSetDomain\", ves_icall_System_AppDomain_InternalSetDomain, MonoAppDomain, 1, (MonoAppDomain))\nHANDLES(APPDOM_13, \"InternalSetDomainByID\", ves_icall_System_AppDomain_InternalSetDomainByID, MonoAppDomain, 1, (gint32))\nHANDLES(APPDOM_14, \"InternalUnload\", ves_icall_System_AppDomain_InternalUnload, void, 1, (gint32))\nHANDLES(APPDOM_15, \"LoadAssembly\",    ves_icall_System_AppDomain_LoadAssembly, MonoReflectionAssembly, 5, (MonoAppDomain, MonoString, MonoObject, MonoBoolean, MonoStackCrawlMark_ptr))\nHANDLES(APPDOM_16, \"LoadAssemblyRaw\", ves_icall_System_AppDomain_LoadAssemblyRaw, MonoReflectionAssembly, 5, (MonoAppDomain, MonoArray, MonoArray, MonoObject, MonoBoolean))\nHANDLES(APPDOM_17, \"SetData\", ves_icall_System_AppDomain_SetData, void, 3, (MonoAppDomain, MonoString, MonoObject))\nHANDLES(APPDOM_18, \"createDomain\", ves_icall_System_AppDomain_createDomain, MonoAppDomain, 2, (MonoString, MonoAppDomainSetup))\nHANDLES(APPDOM_19, \"getCurDomain\", ves_icall_System_AppDomain_getCurDomain, MonoAppDomain, 0, ())\nHANDLES(APPDOM_20, \"getFriendlyName\", ves_icall_System_AppDomain_getFriendlyName, MonoString, 1, (MonoAppDomain))\nHANDLES(APPDOM_21, \"getRootDomain\", ves_icall_System_AppDomain_getRootDomain, MonoAppDomain, 0, ())\nHANDLES(APPDOM_22, \"getSetup\", ves_icall_System_AppDomain_getSetup, MonoAppDomainSetup, 1, (MonoAppDomain))\n\nICALL_TYPE(ARGI, \"System.ArgIterator\", ARGI_1)\nNOHANDLES(ICALL(ARGI_1, \"IntGetNextArg\",         ves_icall_System_ArgIterator_IntGetNextArg))\nNOHANDLES(ICALL(ARGI_2, \"IntGetNextArgType\",     ves_icall_System_ArgIterator_IntGetNextArgType))\nNOHANDLES(ICALL(ARGI_3, \"IntGetNextArgWithType\", ves_icall_System_ArgIterator_IntGetNextArgWithType))\nNOHANDLES(ICALL(ARGI_4, \"Setup\",                 ves_icall_System_ArgIterator_Setup))\n\nICALL_TYPE(ARRAY, \"System.Array\", ARRAY_1)\nHANDLES(ARRAY_1, \"ClearInternal\", ves_icall_System_Array_ClearInternal, void, 3, (MonoArray, int, int))\nHANDLES(ARRAY_3, \"CreateInstanceImpl\",   ves_icall_System_Array_CreateInstanceImpl, MonoArray, 3, (MonoReflectionType, MonoArray, MonoArray))\nHANDLES(ARRAY_4, \"FastCopy\",         ves_icall_System_Array_FastCopy, MonoBoolean, 5, (MonoArray, int, MonoArray, int, int))\nNOHANDLES(ICALL(ARRAY_5, \"GetGenericValue_icall\", ves_icall_System_Array_GetGenericValue_icall))\nHANDLES(ARRAY_6, \"GetLength\",        ves_icall_System_Array_GetLength, gint32, 2, (MonoArray, gint32))\nHANDLES(ARRAY_15, \"GetLongLength\",   ves_icall_System_Array_GetLongLength, gint64, 2, (MonoArray, gint32))\nHANDLES(ARRAY_7, \"GetLowerBound\",    ves_icall_System_Array_GetLowerBound, gint32, 2, (MonoArray, gint32))\nHANDLES(ARRAY_8, \"GetRank\",          ves_icall_System_Array_GetRank, gint32, 1, (MonoObject))\nHANDLES(ARRAY_9, \"GetValue\",         ves_icall_System_Array_GetValue, MonoObject, 2, (MonoArray, MonoArray))\nHANDLES(ARRAY_10, \"GetValueImpl\",    ves_icall_System_Array_GetValueImpl, MonoObject, 2, (MonoArray, guint32))\nNOHANDLES(ICALL(ARRAY_11, \"SetGenericValue_icall\", ves_icall_System_Array_SetGenericValue_icall))\nHANDLES(ARRAY_12, \"SetValue\",         ves_icall_System_Array_SetValue, void, 3, (MonoArray, MonoObject, MonoArray))\nHANDLES(ARRAY_13, \"SetValueImpl\",  ves_icall_System_Array_SetValueImpl, void, 3, (MonoArray, MonoObject, guint32))\n\nICALL_TYPE(BUFFER, \"System.Buffer\", BUFFER_1)\nHANDLES(BUFFER_1, \"InternalBlockCopy\", ves_icall_System_Buffer_BlockCopyInternal, MonoBoolean, 5, (MonoArray, gint32, MonoArray, gint32, gint32))\nNOHANDLES(ICALL(BUFFER_5, \"InternalMemcpy\", ves_icall_System_Buffer_MemcpyInternal))\nHANDLES(BUFFER_2, \"_ByteLength\", ves_icall_System_Buffer_ByteLengthInternal, gint32, 1, (MonoArray))\n\nICALL_TYPE(CLRCONFIG, \"System.CLRConfig\", CLRCONFIG_1)\nHANDLES(CLRCONFIG_1, \"CheckThrowUnobservedTaskExceptions\", ves_icall_System_CLRConfig_CheckThrowUnobservedTaskExceptions, MonoBoolean, 0, ())\n\nICALL_TYPE(DEFAULTC, \"System.Configuration.DefaultConfig\", DEFAULTC_1)\nHANDLES(DEFAULTC_1, \"get_bundled_machine_config\", ves_icall_System_Configuration_DefaultConfig_get_bundled_machine_config, MonoString, 0, ())\nHANDLES(DEFAULTC_2, \"get_machine_config_path\", ves_icall_System_Configuration_DefaultConfig_get_machine_config_path, MonoString, 0, ())\n\n/* Note that the below icall shares the same function as DefaultConfig uses */\nICALL_TYPE(INTCFGHOST, \"System.Configuration.InternalConfigurationHost\", INTCFGHOST_1)\nHANDLES(INTCFGHOST_1, \"get_bundled_app_config\", ves_icall_System_Configuration_InternalConfigurationHost_get_bundled_app_config, MonoString, 0, ())\nHANDLES(INTCFGHOST_2, \"get_bundled_machine_config\", ves_icall_System_Configuration_InternalConfigurationHost_get_bundled_machine_config, MonoString, 0, ())\n\nICALL_TYPE(CONSOLE, \"System.ConsoleDriver\", CONSOLE_1)\nHANDLES(CONSOLE_1, \"InternalKeyAvailable\", ves_icall_System_ConsoleDriver_InternalKeyAvailable, gint32, 1, (gint32))\nHANDLES(CONSOLE_2, \"Isatty\", ves_icall_System_ConsoleDriver_Isatty, MonoBoolean, 1, (gpointer/*HANDLE*/))\nHANDLES(CONSOLE_3, \"SetBreak\", ves_icall_System_ConsoleDriver_SetBreak, MonoBoolean, 1, (MonoBoolean))\nHANDLES(CONSOLE_4, \"SetEcho\", ves_icall_System_ConsoleDriver_SetEcho, MonoBoolean, 1, (MonoBoolean))\nHANDLES(CONSOLE_5, \"TtySetup\", ves_icall_System_ConsoleDriver_TtySetup, MonoBoolean, 4, (MonoString, MonoString, MonoArrayOut, int_ptr_ref))\n\nICALL_TYPE(DTIME, \"System.DateTime\", DTIME_1)\nNOHANDLES(ICALL(DTIME_1, \"GetSystemTimeAsFileTime\", ves_icall_System_DateTime_GetSystemTimeAsFileTime))\n\nICALL_TYPE(DELEGATE, \"System.Delegate\", DELEGATE_1)\nHANDLES(DELEGATE_1, \"AllocDelegateLike_internal\", ves_icall_System_Delegate_AllocDelegateLike_internal, MonoMulticastDelegate, 1, (MonoDelegate))\nHANDLES(DELEGATE_2, \"CreateDelegate_internal\", ves_icall_System_Delegate_CreateDelegate_internal, MonoObject, 4, (MonoReflectionType, MonoObject, MonoReflectionMethod, MonoBoolean))\nHANDLES(DELEGATE_3, \"GetVirtualMethod_internal\", ves_icall_System_Delegate_GetVirtualMethod_internal, MonoReflectionMethod, 1, (MonoDelegate))\n\nICALL_TYPE(DEBUGR, \"System.Diagnostics.Debugger\", DEBUGR_1)\nNOHANDLES(ICALL(DEBUGR_1, \"IsAttached_internal\", ves_icall_System_Diagnostics_Debugger_IsAttached_internal))\nNOHANDLES(ICALL(DEBUGR_2, \"IsLogging\", ves_icall_System_Diagnostics_Debugger_IsLogging))\nNOHANDLES(ICALL(DEBUGR_3, \"Log_icall\", ves_icall_System_Diagnostics_Debugger_Log))\n\nICALL_TYPE(TRACEL, \"System.Diagnostics.DefaultTraceListener\", TRACEL_1)\nHANDLES(TRACEL_1, \"WriteWindowsDebugString\", ves_icall_System_Diagnostics_DefaultTraceListener_WriteWindowsDebugString, void, 1, (const_gunichar2_ptr))\n\nICALL_TYPE(FILEV, \"System.Diagnostics.FileVersionInfo\", FILEV_1)\nHANDLES(FILEV_1, \"GetVersionInfo_icall\", ves_icall_System_Diagnostics_FileVersionInfo_GetVersionInfo_internal, void, 3, (MonoObject, const_gunichar2_ptr, int))\n\nICALL_TYPE(PERFCTR, \"System.Diagnostics.PerformanceCounter\", PERFCTR_1)\nNOHANDLES(ICALL(PERFCTR_1, \"FreeData\", mono_perfcounter_free_data))\nHANDLES(PERFCTR_2, \"GetImpl_icall\", mono_perfcounter_get_impl, gpointer, 8,\n\t(const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32, gint32_ref, MonoBoolean_ref))\nNOHANDLES(ICALL(PERFCTR_3, \"GetSample\", mono_perfcounter_get_sample))\nNOHANDLES(ICALL(PERFCTR_4, \"UpdateValue\", mono_perfcounter_update_value))\n\nICALL_TYPE(PERFCTRCAT, \"System.Diagnostics.PerformanceCounterCategory\", PERFCTRCAT_1)\nHANDLES(PERFCTRCAT_1, \"CategoryDelete_icall\", mono_perfcounter_category_del, MonoBoolean, 2, (const_gunichar2_ptr, gint32))\nHANDLES(PERFCTRCAT_2, \"CategoryHelpInternal_icall\",   mono_perfcounter_category_help, MonoString, 2, (const_gunichar2_ptr, gint32))\nHANDLES(PERFCTRCAT_3, \"CounterCategoryExists_icall\", mono_perfcounter_category_exists, MonoBoolean, 4, (const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32))\nHANDLES(PERFCTRCAT_4, \"Create_icall\",     mono_perfcounter_create, MonoBoolean, 6, (const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32, gint32, MonoArray))\nHANDLES(PERFCTRCAT_5, \"GetCategoryNames\", mono_perfcounter_category_names, MonoArray, 0, ())\nHANDLES(PERFCTRCAT_6, \"GetCounterNames_icall\", mono_perfcounter_counter_names, MonoArray, 2, (const_gunichar2_ptr, gint32))\nHANDLES(PERFCTRCAT_7, \"GetInstanceNames_icall\", mono_perfcounter_instance_names, MonoArray, 2, (const_gunichar2_ptr, gint32))\nHANDLES(PERFCTRCAT_8, \"InstanceExistsInternal_icall\", mono_perfcounter_instance_exists, MonoBoolean, 4, (const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32))\n\nICALL_TYPE(PROCESS, \"System.Diagnostics.Process\", PROCESS_1)\nHANDLES(PROCESS_1, \"CreateProcess_internal\", ves_icall_System_Diagnostics_Process_CreateProcess_internal,\n\tMonoBoolean, 5, (MonoW32ProcessStartInfo, gpointer, gpointer, gpointer, MonoW32ProcessInfo_ref))\nHANDLES(PROCESS_4, \"GetModules_icall\", ves_icall_System_Diagnostics_Process_GetModules_internal, MonoArray, 2, (MonoObject, PROCESS_HANDLE))\nNOHANDLES(ICALL(PROCESS_5H, \"GetProcessData\", ves_icall_System_Diagnostics_Process_GetProcessData))\nHANDLES(PROCESS_6, \"GetProcess_internal\", ves_icall_System_Diagnostics_Process_GetProcess_internal, gpointer, 1, (guint32))\nHANDLES(PROCESS_7, \"GetProcesses_internal\", ves_icall_System_Diagnostics_Process_GetProcesses_internal, MonoArray, 0, ())\nHANDLES(PROCESS_10, \"ProcessName_icall\", ves_icall_System_Diagnostics_Process_ProcessName_internal, MonoString, 1, (PROCESS_HANDLE))\nHANDLES(PROCESS_13, \"ShellExecuteEx_internal\", ves_icall_System_Diagnostics_Process_ShellExecuteEx_internal, MonoBoolean, 2, (MonoW32ProcessStartInfo, MonoW32ProcessInfo_ref))\n\nICALL_TYPE(STOPWATCH, \"System.Diagnostics.Stopwatch\", STOPWATCH_1)\nNOHANDLES(ICALL(STOPWATCH_1, \"GetTimestamp\", ves_icall_System_Diagnostics_Stopwatch_GetTimestamp))\n\nICALL_TYPE(ENUM, \"System.Enum\", ENUM_1)\nHANDLES(ENUM_1, \"GetEnumValuesAndNames\", ves_icall_System_Enum_GetEnumValuesAndNames, MonoBoolean, 3, (MonoReflectionType, MonoArrayOut, MonoArrayOut))\nHANDLES(ENUM_2, \"InternalBoxEnum\", ves_icall_System_Enum_ToObject, MonoObject, 2, (MonoReflectionType, guint64))\nHANDLES(ENUM_3, \"InternalCompareTo\", ves_icall_System_Enum_compare_value_to, int, 2, (MonoObject, MonoObject))\nHANDLES(ENUM_3a, \"InternalGetCorElementType\", ves_icall_System_Enum_InternalGetCorElementType, int, 1, (MonoObject))\nHANDLES(ENUM_4, \"InternalGetUnderlyingType\", ves_icall_System_Enum_get_underlying_type, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(ENUM_5, \"InternalHasFlag\", ves_icall_System_Enum_InternalHasFlag, MonoBoolean, 2, (MonoObject, MonoObject))\nHANDLES(ENUM_6, \"get_hashcode\", ves_icall_System_Enum_get_hashcode, int, 1, (MonoObject))\nHANDLES(ENUM_7, \"get_value\", ves_icall_System_Enum_get_value, MonoObject, 1, (MonoObject))\n\nICALL_TYPE(ENV, \"System.Environment\", ENV_1)\nNOHANDLES(ICALL(ENV_1, \"Exit\", ves_icall_System_Environment_Exit))\nHANDLES(ENV_1a, \"FailFast\", ves_icall_System_Environment_FailFast, void, 3, (MonoString, MonoException, MonoString))\nHANDLES(ENV_2, \"GetCommandLineArgs\", ves_icall_System_Environment_GetCommandLineArgs, MonoArray, 0, ())\nHANDLES(ENV_3, \"GetEnvironmentVariableNames\", ves_icall_System_Environment_GetEnvironmentVariableNames, MonoArray, 0, ())\nNOHANDLES(ICALL(ENV_31, \"GetIs64BitOperatingSystem\", ves_icall_System_Environment_GetIs64BitOperatingSystem))\nHANDLES(ENV_4, \"GetLogicalDrivesInternal\", ves_icall_System_Environment_GetLogicalDrivesInternal, MonoArray, 0, ())\nHANDLES_REUSE_WRAPPER(ENV_5, \"GetMachineConfigPath\", ves_icall_System_Configuration_DefaultConfig_get_machine_config_path, MonoString, 0, ())\nHANDLES(ENV_51, \"GetNewLine\", ves_icall_System_Environment_get_NewLine, MonoString, 0, ())\nHANDLES(ENV_6, \"GetOSVersionString\", ves_icall_System_Environment_GetOSVersionString, MonoString, 0, ())\nNOHANDLES(ICALL(ENV_6a, \"GetPageSize\", mono_pagesize))\nHANDLES(ENV_7, \"GetWindowsFolderPath\", ves_icall_System_Environment_GetWindowsFolderPath, MonoString, 1, (int))\nHANDLES(ENV_8, \"InternalSetEnvironmentVariable\", ves_icall_System_Environment_InternalSetEnvironmentVariable, void, 4, (const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32))\nNOHANDLES(ICALL(ENV_9, \"get_ExitCode\", mono_environment_exitcode_get))\nNOHANDLES(ICALL(ENV_10, \"get_HasShutdownStarted\", ves_icall_System_Environment_get_HasShutdownStarted))\nHANDLES(ENV_11, \"get_MachineName\", ves_icall_System_Environment_get_MachineName, MonoString, 0, ())\nNOHANDLES(ICALL(ENV_13, \"get_Platform\", ves_icall_System_Environment_get_Platform))\nNOHANDLES(ICALL(ENV_14, \"get_ProcessorCount\", ves_icall_System_Environment_get_ProcessorCount))\nNOHANDLES(ICALL(ENV_15, \"get_TickCount\", ves_icall_System_Environment_get_TickCount))\nHANDLES(ENV_16, \"get_UserName\", ves_icall_System_Environment_get_UserName, MonoString, 0, ())\nHANDLES(ENV_16b, \"get_bundled_machine_config\", ves_icall_System_Environment_get_bundled_machine_config, MonoString, 0, ())\nHANDLES(ENV_16m, \"internalBroadcastSettingChange\", ves_icall_System_Environment_BroadcastSettingChange, void, 0, ())\nHANDLES(ENV_17, \"internalGetEnvironmentVariable_native\", ves_icall_System_Environment_GetEnvironmentVariable_native, MonoString, 1, (const_char_ptr))\nHANDLES(ENV_18, \"internalGetGacPath\", ves_icall_System_Environment_GetGacPath, MonoString, 0, ())\nHANDLES(ENV_19, \"internalGetHome\", ves_icall_System_Environment_InternalGetHome, MonoString, 0, ())\nNOHANDLES(ICALL(ENV_20, \"set_ExitCode\", mono_environment_exitcode_set))\nICALL_TYPE(GC, \"System.GC\", GC_10)\nNOHANDLES(ICALL(GC_10, \"GetAllocatedBytesForCurrentThread\", ves_icall_System_GC_GetAllocatedBytesForCurrentThread))\nNOHANDLES(ICALL(GC_0, \"GetCollectionCount\", ves_icall_System_GC_GetCollectionCount))\nHANDLES(GC_0a, \"GetGeneration\", ves_icall_System_GC_GetGeneration, int, 1, (MonoObject))\nNOHANDLES(ICALL(GC_0b, \"GetMaxGeneration\", ves_icall_System_GC_GetMaxGeneration))\nNOHANDLES(ICALL(GC_1, \"GetTotalMemory\", ves_icall_System_GC_GetTotalMemory))\nNOHANDLES(ICALL(GC_2, \"InternalCollect\", ves_icall_System_GC_InternalCollect))\nNOHANDLES(ICALL(GC_4a, \"RecordPressure\", ves_icall_System_GC_RecordPressure))\nNOHANDLES(ICALL(GC_6, \"WaitForPendingFinalizers\", ves_icall_System_GC_WaitForPendingFinalizers))\nHANDLES(GC_6b, \"_ReRegisterForFinalize\", ves_icall_System_GC_ReRegisterForFinalize, void, 1, (MonoObject))\nHANDLES(GC_7, \"_SuppressFinalize\", ves_icall_System_GC_SuppressFinalize, void, 1, (MonoObject))\nHANDLES(GC_9, \"get_ephemeron_tombstone\", ves_icall_System_GC_get_ephemeron_tombstone, MonoObject, 0, ())\nHANDLES(GC_8, \"register_ephemeron_array\", ves_icall_System_GC_register_ephemeron_array, void, 1, (MonoObject))\n\nICALL_TYPE(CALDATA, \"System.Globalization.CalendarData\", CALDATA_1)\nHANDLES(CALDATA_1, \"fill_calendar_data\", ves_icall_System_Globalization_CalendarData_fill_calendar_data, MonoBoolean, 3, (MonoCalendarData, MonoString, gint32))\n\nICALL_TYPE(COMPINF, \"System.Globalization.CompareInfo\", COMPINF_4)\nNOHANDLES(ICALL(COMPINF_4, \"internal_compare_icall\", ves_icall_System_Globalization_CompareInfo_internal_compare))\nNOHANDLES(ICALL(COMPINF_6, \"internal_index_icall\", ves_icall_System_Globalization_CompareInfo_internal_index))\n\nICALL_TYPE(CULDATA, \"System.Globalization.CultureData\", CULDATA_1)\nHANDLES(CULDATA_1, \"fill_culture_data\", ves_icall_System_Globalization_CultureData_fill_culture_data, void, 2, (MonoCultureData, gint32))\nNOHANDLES(ICALL(CULDATA_2, \"fill_number_data\", ves_icall_System_Globalization_CultureData_fill_number_data))\n\nICALL_TYPE(CULINF, \"System.Globalization.CultureInfo\", CULINF_5)\nHANDLES(CULINF_5, \"construct_internal_locale_from_lcid\", ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid, MonoBoolean, 2, (MonoCultureInfo, gint32))\nHANDLES(CULINF_6, \"construct_internal_locale_from_name\", ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name, MonoBoolean, 2, (MonoCultureInfo, MonoString))\nHANDLES(CULINF_7, \"get_current_locale_name\", ves_icall_System_Globalization_CultureInfo_get_current_locale_name, MonoString, 0, ())\nHANDLES(CULINF_9, \"internal_get_cultures\", ves_icall_System_Globalization_CultureInfo_internal_get_cultures, MonoArray, 3, (MonoBoolean, MonoBoolean, MonoBoolean))\n\nICALL_TYPE(REGINF, \"System.Globalization.RegionInfo\", REGINF_2)\nHANDLES(REGINF_2, \"construct_internal_region_from_name\", ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name, MonoBoolean, 2, (MonoRegionInfo, MonoString))\n\n#if defined(ENABLE_MONODROID) || defined(ENABLE_MONOTOUCH) || defined(TARGET_WASM)\nICALL_TYPE(DEFLATESTREAM, \"System.IO.Compression.DeflateStreamNative\", DEFLATESTREAM_1)\nNOHANDLES(ICALL(DEFLATESTREAM_1, \"CloseZStream\", ves_icall_System_IO_Compression_DeflateStreamNative_CloseZStream))\nNOHANDLES(ICALL(DEFLATESTREAM_2, \"CreateZStream\", ves_icall_System_IO_Compression_DeflateStreamNative_CreateZStream))\nNOHANDLES(ICALL(DEFLATESTREAM_3, \"Flush\", ves_icall_System_IO_Compression_DeflateStreamNative_Flush))\nNOHANDLES(ICALL(DEFLATESTREAM_4, \"ReadZStream\", ves_icall_System_IO_Compression_DeflateStreamNative_ReadZStream))\nNOHANDLES(ICALL(DEFLATESTREAM_5, \"WriteZStream\", ves_icall_System_IO_Compression_DeflateStreamNative_WriteZStream))\n#endif\n\n#ifndef PLATFORM_NO_DRIVEINFO\nICALL_TYPE(IODRIVEINFO, \"System.IO.DriveInfo\", IODRIVEINFO_1)\nNOHANDLES(ICALL(IODRIVEINFO_1, \"GetDiskFreeSpaceInternal\", ves_icall_System_IO_DriveInfo_GetDiskFreeSpace))\nHANDLES(IODRIVEINFO_2, \"GetDriveFormatInternal\", ves_icall_System_IO_DriveInfo_GetDriveFormat, MonoString, 2, (const_gunichar2_ptr, int))\nHANDLES(IODRIVEINFO_3, \"GetDriveTypeInternal\", ves_icall_System_IO_DriveInfo_GetDriveType, guint32, 2, (const_gunichar2_ptr, int))\n#endif\n\nICALL_TYPE(FAMW, \"System.IO.FAMWatcher\", FAMW_1)\nHANDLES(FAMW_1, \"InternalFAMNextEvent\", ves_icall_System_IO_FAMW_InternalFAMNextEvent, int, 4, (gpointer, MonoStringOut, int_ref, int_ref))\n\nICALL_TYPE(FILEW, \"System.IO.FileSystemWatcher\", FILEW_4)\nNOHANDLES(ICALL(FILEW_4, \"InternalSupportsFSW\", ves_icall_System_IO_FSW_SupportsFSW))\n\nICALL_TYPE(KQUEM, \"System.IO.KqueueMonitor\", KQUEM_1)\nNOHANDLES(ICALL(KQUEM_1, \"kevent_notimeout\", ves_icall_System_IO_KqueueMonitor_kevent_notimeout))\n\nICALL_TYPE(LOGCATEXTWRITER, \"System.IO.LogcatTextWriter\", LOGCATEXTWRITER_1)\nNOHANDLES(ICALL(LOGCATEXTWRITER_1, \"Log\", ves_icall_System_IO_LogcatTextWriter_Log))\n\nICALL_TYPE(MMAPIMPL, \"System.IO.MemoryMappedFiles.MemoryMapImpl\", MMAPIMPL_1)\n// FIXME rename to ves_icall...\nHANDLES(MMAPIMPL_1, \"CloseMapping\", mono_mmap_close, void, 1, (gpointer))\nHANDLES(MMAPIMPL_2, \"ConfigureHandleInheritability\", mono_mmap_configure_inheritability, void, 2, (gpointer, gint32))\nHANDLES(MMAPIMPL_3, \"Flush\", mono_mmap_flush, void,  1, (gpointer))\nHANDLES(MMAPIMPL_4, \"MapInternal\", mono_mmap_map, int, 6, (gpointer, gint64, gint64_ref, int, gpointer_ref, gpointer_ref))\nHANDLES(MMAPIMPL_5, \"OpenFileInternal\", mono_mmap_open_file, gpointer, 9, (const_gunichar2_ptr, int, int, const_gunichar2_ptr, int, gint64_ref, int, int, int_ref))\nHANDLES(MMAPIMPL_6, \"OpenHandleInternal\", mono_mmap_open_handle, gpointer, 7, (gpointer, const_gunichar2_ptr, int, gint64_ref, int, int, int_ref))\nHANDLES(MMAPIMPL_7, \"Unmap\", mono_mmap_unmap, MonoBoolean, 1, (gpointer))\n\nICALL_TYPE(MONOIO, \"System.IO.MonoIO\", MONOIO_39)\nNOHANDLES(ICALL(MONOIO_39, \"Cancel_internal\", ves_icall_System_IO_MonoIO_Cancel))\nNOHANDLES(ICALL(MONOIO_1, \"Close(intptr,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Close))\n#ifndef PLATFORM_RO_FS\nNOHANDLES(ICALL(MONOIO_2, \"CopyFile(char*,char*,bool,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_CopyFile))\nNOHANDLES(ICALL(MONOIO_3, \"CreateDirectory(char*,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_CreateDirectory))\nNOHANDLES(ICALL(MONOIO_4, \"CreatePipe\", ves_icall_System_IO_MonoIO_CreatePipe))\nNOHANDLES(ICALL(MONOIO_5, \"DeleteFile(char*,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_DeleteFile))\n#endif /* !PLATFORM_RO_FS */\nNOHANDLES(ICALL(MONOIO_38, \"DumpHandles\", ves_icall_System_IO_MonoIO_DumpHandles))\nNOHANDLES(ICALL(MONOIO_34, \"DuplicateHandle\", ves_icall_System_IO_MonoIO_DuplicateHandle))\nNOHANDLES(ICALL(MONOIO_37a, \"FindCloseFile\", ves_icall_System_IO_MonoIO_FindCloseFile))\nHANDLES(MONOIO_35a, \"FindFirstFile\", ves_icall_System_IO_MonoIO_FindFirstFile, gpointer, 4, (const_gunichar2_ptr, MonoStringOut, gint32_ref, gint32_ref))\nHANDLES(MONOIO_36a, \"FindNextFile\", ves_icall_System_IO_MonoIO_FindNextFile, MonoBoolean, 4, (gpointer, MonoStringOut, gint32_ref, gint32_ref))\nNOHANDLES(ICALL(MONOIO_6, \"Flush(intptr,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Flush))\nHANDLES(MONOIO_7, \"GetCurrentDirectory(System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_GetCurrentDirectory, MonoString, 1, (gint32_ref))\nNOHANDLES(ICALL(MONOIO_8, \"GetFileAttributes(char*,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_GetFileAttributes))\nNOHANDLES(ICALL(MONOIO_9, \"GetFileStat(char*,System.IO.MonoIOStat&,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_GetFileStat))\nNOHANDLES(ICALL(MONOIO_11, \"GetFileType(intptr,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_GetFileType))\nNOHANDLES(ICALL(MONOIO_12, \"GetLength(intptr,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_GetLength))\n#ifndef PLATFORM_RO_FS\nNOHANDLES(ICALL(MONOIO_14, \"Lock(intptr,long,long,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Lock))\nNOHANDLES(ICALL(MONOIO_15, \"MoveFile(char*,char*,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_MoveFile))\n#endif /* !PLATFORM_RO_FS */\nNOHANDLES(ICALL(MONOIO_16, \"Open(char*,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.IO.FileOptions,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Open))\nHANDLES(MONOIO_17, \"Read(intptr,byte[],int,int,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Read, gint32, 5, (gpointer, MonoArray, gint32, gint32, gint32_ref))\n#ifndef PLATFORM_RO_FS\nNOHANDLES(ICALL(MONOIO_18, \"RemoveDirectory(char*,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_RemoveDirectory))\nNOHANDLES(ICALL(MONOIO_18M, \"ReplaceFile(char*,char*,char*,bool,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_ReplaceFile))\n#endif /* !PLATFORM_RO_FS */\nNOHANDLES(ICALL(MONOIO_19, \"Seek(intptr,long,System.IO.SeekOrigin,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Seek))\nNOHANDLES(ICALL(MONOIO_20, \"SetCurrentDirectory(char*,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_SetCurrentDirectory))\nNOHANDLES(ICALL(MONOIO_21, \"SetFileAttributes(char*,System.IO.FileAttributes,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_SetFileAttributes))\nNOHANDLES(ICALL(MONOIO_22, \"SetFileTime(intptr,long,long,long,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_SetFileTime))\nNOHANDLES(ICALL(MONOIO_23, \"SetLength(intptr,long,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_SetLength))\n#ifndef PLATFORM_RO_FS\nNOHANDLES(ICALL(MONOIO_24, \"Unlock(intptr,long,long,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Unlock))\n#endif\nHANDLES(MONOIO_25, \"Write(intptr,byte[],int,int,System.IO.MonoIOError&)\", ves_icall_System_IO_MonoIO_Write, gint32, 5, (gpointer, MonoArray, gint32, gint32, gint32_ref))\nNOHANDLES(ICALL(MONOIO_26, \"get_AltDirectorySeparatorChar\", ves_icall_System_IO_MonoIO_get_AltDirectorySeparatorChar))\nNOHANDLES(ICALL(MONOIO_27, \"get_ConsoleError\", ves_icall_System_IO_MonoIO_get_ConsoleError))\nNOHANDLES(ICALL(MONOIO_28, \"get_ConsoleInput\", ves_icall_System_IO_MonoIO_get_ConsoleInput))\nNOHANDLES(ICALL(MONOIO_29, \"get_ConsoleOutput\", ves_icall_System_IO_MonoIO_get_ConsoleOutput))\nNOHANDLES(ICALL(MONOIO_30, \"get_DirectorySeparatorChar\", ves_icall_System_IO_MonoIO_get_DirectorySeparatorChar))\nHANDLES(MONOIO_31, \"get_InvalidPathChars\", ves_icall_System_IO_MonoIO_get_InvalidPathChars, MonoArray, 0, ())\nNOHANDLES(ICALL(MONOIO_32, \"get_PathSeparator\", ves_icall_System_IO_MonoIO_get_PathSeparator))\nNOHANDLES(ICALL(MONOIO_33, \"get_VolumeSeparatorChar\", ves_icall_System_IO_MonoIO_get_VolumeSeparatorChar))\n\nICALL_TYPE(IOPATH, \"System.IO.Path\", IOPATH_1)\nHANDLES(IOPATH_1, \"get_temp_path\", ves_icall_System_IO_get_temp_path, MonoString, 0, ())\n\nICALL_TYPE(IOSELECTOR, \"System.IOSelector\", IOSELECTOR_1)\nHANDLES(IOSELECTOR_1, \"Add\", ves_icall_System_IOSelector_Add, void, 2, (gpointer, MonoIOSelectorJob))\nNOHANDLES(ICALL(IOSELECTOR_2, \"Remove\", ves_icall_System_IOSelector_Remove))\n\nICALL_TYPE(MATH, \"System.Math\", MATH_19)\nNOHANDLES(ICALL(MATH_19, \"Abs(double)\", ves_icall_System_Math_Abs_double))\nNOHANDLES(ICALL(MATH_20, \"Abs(single)\", ves_icall_System_Math_Abs_single))\nNOHANDLES(ICALL(MATH_1, \"Acos\", ves_icall_System_Math_Acos))\nNOHANDLES(ICALL(MATH_1a, \"Acosh\", ves_icall_System_Math_Acosh))\nNOHANDLES(ICALL(MATH_2, \"Asin\", ves_icall_System_Math_Asin))\nNOHANDLES(ICALL(MATH_2a, \"Asinh\", ves_icall_System_Math_Asinh))\nNOHANDLES(ICALL(MATH_3, \"Atan\", ves_icall_System_Math_Atan))\nNOHANDLES(ICALL(MATH_4, \"Atan2\", ves_icall_System_Math_Atan2))\nNOHANDLES(ICALL(MATH_4a, \"Atanh\", ves_icall_System_Math_Atanh))\nNOHANDLES(ICALL(MATH_4b, \"Cbrt\", ves_icall_System_Math_Cbrt))\nNOHANDLES(ICALL(MATH_21, \"Ceiling\", ves_icall_System_Math_Ceiling))\nNOHANDLES(ICALL(MATH_5, \"Cos\", ves_icall_System_Math_Cos))\nNOHANDLES(ICALL(MATH_6, \"Cosh\", ves_icall_System_Math_Cosh))\nNOHANDLES(ICALL(MATH_7, \"Exp\", ves_icall_System_Math_Exp))\nNOHANDLES(ICALL(MATH_7a, \"FMod\", ves_icall_System_Math_FMod))\nNOHANDLES(ICALL(MATH_8, \"Floor\", ves_icall_System_Math_Floor))\nNOHANDLES(ICALL(MATH_9, \"Log\", ves_icall_System_Math_Log))\nNOHANDLES(ICALL(MATH_10, \"Log10\", ves_icall_System_Math_Log10))\nNOHANDLES(ICALL(MATH_10a, \"ModF\", ves_icall_System_Math_ModF))\nNOHANDLES(ICALL(MATH_11, \"Pow\", ves_icall_System_Math_Pow))\nNOHANDLES(ICALL(MATH_12, \"Round\", ves_icall_System_Math_Round))\nNOHANDLES(ICALL(MATH_14, \"Sin\", ves_icall_System_Math_Sin))\nNOHANDLES(ICALL(MATH_15, \"Sinh\", ves_icall_System_Math_Sinh))\nNOHANDLES(ICALL(MATH_16, \"Sqrt\", ves_icall_System_Math_Sqrt))\nNOHANDLES(ICALL(MATH_17, \"Tan\", ves_icall_System_Math_Tan))\nNOHANDLES(ICALL(MATH_18, \"Tanh\", ves_icall_System_Math_Tanh))\n\nICALL_TYPE(MATHF, \"System.MathF\", MATHF_1)\nNOHANDLES(ICALL(MATHF_1, \"Acos\", ves_icall_System_MathF_Acos))\nNOHANDLES(ICALL(MATHF_2, \"Acosh\", ves_icall_System_MathF_Acosh))\nNOHANDLES(ICALL(MATHF_3, \"Asin\", ves_icall_System_MathF_Asin))\nNOHANDLES(ICALL(MATHF_4, \"Asinh\", ves_icall_System_MathF_Asinh))\nNOHANDLES(ICALL(MATHF_5, \"Atan\", ves_icall_System_MathF_Atan))\nNOHANDLES(ICALL(MATHF_6, \"Atan2\", ves_icall_System_MathF_Atan2))\nNOHANDLES(ICALL(MATHF_7, \"Atanh\", ves_icall_System_MathF_Atanh))\nNOHANDLES(ICALL(MATHF_8, \"Cbrt\", ves_icall_System_MathF_Cbrt))\nNOHANDLES(ICALL(MATHF_9, \"Ceiling\", ves_icall_System_MathF_Ceiling))\nNOHANDLES(ICALL(MATHF_10, \"Cos\", ves_icall_System_MathF_Cos))\nNOHANDLES(ICALL(MATHF_11, \"Cosh\", ves_icall_System_MathF_Cosh))\nNOHANDLES(ICALL(MATHF_12, \"Exp\", ves_icall_System_MathF_Exp))\nNOHANDLES(ICALL(MATHF_22, \"FMod\", ves_icall_System_MathF_FMod))\nNOHANDLES(ICALL(MATHF_13, \"Floor\", ves_icall_System_MathF_Floor))\nNOHANDLES(ICALL(MATHF_14, \"Log\", ves_icall_System_MathF_Log))\nNOHANDLES(ICALL(MATHF_15, \"Log10\", ves_icall_System_MathF_Log10))\nNOHANDLES(ICALL(MATHF_23, \"ModF(single,single*)\", ves_icall_System_MathF_ModF))\nNOHANDLES(ICALL(MATHF_16, \"Pow\", ves_icall_System_MathF_Pow))\nNOHANDLES(ICALL(MATHF_17, \"Sin\", ves_icall_System_MathF_Sin))\nNOHANDLES(ICALL(MATHF_18, \"Sinh\", ves_icall_System_MathF_Sinh))\nNOHANDLES(ICALL(MATHF_19, \"Sqrt\", ves_icall_System_MathF_Sqrt))\nNOHANDLES(ICALL(MATHF_20, \"Tan\", ves_icall_System_MathF_Tan))\nNOHANDLES(ICALL(MATHF_21, \"Tanh\", ves_icall_System_MathF_Tanh))\n\nICALL_TYPE(MCATTR, \"System.MonoCustomAttrs\", MCATTR_1)\nHANDLES(MCATTR_1, \"GetCustomAttributesDataInternal\", ves_icall_MonoCustomAttrs_GetCustomAttributesDataInternal, MonoArray, 1, (MonoObject))\nHANDLES(MCATTR_2, \"GetCustomAttributesInternal\", ves_icall_MonoCustomAttrs_GetCustomAttributesInternal, MonoArray, 3, (MonoObject, MonoReflectionType, MonoBoolean))\nHANDLES(MCATTR_3, \"IsDefinedInternal\", ves_icall_MonoCustomAttrs_IsDefinedInternal, MonoBoolean, 2, (MonoObject, MonoReflectionType))\n\n#ifndef DISABLE_SOCKETS\nICALL_TYPE(NDNS, \"System.Net.Dns\", NDNS_1)\nHANDLES(NDNS_1, \"GetHostByAddr_icall\", ves_icall_System_Net_Dns_GetHostByAddr, MonoBoolean, 5, (MonoString, MonoStringOut, MonoArrayOut, MonoArrayOut, gint32))\nHANDLES(NDNS_2, \"GetHostByName_icall\", ves_icall_System_Net_Dns_GetHostByName, MonoBoolean, 5, (MonoString, MonoStringOut, MonoArrayOut, MonoArrayOut, gint32))\nHANDLES(NDNS_3, \"GetHostName_icall\", ves_icall_System_Net_Dns_GetHostName, MonoBoolean, 1, (MonoStringOut))\n#endif\n\n#if defined(ENABLE_MONODROID)\nICALL_TYPE(LINUXNETWORKCHANGE, \"System.Net.NetworkInformation.LinuxNetworkChange\", LINUXNETWORKCHANGE_1)\nNOHANDLES(ICALL(LINUXNETWORKCHANGE_1, \"CloseNLSocket\", ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CloseNLSocket))\nNOHANDLES(ICALL(LINUXNETWORKCHANGE_2, \"CreateNLSocket\", ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_CreateNLSocket))\nNOHANDLES(ICALL(LINUXNETWORKCHANGE_3, \"ReadEvents\", ves_icall_System_Net_NetworkInformation_LinuxNetworkChange_ReadEvents))\n#endif\n\n#if !defined(DISABLE_SOCKETS)\nICALL_TYPE(MAC_IFACE_PROPS, \"System.Net.NetworkInformation.MacOsIPInterfaceProperties\", MAC_IFACE_PROPS_1)\nHANDLES(MAC_IFACE_PROPS_1, \"ParseRouteInfo_icall\", ves_icall_System_Net_NetworkInformation_MacOsIPInterfaceProperties_ParseRouteInfo, MonoBoolean, 2, (MonoString, MonoArrayOut))\n\nICALL_TYPE(SOCK, \"System.Net.Sockets.Socket\", SOCK_1)\nNOHANDLES(ICALL(SOCK_1, \"Accept_icall\", ves_icall_System_Net_Sockets_Socket_Accept_icall))\nNOHANDLES(ICALL(SOCK_2, \"Available_icall\", ves_icall_System_Net_Sockets_Socket_Available_icall))\nHANDLES(SOCK_3, \"Bind_icall\", ves_icall_System_Net_Sockets_Socket_Bind_icall, void, 3, (gsize, MonoObject, gint32_ref))\nNOHANDLES(ICALL(SOCK_4, \"Blocking_icall\", ves_icall_System_Net_Sockets_Socket_Blocking_icall))\nNOHANDLES(ICALL(SOCK_5, \"Close_icall\", ves_icall_System_Net_Sockets_Socket_Close_icall))\nHANDLES(SOCK_6, \"Connect_icall\", ves_icall_System_Net_Sockets_Socket_Connect_icall, void, 4, (gsize, MonoObject, gint32_ref, MonoBoolean))\nNOHANDLES(ICALL(SOCK_6a, \"Disconnect_icall\", ves_icall_System_Net_Sockets_Socket_Disconnect_icall))\nNOHANDLES(ICALL(SOCK_6b, \"Duplicate_icall\", ves_icall_System_Net_Sockets_Socket_Duplicate_icall))\n//FIXME The array is ref but the icall does not write to it.\nHANDLES(SOCK_7, \"GetSocketOption_arr_icall\", ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_icall, void, 5, (gsize, gint32, gint32, MonoArray, gint32_ref))\nHANDLES(SOCK_8, \"GetSocketOption_obj_icall\", ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_icall, void, 5, (gsize, gint32, gint32, MonoObjectOut, gint32_ref))\nHANDLES(SOCK_21, \"IOControl_icall\", ves_icall_System_Net_Sockets_Socket_IOControl_icall, int, 5, (gsize, gint32, MonoArray, MonoArray, gint32_ref))\nNOHANDLES(ICALL(SOCK_9, \"Listen_icall\", ves_icall_System_Net_Sockets_Socket_Listen_icall))\nHANDLES(SOCK_10, \"LocalEndPoint_icall\", ves_icall_System_Net_Sockets_Socket_LocalEndPoint_icall, MonoObject, 3, (gsize, gint32, gint32_ref))\nNOHANDLES(ICALL(SOCK_11, \"Poll_icall\", ves_icall_System_Net_Sockets_Socket_Poll_icall))\nHANDLES(SOCK_13, \"ReceiveFrom_icall\", ves_icall_System_Net_Sockets_Socket_ReceiveFrom_icall, gint32, 7, (gsize, char_ptr, gint32, gint32, MonoObjectInOut, gint32_ref, MonoBoolean))\nNOHANDLES(ICALL(SOCK_11a, \"Receive_array_icall\", ves_icall_System_Net_Sockets_Socket_Receive_array_icall))\nNOHANDLES(ICALL(SOCK_12, \"Receive_icall\", ves_icall_System_Net_Sockets_Socket_Receive_icall))\nHANDLES(SOCK_14, \"RemoteEndPoint_icall\", ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_icall, MonoObject, 3, (gsize, gint32, gint32_ref))\nHANDLES(SOCK_15, \"Select_icall\", ves_icall_System_Net_Sockets_Socket_Select_icall, void, 3, (MonoArrayInOut, gint32, gint32_ref))\nHANDLES(SOCK_15a, \"SendFile_icall\", ves_icall_System_Net_Sockets_Socket_SendFile_icall, MonoBoolean, 7, (gsize, MonoString, MonoArray, MonoArray, int, gint32_ref, MonoBoolean))\nHANDLES(SOCK_16, \"SendTo_icall\", ves_icall_System_Net_Sockets_Socket_SendTo_icall, gint32, 7, (gsize, char_ptr, gint32, gint32, MonoObject, gint32_ref, MonoBoolean))\nNOHANDLES(ICALL(SOCK_16a, \"Send_array_icall\", ves_icall_System_Net_Sockets_Socket_Send_array_icall))\nNOHANDLES(ICALL(SOCK_17, \"Send_icall\", ves_icall_System_Net_Sockets_Socket_Send_icall))\nHANDLES(SOCK_18, \"SetSocketOption_icall\", ves_icall_System_Net_Sockets_Socket_SetSocketOption_icall, void, 7, (gsize, gint32, gint32, MonoObject, MonoArray, gint32, gint32_ref))\nNOHANDLES(ICALL(SOCK_19, \"Shutdown_icall\", ves_icall_System_Net_Sockets_Socket_Shutdown_icall))\nHANDLES(SOCK_20, \"Socket_icall\", ves_icall_System_Net_Sockets_Socket_Socket_icall, gpointer, 4, (gint32, gint32, gint32, gint32_ref))\nNOHANDLES(ICALL(SOCK_20a, \"SupportsPortReuse\", ves_icall_System_Net_Sockets_Socket_SupportPortReuse_icall))\nHANDLES(SOCK_21a, \"cancel_blocking_socket_operation\", ves_icall_cancel_blocking_socket_operation, void, 1, (MonoThreadObject))\n\nICALL_TYPE(SOCKEX, \"System.Net.Sockets.SocketException\", SOCKEX_1)\nNOHANDLES(ICALL(SOCKEX_1, \"WSAGetLastError_icall\", ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_icall))\n#endif /* !DISABLE_SOCKETS */\n\nICALL_TYPE(NUMBER_FORMATTER, \"System.NumberFormatter\", NUMBER_FORMATTER_1)\nNOHANDLES(ICALL(NUMBER_FORMATTER_1, \"GetFormatterTables\", ves_icall_System_NumberFormatter_GetFormatterTables))\n\nICALL_TYPE(OBJ, \"System.Object\", OBJ_1)\nHANDLES(OBJ_1, \"GetType\", ves_icall_System_Object_GetType, MonoReflectionType, 1, (MonoObject))\nHANDLES(OBJ_2, \"InternalGetHashCode\", mono_object_hash_icall, int, 1, (MonoObject))\nHANDLES(OBJ_3, \"MemberwiseClone\", ves_icall_System_Object_MemberwiseClone, MonoObject, 1, (MonoObject))\n\nICALL_TYPE(ASSEM, \"System.Reflection.Assembly\", ASSEM_2)\nHANDLES(ASSEM_2, \"GetCallingAssembly\", ves_icall_System_Reflection_Assembly_GetCallingAssembly, MonoReflectionAssembly, 0, ())\nHANDLES(ASSEM_3, \"GetEntryAssembly\", ves_icall_System_Reflection_Assembly_GetEntryAssembly, MonoReflectionAssembly, 0, ())\nHANDLES(ASSEM_4, \"GetExecutingAssembly\", ves_icall_System_Reflection_Assembly_GetExecutingAssembly, MonoReflectionAssembly, 0, ())\nHANDLES(ASSEM_13, \"GetTypes\", ves_icall_System_Reflection_Assembly_GetTypes, MonoArray, 2, (MonoReflectionAssembly, MonoBoolean))\nHANDLES(ASSEM_14, \"InternalGetAssemblyName\", ves_icall_System_Reflection_Assembly_InternalGetAssemblyName, void, 3, (MonoString, MonoAssemblyName_ref, MonoStringOut))\nHANDLES(ASSEM_12, \"InternalGetReferencedAssemblies\", ves_icall_System_Reflection_Assembly_InternalGetReferencedAssemblies, GPtrArray_ptr, 1, (MonoReflectionAssembly))\nHANDLES(ASSEM_15, \"InternalGetType\", ves_icall_System_Reflection_Assembly_InternalGetType, MonoReflectionType, 5, (MonoReflectionAssembly, MonoReflectionModule, MonoString, MonoBoolean, MonoBoolean))\nHANDLES(ASSEM_16a, \"LoadFile_internal\", ves_icall_System_Reflection_Assembly_LoadFile_internal, MonoReflectionAssembly, 2, (MonoString, MonoStackCrawlMark_ptr))\nHANDLES(ASSEM_17, \"LoadFrom\", ves_icall_System_Reflection_Assembly_LoadFrom, MonoReflectionAssembly, 3, (MonoString, MonoBoolean, MonoStackCrawlMark_ptr))\nHANDLES(ASSEM_26, \"load_with_partial_name\", ves_icall_System_Reflection_Assembly_load_with_partial_name, MonoReflectionAssembly, 2, (MonoString, MonoObject))\n\nICALL_TYPE(ASSEMN, \"System.Reflection.AssemblyName\", ASSEMN_0)\nNOHANDLES(ICALL(ASSEMN_0, \"GetNativeName\", ves_icall_System_Reflection_AssemblyName_GetNativeName))\nNOHANDLES(ICALL(ASSEMN_3, \"ParseAssemblyName\", ves_icall_System_Reflection_AssemblyName_ParseAssemblyName))\nNOHANDLES(ICALL(ASSEMN_2, \"get_public_token\", mono_digest_get_public_token))\n\nICALL_TYPE(CATTR_DATA, \"System.Reflection.CustomAttributeData\", CATTR_DATA_1)\nHANDLES(CATTR_DATA_1, \"ResolveArgumentsInternal\", ves_icall_System_Reflection_CustomAttributeData_ResolveArgumentsInternal, void, 6, (MonoReflectionMethod, MonoReflectionAssembly, gpointer, guint32, MonoArrayOut, MonoArrayOut))\n\nICALL_TYPE(ASSEMB, \"System.Reflection.Emit.AssemblyBuilder\", ASSEMB_1)\nHANDLES(ASSEMB_1, \"UpdateNativeCustomAttributes\", ves_icall_AssemblyBuilder_UpdateNativeCustomAttributes, void, 1, (MonoReflectionAssemblyBuilder))\nHANDLES(ASSEMB_2, \"basic_init\", ves_icall_AssemblyBuilder_basic_init, void, 1, (MonoReflectionAssemblyBuilder))\n\n#ifndef DISABLE_REFLECTION_EMIT\nICALL_TYPE(CATTRB, \"System.Reflection.Emit.CustomAttributeBuilder\", CATTRB_1)\nHANDLES(CATTRB_1, \"GetBlob\", ves_icall_CustomAttributeBuilder_GetBlob, MonoArray, 7, (MonoReflectionAssembly, MonoObject, MonoArray, MonoArray, MonoArray, MonoArray, MonoArray))\n#endif\n\nICALL_TYPE(DYNM, \"System.Reflection.Emit.DynamicMethod\", DYNM_1)\nHANDLES(DYNM_1, \"create_dynamic_method\", ves_icall_DynamicMethod_create_dynamic_method, void, 1, (MonoReflectionDynamicMethod))\n\nICALL_TYPE(ENUMB, \"System.Reflection.Emit.EnumBuilder\", ENUMB_1)\nHANDLES(ENUMB_1, \"setup_enum_type\", ves_icall_EnumBuilder_setup_enum_type, void, 2, (MonoReflectionType, MonoReflectionType))\n\nICALL_TYPE(MODULEB, \"System.Reflection.Emit.ModuleBuilder\", MODULEB_10)\nHANDLES(MODULEB_10, \"GetRegisteredToken\", ves_icall_ModuleBuilder_GetRegisteredToken, MonoObject, 2, (MonoReflectionModuleBuilder, guint32))\nHANDLES(MODULEB_8, \"RegisterToken\", ves_icall_ModuleBuilder_RegisterToken, void, 3, (MonoReflectionModuleBuilder, MonoObject, guint32))\nHANDLES(MODULEB_1, \"WriteToFile\", ves_icall_ModuleBuilder_WriteToFile, void, 2, (MonoReflectionModuleBuilder, FILE_HANDLE))\nHANDLES(MODULEB_2, \"basic_init\", ves_icall_ModuleBuilder_basic_init, void, 1, (MonoReflectionModuleBuilder))\nHANDLES(MODULEB_3, \"build_metadata\", ves_icall_ModuleBuilder_build_metadata, void, 1, (MonoReflectionModuleBuilder))\nHANDLES(MODULEB_5, \"getMethodToken\", ves_icall_ModuleBuilder_getMethodToken, gint32, 3, (MonoReflectionModuleBuilder, MonoReflectionMethod, MonoArray))\nHANDLES(MODULEB_6, \"getToken\", ves_icall_ModuleBuilder_getToken, gint32, 3, (MonoReflectionModuleBuilder, MonoObject, MonoBoolean))\nHANDLES(MODULEB_7, \"getUSIndex\", ves_icall_ModuleBuilder_getUSIndex, guint32, 2, (MonoReflectionModuleBuilder, MonoString))\nHANDLES(MODULEB_9, \"set_wrappers_type\", ves_icall_ModuleBuilder_set_wrappers_type, void, 2, (MonoReflectionModuleBuilder, MonoReflectionType))\n\nICALL_TYPE(SIGH, \"System.Reflection.Emit.SignatureHelper\", SIGH_1)\nHANDLES(SIGH_1, \"get_signature_field\", ves_icall_SignatureHelper_get_signature_field, MonoArray, 1, (MonoReflectionSigHelper))\nHANDLES(SIGH_2, \"get_signature_local\", ves_icall_SignatureHelper_get_signature_local, MonoArray, 1, (MonoReflectionSigHelper))\n\nICALL_TYPE(TYPEB, \"System.Reflection.Emit.TypeBuilder\", TYPEB_1)\nHANDLES(TYPEB_1, \"create_runtime_class\", ves_icall_TypeBuilder_create_runtime_class, MonoReflectionType, 1, (MonoReflectionTypeBuilder))\n\nICALL_TYPE(EVENTI, \"System.Reflection.EventInfo\", EVENTI_1)\nHANDLES(EVENTI_1, \"internal_from_handle_type\", ves_icall_System_Reflection_EventInfo_internal_from_handle_type, MonoReflectionEvent, 2, (MonoEvent_ref, MonoType_ref))\n\nICALL_TYPE(FIELDI, \"System.Reflection.FieldInfo\", FILEDI_1)\nHANDLES(FILEDI_1, \"get_marshal_info\", ves_icall_System_Reflection_FieldInfo_get_marshal_info, MonoReflectionMarshalAsAttribute, 1, (MonoReflectionField))\n\nHANDLES(FILEDI_2, \"internal_from_handle_type\", ves_icall_System_Reflection_FieldInfo_internal_from_handle_type, MonoReflectionField, 2, (MonoClassField_ref, MonoType_ref))\n\nICALL_TYPE(MBASE, \"System.Reflection.MethodBase\", MBASE_1)\nHANDLES(MBASE_1, \"GetCurrentMethod\", ves_icall_GetCurrentMethod, MonoReflectionMethod, 0, ())\n\nICALL_TYPE(MMETHI, \"System.Reflection.MonoMethodInfo\", MMETHI_4)\nNOHANDLES(ICALL(MMETHI_4, \"get_method_attributes\", ves_icall_get_method_attributes))\nHANDLES(MMETHI_1, \"get_method_info\", ves_icall_get_method_info, void, 2, (MonoMethod_ptr, MonoMethodInfo_ref))\nHANDLES(MMETHI_2, \"get_parameter_info\", ves_icall_System_Reflection_MonoMethodInfo_get_parameter_info, MonoArray, 2, (MonoMethod_ptr, MonoReflectionMethod))\nHANDLES(MMETHI_3, \"get_retval_marshal\", ves_icall_System_MonoMethodInfo_get_retval_marshal, MonoReflectionMarshalAsAttribute, 1, (MonoMethod_ptr))\n\nICALL_TYPE(RASSEM, \"System.Reflection.RuntimeAssembly\", RASSEM_1)\nHANDLES(RASSEM_1, \"GetAotIdInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetAotIdInternal, MonoBoolean, 1, (MonoArray))\nHANDLES(RASSEM_2, \"GetFilesInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetFilesInternal, MonoObject, 3, (MonoReflectionAssembly, MonoString, MonoBoolean))\nHANDLES(RASSEM_3, \"GetManifestModuleInternal\", ves_icall_System_Reflection_Assembly_GetManifestModuleInternal, MonoReflectionModule, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_4, \"GetManifestResourceInfoInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetManifestResourceInfoInternal, MonoBoolean, 3, (MonoReflectionAssembly, MonoString, MonoManifestResourceInfo))\nHANDLES(RASSEM_5, \"GetManifestResourceInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetManifestResourceInternal, gpointer, 4, (MonoReflectionAssembly, MonoString, gint32_ref, MonoReflectionModuleOut))\nHANDLES(RASSEM_6, \"GetManifestResourceNames\", ves_icall_System_Reflection_RuntimeAssembly_GetManifestResourceNames, MonoArray, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_7, \"GetModulesInternal\", ves_icall_System_Reflection_RuntimeAssembly_GetModulesInternal, MonoArray, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_8, \"InternalImageRuntimeVersion\", ves_icall_System_Reflection_RuntimeAssembly_InternalImageRuntimeVersion, MonoString, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_9, \"LoadPermissions\", ves_icall_System_Reflection_RuntimeAssembly_LoadPermissions, MonoBoolean, 7, (MonoReflectionAssembly, char_ptr_ref, guint32_ref, char_ptr_ref, guint32_ref, char_ptr_ref, guint32_ref))\nHANDLES(RASSEM_10, \"get_EntryPoint\", ves_icall_System_Reflection_RuntimeAssembly_get_EntryPoint, MonoReflectionMethod, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_11, \"get_ReflectionOnly\", ves_icall_System_Reflection_RuntimeAssembly_get_ReflectionOnly, MonoBoolean, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_12, \"get_code_base\", ves_icall_System_Reflection_RuntimeAssembly_get_code_base, MonoString, 2, (MonoReflectionAssembly, MonoBoolean))\nHANDLES(RASSEM_13, \"get_fullname\", ves_icall_System_Reflection_RuntimeAssembly_get_fullname, MonoString, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_14, \"get_global_assembly_cache\", ves_icall_System_Reflection_RuntimeAssembly_get_global_assembly_cache, MonoBoolean, 1, (MonoReflectionAssembly))\nHANDLES(RASSEM_15, \"get_location\", ves_icall_System_Reflection_RuntimeAssembly_get_location, MonoString, 1, (MonoReflectionAssembly))\n\nICALL_TYPE(MCMETH, \"System.Reflection.RuntimeConstructorInfo\", MCMETH_1)\nHANDLES(MCMETH_1, \"GetGenericMethodDefinition_impl\", ves_icall_RuntimeMethodInfo_GetGenericMethodDefinition, MonoReflectionMethod, 1, (MonoReflectionMethod))\nHANDLES(MCMETH_2, \"InternalInvoke\", ves_icall_InternalInvoke, MonoObject, 4, (MonoReflectionMethod, MonoObject, MonoArray, MonoExceptionOut))\nHANDLES(MCMETH_3, \"get_core_clr_security_level\", ves_icall_RuntimeMethodInfo_get_core_clr_security_level, int, 1, (MonoReflectionMethod))\nHANDLES_REUSE_WRAPPER(MCMETH_4, \"get_metadata_token\", ves_icall_reflection_get_token)\n\nICALL_TYPE(MEV, \"System.Reflection.RuntimeEventInfo\", MEV_1)\nHANDLES(MEV_1, \"get_event_info\", ves_icall_RuntimeEventInfo_get_event_info, void, 2, (MonoReflectionMonoEvent, MonoEventInfo_ref))\nHANDLES_REUSE_WRAPPER(MEV_2, \"get_metadata_token\", ves_icall_reflection_get_token)\n\nICALL_TYPE(MFIELD, \"System.Reflection.RuntimeFieldInfo\", MFIELD_1)\nHANDLES(MFIELD_1, \"GetFieldOffset\", ves_icall_RuntimeFieldInfo_GetFieldOffset, gint32, 1, (MonoReflectionField))\nHANDLES(MFIELD_2, \"GetParentType\", ves_icall_RuntimeFieldInfo_GetParentType, MonoReflectionType, 2, (MonoReflectionField, MonoBoolean))\nHANDLES(MFIELD_3, \"GetRawConstantValue\", ves_icall_RuntimeFieldInfo_GetRawConstantValue, MonoObject, 1, (MonoReflectionField))\nHANDLES(MFIELD_4, \"GetTypeModifiers\", ves_icall_System_Reflection_FieldInfo_GetTypeModifiers, MonoArray, 2, (MonoReflectionField, MonoBoolean))\nHANDLES(MFIELD_5, \"GetValueInternal\", ves_icall_RuntimeFieldInfo_GetValueInternal, MonoObject, 2, (MonoReflectionField, MonoObject))\nHANDLES(MFIELD_6, \"ResolveType\", ves_icall_RuntimeFieldInfo_ResolveType, MonoReflectionType, 1, (MonoReflectionField))\nHANDLES(MFIELD_7, \"SetValueInternal\", ves_icall_RuntimeFieldInfo_SetValueInternal, void, 3, (MonoReflectionField, MonoObject, MonoObject))\nHANDLES_REUSE_WRAPPER(MFIELD_8, \"UnsafeGetValue\", ves_icall_RuntimeFieldInfo_GetValueInternal)\nHANDLES(MFIELD_9, \"get_core_clr_security_level\", ves_icall_RuntimeFieldInfo_get_core_clr_security_level, int, 1, (MonoReflectionField))\nHANDLES_REUSE_WRAPPER(MFIELD_10, \"get_metadata_token\", ves_icall_reflection_get_token)\n\nICALL_TYPE(RMETHODINFO, \"System.Reflection.RuntimeMethodInfo\", RMETHODINFO_1)\nHANDLES(RMETHODINFO_1, \"GetGenericArguments\", ves_icall_RuntimeMethodInfo_GetGenericArguments, MonoArray, 1, (MonoReflectionMethod))\nHANDLES_REUSE_WRAPPER(RMETHODINFO_2, \"GetGenericMethodDefinition_impl\", ves_icall_RuntimeMethodInfo_GetGenericMethodDefinition)\nHANDLES(RMETHODINFO_3, \"GetMethodBodyInternal\", ves_icall_System_Reflection_RuntimeMethodInfo_GetMethodBodyInternal, MonoReflectionMethodBody, 1, (MonoMethod_ptr))\nHANDLES(RMETHODINFO_4, \"GetMethodFromHandleInternalType_native\", ves_icall_System_Reflection_RuntimeMethodInfo_GetMethodFromHandleInternalType_native, MonoReflectionMethod, 3, (MonoMethod_ptr, MonoType_ptr, MonoBoolean))\nHANDLES(RMETHODINFO_5, \"GetPInvoke\", ves_icall_RuntimeMethodInfo_GetPInvoke, void, 4, (MonoReflectionMethod, int_ref, MonoStringOut, MonoStringOut))\nHANDLES_REUSE_WRAPPER(RMETHODINFO_6, \"InternalInvoke\", ves_icall_InternalInvoke)\nHANDLES(RMETHODINFO_7, \"MakeGenericMethod_impl\", ves_icall_RuntimeMethodInfo_MakeGenericMethod_impl, MonoReflectionMethod, 2, (MonoReflectionMethod, MonoArray))\nHANDLES(RMETHODINFO_8, \"get_IsGenericMethod\", ves_icall_RuntimeMethodInfo_get_IsGenericMethod, MonoBoolean, 1, (MonoReflectionMethod))\nHANDLES(RMETHODINFO_9, \"get_IsGenericMethodDefinition\", ves_icall_RuntimeMethodInfo_get_IsGenericMethodDefinition, MonoBoolean, 1, (MonoReflectionMethod))\nHANDLES(RMETHODINFO_10, \"get_base_method\", ves_icall_RuntimeMethodInfo_get_base_method, MonoReflectionMethod, 2, (MonoReflectionMethod, MonoBoolean))\nHANDLES_REUSE_WRAPPER(RMETHODINFO_11, \"get_core_clr_security_level\", ves_icall_RuntimeMethodInfo_get_core_clr_security_level)\nHANDLES_REUSE_WRAPPER(RMETHODINFO_12, \"get_metadata_token\", ves_icall_reflection_get_token)\nHANDLES(RMETHODINFO_13, \"get_name\", ves_icall_RuntimeMethodInfo_get_name, MonoString, 1, (MonoReflectionMethod))\n\nICALL_TYPE(MODULE, \"System.Reflection.RuntimeModule\", MODULE_2)\nHANDLES(MODULE_2, \"GetGlobalType\", ves_icall_System_Reflection_RuntimeModule_GetGlobalType, MonoReflectionType, 1, (MonoImage_ptr))\nHANDLES(MODULE_3, \"GetGuidInternal\", ves_icall_System_Reflection_RuntimeModule_GetGuidInternal, void, 2, (MonoImage_ptr, MonoArray))\nHANDLES(MODULE_14, \"GetHINSTANCE\", ves_icall_System_Reflection_RuntimeModule_GetHINSTANCE, gpointer, 1, (MonoImage_ptr))\nHANDLES(MODULE_4, \"GetMDStreamVersion\", ves_icall_System_Reflection_RuntimeModule_GetMDStreamVersion, gint32, 1, (MonoImage_ptr))\nHANDLES(MODULE_5, \"GetPEKind\", ves_icall_System_Reflection_RuntimeModule_GetPEKind, void, 3, (MonoImage_ptr, gint32_ptr, gint32_ptr))\nHANDLES(MODULE_6, \"InternalGetTypes\", ves_icall_System_Reflection_RuntimeModule_InternalGetTypes, MonoArray, 1, (MonoImage_ptr))\nHANDLES(MODULE_7, \"ResolveFieldToken\", ves_icall_System_Reflection_RuntimeModule_ResolveFieldToken, MonoClassField_ptr, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_8, \"ResolveMemberToken\", ves_icall_System_Reflection_RuntimeModule_ResolveMemberToken, MonoObject, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_9, \"ResolveMethodToken\", ves_icall_System_Reflection_RuntimeModule_ResolveMethodToken, MonoMethod_ptr, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_10, \"ResolveSignature\", ves_icall_System_Reflection_RuntimeModule_ResolveSignature, MonoArray, 3, (MonoImage_ptr, guint32, MonoResolveTokenError_ref))\nHANDLES(MODULE_11, \"ResolveStringToken\", ves_icall_System_Reflection_RuntimeModule_ResolveStringToken, MonoString, 3, (MonoImage_ptr, guint32, MonoResolveTokenError_ref))\nHANDLES(MODULE_12, \"ResolveTypeToken\", ves_icall_System_Reflection_RuntimeModule_ResolveTypeToken, MonoType_ptr, 5, (MonoImage_ptr, guint32, MonoArray, MonoArray, MonoResolveTokenError_ref))\nHANDLES(MODULE_13, \"get_MetadataToken\", ves_icall_reflection_get_token, guint32, 1, (MonoObject))\n\nICALL_TYPE(PARAMI, \"System.Reflection.RuntimeParameterInfo\", MPARAMI_1)\nHANDLES_REUSE_WRAPPER(MPARAMI_1, \"GetMetadataToken\", ves_icall_reflection_get_token)\nHANDLES(MPARAMI_2, \"GetTypeModifiers\", ves_icall_RuntimeParameterInfo_GetTypeModifiers, MonoArray, 4, (MonoReflectionType, MonoObject, int, MonoBoolean))\n\nICALL_TYPE(MPROP, \"System.Reflection.RuntimePropertyInfo\", MPROP_1)\nHANDLES(MPROP_1, \"GetTypeModifiers\", ves_icall_RuntimePropertyInfo_GetTypeModifiers, MonoArray, 2, (MonoReflectionProperty, MonoBoolean))\nHANDLES(MPROP_2, \"get_default_value\", ves_icall_property_info_get_default_value, MonoObject, 1, (MonoReflectionProperty))\nHANDLES_REUSE_WRAPPER(MPROP_3, \"get_metadata_token\", ves_icall_reflection_get_token)\nHANDLES(MPROP_4, \"get_property_info\", ves_icall_RuntimePropertyInfo_get_property_info, void, 3, (MonoReflectionProperty, MonoPropertyInfo_ref, PInfo))\nHANDLES(MPROP_5, \"internal_from_handle_type\", ves_icall_System_Reflection_RuntimePropertyInfo_internal_from_handle_type, MonoReflectionProperty, 2, (MonoProperty_ptr, MonoType_ptr))\n\nICALL_TYPE(RUNH, \"System.Runtime.CompilerServices.RuntimeHelpers\", RUNH_1)\nHANDLES(RUNH_1, \"GetObjectValue\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetObjectValue, MonoObject, 1, (MonoObject))\nHANDLES(RUNH_3, \"InitializeArray\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray, void, 2, (MonoArray, MonoClassField_ptr))\nHANDLES(RUNH_4, \"RunClassConstructor\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_RunClassConstructor, void, 1, (MonoType_ptr))\nHANDLES(RUNH_5, \"RunModuleConstructor\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_RunModuleConstructor, void, 1, (MonoImage_ptr))\nNOHANDLES(ICALL(RUNH_5h, \"SufficientExecutionStack\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_SufficientExecutionStack))\nNOHANDLES(ICALL(RUNH_6, \"get_OffsetToStringData\", ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetOffsetToStringData))\n\nICALL_TYPE(GCH, \"System.Runtime.InteropServices.GCHandle\", GCH_1)\nNOHANDLES(ICALL(GCH_1, \"CheckCurrentDomain\", ves_icall_System_GCHandle_CheckCurrentDomain))\nNOHANDLES(ICALL(GCH_2, \"FreeHandle\", ves_icall_System_GCHandle_FreeHandle))\nNOHANDLES(ICALL(GCH_3, \"GetAddrOfPinnedObject\", ves_icall_System_GCHandle_GetAddrOfPinnedObject))\nHANDLES(GCH_4, \"GetTarget\", ves_icall_System_GCHandle_GetTarget, MonoObject, 1, (guint32))\nHANDLES(GCH_5, \"GetTargetHandle\", ves_icall_System_GCHandle_GetTargetHandle, guint32, 3, (MonoObject, guint32, gint32))\n\n#if !defined(DISABLE_COM) || defined (HOST_WIN32)\nICALL_TYPE(MARSHAL, \"System.Runtime.InteropServices.Marshal\", MARSHAL_1)\nNOHANDLES(ICALL(MARSHAL_1, \"AddRefInternal\", ves_icall_System_Runtime_InteropServices_Marshal_AddRefInternal))\n#else\nICALL_TYPE(MARSHAL, \"System.Runtime.InteropServices.Marshal\", MARSHAL_2)\n#endif\nNOHANDLES(ICALL(MARSHAL_2, \"AllocCoTaskMem\", ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMem))\nNOHANDLES(ICALL(MARSHAL_51,\"AllocCoTaskMemSize(uintptr)\", ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMemSize))\nNOHANDLES(ICALL(MARSHAL_3, \"AllocHGlobal\", ves_icall_System_Runtime_InteropServices_Marshal_AllocHGlobal))\nNOHANDLES(ICALL(MARSHAL_50, \"BufferToBSTR\", ves_icall_System_Runtime_InteropServices_Marshal_BufferToBSTR))\nHANDLES(MARSHAL_4, \"DestroyStructure\", ves_icall_System_Runtime_InteropServices_Marshal_DestroyStructure, void, 2, (gpointer, MonoReflectionType))\nNOHANDLES(ICALL(MARSHAL_5, \"FreeBSTR\", ves_icall_System_Runtime_InteropServices_Marshal_FreeBSTR))\nNOHANDLES(ICALL(MARSHAL_6, \"FreeCoTaskMem\", ves_icall_System_Runtime_InteropServices_Marshal_FreeCoTaskMem))\nNOHANDLES(ICALL(MARSHAL_7, \"FreeHGlobal\", ves_icall_System_Runtime_InteropServices_Marshal_FreeHGlobal))\n#ifndef DISABLE_COM\nHANDLES(MARSHAL_44, \"GetCCW\", ves_icall_System_Runtime_InteropServices_Marshal_GetCCW, gpointer, 2, (MonoObject, MonoReflectionType))\nHANDLES(MARSHAL_8, \"GetComSlotForMethodInfoInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetComSlotForMethodInfoInternal, guint32, 1, (MonoReflectionMethod))\n#endif\nHANDLES(MARSHAL_9, \"GetDelegateForFunctionPointerInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetDelegateForFunctionPointerInternal, MonoDelegate, 2, (gpointer, MonoReflectionType))\nHANDLES(MARSHAL_10, \"GetFunctionPointerForDelegateInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetFunctionPointerForDelegateInternal, gpointer, 1, (MonoDelegate))\n#ifndef DISABLE_COM\nHANDLES(MARSHAL_52, \"GetHRForException_WinRT\", ves_icall_System_Runtime_InteropServices_Marshal_GetHRForException_WinRT, int, 1, (MonoException))\nHANDLES(MARSHAL_45, \"GetIDispatchForObjectInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetIDispatchForObjectInternal, gpointer, 1, (MonoObject))\nHANDLES(MARSHAL_46, \"GetIUnknownForObjectInternal\", ves_icall_System_Runtime_InteropServices_Marshal_GetIUnknownForObjectInternal, gpointer, 1, (MonoObject))\n#endif\nNOHANDLES(ICALL(MARSHAL_11, \"GetLastWin32Error\", ves_icall_System_Runtime_InteropServices_Marshal_GetLastWin32Error))\n#ifndef DISABLE_COM\nHANDLES(MARSHAL_53, \"GetNativeActivationFactory\", ves_icall_System_Runtime_InteropServices_Marshal_GetNativeActivationFactory, MonoObject, 1, (MonoObject))\nHANDLES(MARSHAL_47, \"GetObjectForCCW\", ves_icall_System_Runtime_InteropServices_Marshal_GetObjectForCCW, MonoObject, 1, (gpointer))\nHANDLES(MARSHAL_54, \"GetRawIUnknownForComObjectNoAddRef\", ves_icall_System_Runtime_InteropServices_Marshal_GetRawIUnknownForComObjectNoAddRef, gpointer, 1, (MonoObject))\nHANDLES(MARSHAL_48, \"IsComObject\", ves_icall_System_Runtime_InteropServices_Marshal_IsComObject, MonoBoolean, 1, (MonoObject))\n#endif\nHANDLES(MARSHAL_48a, \"IsPinnableType\", ves_icall_System_Runtime_InteropServices_Marshal_IsPinnableType, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(MARSHAL_12, \"OffsetOf\", ves_icall_System_Runtime_InteropServices_Marshal_OffsetOf, int, 2, (MonoReflectionType, MonoString))\nHANDLES(MARSHAL_13, \"Prelink\", ves_icall_System_Runtime_InteropServices_Marshal_Prelink, void, 1, (MonoReflectionMethod))\nHANDLES(MARSHAL_14, \"PrelinkAll\", ves_icall_System_Runtime_InteropServices_Marshal_PrelinkAll, void, 1, (MonoReflectionType))\nHANDLES(MARSHAL_15, \"PtrToStringAnsi(intptr)\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringAnsi, MonoString, 1, (const_char_ptr))\nHANDLES(MARSHAL_16, \"PtrToStringAnsi(intptr,int)\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringAnsi_len, MonoString, 2, (const_char_ptr, gint32))\nHANDLES(MARSHAL_17, \"PtrToStringBSTR\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringBSTR, MonoString, 1, (mono_bstr_const))\nHANDLES(MARSHAL_18, \"PtrToStringUni(intptr)\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringUni, MonoString, 1, (const_gunichar2_ptr))\nHANDLES(MARSHAL_19, \"PtrToStringUni(intptr,int)\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringUni_len, MonoString, 2, (const_gunichar2_ptr, gint32))\nHANDLES(MARSHAL_20, \"PtrToStructure(intptr,System.Type)\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStructure_type, MonoObject, 2, (gconstpointer, MonoReflectionType))\nHANDLES(MARSHAL_21, \"PtrToStructure(intptr,object)\", ves_icall_System_Runtime_InteropServices_Marshal_PtrToStructure, void, 2, (gconstpointer, MonoObject))\n#if !defined (DISABLE_COM) || defined (HOST_WIN32)\nNOHANDLES(ICALL(MARSHAL_22, \"QueryInterfaceInternal\", ves_icall_System_Runtime_InteropServices_Marshal_QueryInterfaceInternal))\n#endif\nNOHANDLES(ICALL(MARSHAL_43, \"ReAllocCoTaskMem\", ves_icall_System_Runtime_InteropServices_Marshal_ReAllocCoTaskMem))\nNOHANDLES(ICALL(MARSHAL_23, \"ReAllocHGlobal\", ves_icall_System_Runtime_InteropServices_Marshal_ReAllocHGlobal))\n#ifndef DISABLE_COM\nHANDLES(MARSHAL_49, \"ReleaseComObjectInternal\", ves_icall_System_Runtime_InteropServices_Marshal_ReleaseComObjectInternal, gint32, 1, (MonoObject))\n#endif\n#if !defined (DISABLE_COM) || defined (HOST_WIN32)\nNOHANDLES(ICALL(MARSHAL_29, \"ReleaseInternal\", ves_icall_System_Runtime_InteropServices_Marshal_ReleaseInternal))\n#endif\nNOHANDLES(ICALL(MARSHAL_29a, \"SetLastWin32Error\", ves_icall_System_Runtime_InteropServices_Marshal_SetLastWin32Error))\nHANDLES(MARSHAL_30, \"SizeOf\", ves_icall_System_Runtime_InteropServices_Marshal_SizeOf, guint32, 1, (MonoReflectionType))\nHANDLES(MARSHAL_31, \"SizeOfHelper\", ves_icall_System_Runtime_InteropServices_Marshal_SizeOfHelper, guint32, 2, (MonoReflectionType, MonoBoolean))\nNOHANDLES(ICALL(MARSHAL_32, \"StringToHGlobalAnsi\", ves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalAnsi))\nNOHANDLES(ICALL(MARSHAL_33, \"StringToHGlobalUni\", ves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalUni))\nHANDLES(MARSHAL_34, \"StructureToPtr\", ves_icall_System_Runtime_InteropServices_Marshal_StructureToPtr, void, 3, (MonoObject, gpointer, MonoBoolean))\nHANDLES(MARSHAL_35, \"UnsafeAddrOfPinnedArrayElement\", ves_icall_System_Runtime_InteropServices_Marshal_UnsafeAddrOfPinnedArrayElement, gpointer, 2, (MonoArray, int))\nHANDLES(MARSHAL_41, \"copy_from_unmanaged_fixed\", ves_icall_System_Runtime_InteropServices_Marshal_copy_from_unmanaged, void, 5, (gconstpointer, gint32, MonoArray, gint32, gpointer))\nHANDLES(MARSHAL_42, \"copy_to_unmanaged_fixed\", ves_icall_System_Runtime_InteropServices_Marshal_copy_to_unmanaged, void, 5, (MonoArray, gint32, gpointer, gint32, gconstpointer))\n\nICALL_TYPE(RUNTIMEINFO, \"System.Runtime.InteropServices.RuntimeInformation\", RUNTIMEINFO_1)\nHANDLES(RUNTIMEINFO_1, \"GetOSName\", ves_icall_System_Runtime_InteropServices_RuntimeInformation_GetOSName, MonoString, 0, ())\nHANDLES(RUNTIMEINFO_2, \"GetRuntimeArchitecture\", ves_icall_System_Runtime_InteropServices_RuntimeInformation_GetRuntimeArchitecture, MonoString, 0, ())\n\n#ifndef DISABLE_COM\nICALL_TYPE(WINDOWSRUNTIME_UNM, \"System.Runtime.InteropServices.WindowsRuntime.UnsafeNativeMethods\", WINDOWSRUNTIME_UNM_0)\nHANDLES(WINDOWSRUNTIME_UNM_0, \"GetRestrictedErrorInfo\", ves_icall_System_Runtime_InteropServices_WindowsRuntime_UnsafeNativeMethods_GetRestrictedErrorInfo, MonoObject, 0, ())\nHANDLES(WINDOWSRUNTIME_UNM_1, \"RoOriginateLanguageException\", ves_icall_System_Runtime_InteropServices_WindowsRuntime_UnsafeNativeMethods_RoOriginateLanguageException, MonoBoolean, 3, (int, MonoString, gpointer))\nHANDLES(WINDOWSRUNTIME_UNM_2, \"RoReportUnhandledError\", ves_icall_System_Runtime_InteropServices_WindowsRuntime_UnsafeNativeMethods_RoReportUnhandledError, void, 1, (MonoObject))\nHANDLES(WINDOWSRUNTIME_UNM_3, \"WindowsCreateString\", ves_icall_System_Runtime_InteropServices_WindowsRuntime_UnsafeNativeMethods_WindowsCreateString, int, 3, (MonoString, int, gpointer_ptr))\nHANDLES(WINDOWSRUNTIME_UNM_4, \"WindowsDeleteString\", ves_icall_System_Runtime_InteropServices_WindowsRuntime_UnsafeNativeMethods_WindowsDeleteString, int, 1, (gpointer))\nHANDLES(WINDOWSRUNTIME_UNM_5, \"WindowsGetStringRawBuffer\", ves_icall_System_Runtime_InteropServices_WindowsRuntime_UnsafeNativeMethods_WindowsGetStringRawBuffer, mono_unichar2_ptr, 2, (gpointer, unsigned_ptr))\n#endif\n\nICALL_TYPE(ACTS, \"System.Runtime.Remoting.Activation.ActivationServices\", ACTS_1)\nHANDLES(ACTS_1, \"AllocateUninitializedClassInstance\", ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClassInstance, MonoObject, 1, (MonoReflectionType))\nHANDLES(ACTS_2, \"EnableProxyActivation\", ves_icall_System_Runtime_Activation_ActivationServices_EnableProxyActivation, void, 2, (MonoReflectionType, MonoBoolean))\n\nICALL_TYPE(CONTEXT, \"System.Runtime.Remoting.Contexts.Context\", CONTEXT_1)\nHANDLES(CONTEXT_1, \"RegisterContext\", ves_icall_System_Runtime_Remoting_Contexts_Context_RegisterContext, void, 1, (MonoAppContext))\nHANDLES(CONTEXT_2, \"ReleaseContext\", ves_icall_System_Runtime_Remoting_Contexts_Context_ReleaseContext, void, 1, (MonoAppContext))\n\nICALL_TYPE(ARES, \"System.Runtime.Remoting.Messaging.AsyncResult\", ARES_1)\nHANDLES(ARES_1, \"Invoke\", ves_icall_System_Runtime_Remoting_Messaging_AsyncResult_Invoke, MonoObject, 1, (MonoAsyncResult))\n\n#ifndef DISABLE_REMOTING\nICALL_TYPE(REALP, \"System.Runtime.Remoting.Proxies.RealProxy\", REALP_1)\nHANDLES(REALP_1, \"InternalGetProxyType\", ves_icall_Remoting_RealProxy_InternalGetProxyType, MonoReflectionType, 1, (MonoTransparentProxy))\nHANDLES(REALP_2, \"InternalGetTransparentProxy\", ves_icall_Remoting_RealProxy_GetTransparentProxy, MonoObject, 2, (MonoObject, MonoString))\n\nICALL_TYPE(REMSER, \"System.Runtime.Remoting.RemotingServices\", REMSER_0)\nHANDLES(REMSER_0, \"GetVirtualMethod\", ves_icall_Remoting_RemotingServices_GetVirtualMethod, MonoReflectionMethod, 2, (MonoReflectionType, MonoReflectionMethod))\nHANDLES(REMSER_1, \"InternalExecute\", ves_icall_InternalExecute, MonoObject, 4, (MonoReflectionMethod, MonoObject, MonoArray, MonoArrayOut))\nHANDLES(REMSER_2, \"IsTransparentProxy\", ves_icall_IsTransparentProxy, MonoBoolean, 1, (MonoObject))\n#endif\n\nICALL_TYPE(RUNIMPORT, \"System.Runtime.RuntimeImports\", RUNIMPORT_1)\nNOHANDLES(ICALL(RUNIMPORT_1, \"Memmove\", ves_icall_System_Runtime_RuntimeImports_Memmove))\nNOHANDLES(ICALL(RUNIMPORT_2, \"Memmove_wbarrier\", ves_icall_System_Runtime_RuntimeImports_Memmove_wbarrier))\nNOHANDLES(ICALL(RUNIMPORT_3, \"ZeroMemory\", ves_icall_System_Runtime_RuntimeImports_ZeroMemory))\nNOHANDLES(ICALL(RUNIMPORT_4, \"_ecvt_s\", ves_icall_System_Runtime_RuntimeImports_ecvt_s))\n\nICALL_TYPE(RVH, \"System.Runtime.Versioning.VersioningHelper\", RVH_1)\nHANDLES(RVH_1, \"GetRuntimeId\", ves_icall_System_Runtime_Versioning_VersioningHelper_GetRuntimeId, gint32, 0, ())\n\nICALL_TYPE(RFH, \"System.RuntimeFieldHandle\", RFH_1)\nHANDLES(RFH_1, \"GetValueDirect\", ves_icall_System_RuntimeFieldHandle_GetValueDirect, MonoObject, 4, (MonoReflectionField, MonoReflectionType, MonoTypedRef_ptr, MonoReflectionType))\nHANDLES(RFH_1a, \"SetValueDirect\", ves_icall_System_RuntimeFieldHandle_SetValueDirect, void, 5, (MonoReflectionField, MonoReflectionType, MonoTypedRef_ptr, MonoObject, MonoReflectionType))\nHANDLES_REUSE_WRAPPER(RFH_2, \"SetValueInternal\", ves_icall_RuntimeFieldInfo_SetValueInternal)\n\nICALL_TYPE(MHAN, \"System.RuntimeMethodHandle\", MHAN_1)\nHANDLES(MHAN_1, \"GetFunctionPointer\", ves_icall_RuntimeMethodHandle_GetFunctionPointer, gpointer, 1, (MonoMethod_ptr))\n\nICALL_TYPE(RT, \"System.RuntimeType\", RT_1)\nHANDLES(RT_1, \"CreateInstanceInternal\", ves_icall_System_Activator_CreateInstanceInternal, MonoObject, 1, (MonoReflectionType))\nHANDLES(RT_2, \"GetConstructors_native\", ves_icall_RuntimeType_GetConstructors_native, GPtrArray_ptr, 2, (MonoReflectionType, guint32))\nHANDLES(RT_30, \"GetCorrespondingInflatedConstructor\", ves_icall_RuntimeType_GetCorrespondingInflatedMethod, MonoReflectionMethod, 2, (MonoReflectionType, MonoReflectionMethod))\nHANDLES_REUSE_WRAPPER(RT_31, \"GetCorrespondingInflatedMethod\", ves_icall_RuntimeType_GetCorrespondingInflatedMethod)\nHANDLES(RT_3, \"GetEvents_native\", ves_icall_RuntimeType_GetEvents_native, GPtrArray_ptr, 3, (MonoReflectionType, char_ptr, guint32))\nHANDLES(RT_5, \"GetFields_native\", ves_icall_RuntimeType_GetFields_native, GPtrArray_ptr, 4, (MonoReflectionType, char_ptr, guint32, guint32))\nHANDLES(RT_6, \"GetGenericArgumentsInternal\", ves_icall_RuntimeType_GetGenericArguments, MonoArray, 2, (MonoReflectionType, MonoBoolean))\nHANDLES(RT_9, \"GetGenericParameterPosition\", ves_icall_RuntimeType_GetGenericParameterPosition, gint32, 1, (MonoReflectionType))\nHANDLES(RT_10, \"GetInterfaceMapData\", ves_icall_RuntimeType_GetInterfaceMapData, void, 4, (MonoReflectionType, MonoReflectionType, MonoArrayOut, MonoArrayOut))\nHANDLES(RT_11, \"GetInterfaces\", ves_icall_RuntimeType_GetInterfaces, MonoArray, 1, (MonoReflectionType))\nHANDLES(RT_12, \"GetMethodsByName_native\", ves_icall_RuntimeType_GetMethodsByName_native, GPtrArray_ptr, 4, (MonoReflectionType, const_char_ptr, guint32, guint32))\nHANDLES(RT_13, \"GetNestedTypes_native\", ves_icall_RuntimeType_GetNestedTypes_native, GPtrArray_ptr, 4, (MonoReflectionType, char_ptr, guint32, guint32))\nHANDLES(RT_14, \"GetPacking\", ves_icall_RuntimeType_GetPacking, void, 3, (MonoReflectionType, guint32_ref, guint32_ref))\nHANDLES(RT_15, \"GetPropertiesByName_native\", ves_icall_RuntimeType_GetPropertiesByName_native, GPtrArray_ptr, 4, (MonoReflectionType, char_ptr, guint32, guint32))\nHANDLES(RT_16, \"GetTypeCodeImplInternal\", ves_icall_type_GetTypeCodeInternal, guint32, 1, (MonoReflectionType))\nHANDLES(RT_28, \"IsTypeExportedToWindowsRuntime\", ves_icall_System_RuntimeType_IsTypeExportedToWindowsRuntime, MonoBoolean, 0, ())\nHANDLES(RT_29, \"IsWindowsRuntimeObjectType\", ves_icall_System_RuntimeType_IsWindowsRuntimeObjectType, MonoBoolean, 0, ())\nHANDLES(RT_17, \"MakeGenericType\", ves_icall_RuntimeType_MakeGenericType, MonoReflectionType, 2, (MonoReflectionType, MonoArray))\nHANDLES(RT_18, \"MakePointerType\", ves_icall_RuntimeType_MakePointerType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RT_19, \"getFullName\", ves_icall_System_RuntimeType_getFullName, MonoString, 3, (MonoReflectionType, MonoBoolean, MonoBoolean))\nHANDLES(RT_21, \"get_DeclaringMethod\", ves_icall_RuntimeType_get_DeclaringMethod, MonoReflectionMethod, 1, (MonoReflectionType))\nHANDLES(RT_22, \"get_DeclaringType\", ves_icall_RuntimeType_get_DeclaringType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RT_23, \"get_Name\", ves_icall_RuntimeType_get_Name, MonoString, 1, (MonoReflectionType))\nHANDLES(RT_24, \"get_Namespace\", ves_icall_RuntimeType_get_Namespace, MonoString, 1, (MonoReflectionType))\nHANDLES(RT_25, \"get_core_clr_security_level\", ves_icall_RuntimeType_get_core_clr_security_level, int, 1, (MonoReflectionType))\nHANDLES(RT_26, \"make_array_type\", ves_icall_RuntimeType_make_array_type, MonoReflectionType, 2, (MonoReflectionType, int))\nHANDLES(RT_27, \"make_byref_type\", ves_icall_RuntimeType_make_byref_type, MonoReflectionType, 1, (MonoReflectionType))\n\nICALL_TYPE(RTH, \"System.RuntimeTypeHandle\", RTH_1)\nHANDLES(RTH_1, \"GetArrayRank\", ves_icall_RuntimeTypeHandle_GetArrayRank, gint32, 1, (MonoReflectionType))\nHANDLES(RTH_2, \"GetAssembly\", ves_icall_RuntimeTypeHandle_GetAssembly, MonoReflectionAssembly, 1, (MonoReflectionType))\nHANDLES(RTH_3, \"GetAttributes\", ves_icall_RuntimeTypeHandle_GetAttributes, guint32, 1, (MonoReflectionType))\nHANDLES(RTH_4, \"GetBaseType\", ves_icall_RuntimeTypeHandle_GetBaseType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RTH_4a, \"GetCorElementType\", ves_icall_RuntimeTypeHandle_GetCorElementType, guint32, 1, (MonoReflectionType))\nHANDLES(RTH_5, \"GetElementType\", ves_icall_RuntimeTypeHandle_GetElementType, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES(RTH_19, \"GetGenericParameterInfo\", ves_icall_RuntimeTypeHandle_GetGenericParameterInfo, MonoGenericParamInfo_ptr, 1, (MonoReflectionType))\nHANDLES(RTH_6, \"GetGenericTypeDefinition_impl\", ves_icall_RuntimeTypeHandle_GetGenericTypeDefinition_impl, MonoReflectionType, 1, (MonoReflectionType))\nHANDLES_REUSE_WRAPPER(RTH_7, \"GetMetadataToken\", ves_icall_reflection_get_token)\nHANDLES(RTH_8, \"GetModule\", ves_icall_RuntimeTypeHandle_GetModule, MonoReflectionModule, 1, (MonoReflectionType))\nHANDLES(RTH_9, \"HasInstantiation\", ves_icall_RuntimeTypeHandle_HasInstantiation, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_20, \"HasReferences\", ves_icall_RuntimeTypeHandle_HasReferences, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_21, \"IsByRefLike\", ves_icall_RuntimeTypeHandle_IsByRefLike, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_12, \"IsComObject\", ves_icall_RuntimeTypeHandle_IsComObject, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_13, \"IsGenericTypeDefinition\", ves_icall_RuntimeTypeHandle_IsGenericTypeDefinition, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_14, \"IsGenericVariable\", ves_icall_RuntimeTypeHandle_IsGenericVariable, MonoBoolean, 1, (MonoReflectionType))\nHANDLES(RTH_15, \"IsInstanceOfType\", ves_icall_RuntimeTypeHandle_IsInstanceOfType, guint32, 2, (MonoReflectionType, MonoObject))\n//HANDLES(RTH_17a, \"is_subclass_of\", ves_icall_RuntimeTypeHandle_is_subclass_of, MonoBoolean, 2, (MonoType_ptr, MonoType_ptr))\nHANDLES(RTH_17a, \"internal_from_name\", ves_icall_System_RuntimeTypeHandle_internal_from_name, MonoReflectionType, 6, (MonoString, MonoStackCrawlMark_ptr, MonoReflectionAssembly, MonoBoolean, MonoBoolean, MonoBoolean))\nNOHANDLES(ICALL(RTH_17b, \"is_subclass_of\", ves_icall_RuntimeTypeHandle_is_subclass_of))\nHANDLES(RTH_18, \"type_is_assignable_from\", ves_icall_RuntimeTypeHandle_type_is_assignable_from, guint32, 2, (MonoReflectionType, MonoReflectionType))\n\nICALL_TYPE(RNG, \"System.Security.Cryptography.RNGCryptoServiceProvider\", RNG_1)\nHANDLES(RNG_1, \"RngClose\", ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngClose, void, 1, (gpointer))\nHANDLES(RNG_2, \"RngGetBytes\", ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngGetBytes, gpointer, 3, (gpointer, guchar_ptr, gssize))\nHANDLES(RNG_3, \"RngInitialize\", ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngInitialize, gpointer, 2, (const_guchar_ptr, gssize))\nHANDLES(RNG_4, \"RngOpen\", ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngOpen, MonoBoolean, 0, ())\n\nICALL_TYPE(EVID, \"System.Security.Policy.Evidence\", EVID_1)\nHANDLES(EVID_1, \"IsAuthenticodePresent\", ves_icall_System_Security_Policy_Evidence_IsAuthenticodePresent, MonoBoolean, 1, (MonoReflectionAssembly))\n\nICALL_TYPE(WINID, \"System.Security.Principal.WindowsIdentity\", WINID_1)\nHANDLES(WINID_1, \"GetCurrentToken\", ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken, gpointer, 0, ())\nHANDLES(WINID_2, \"GetTokenName\", ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName, MonoString, 1, (gpointer))\nHANDLES(WINID_3, \"GetUserToken\", ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken, gpointer, 1, (MonoString))\nHANDLES(WINID_4, \"_GetRoles\", ves_icall_System_Security_Principal_WindowsIdentity_GetRoles, MonoArray, 1, (gpointer))\n\nICALL_TYPE(WINIMP, \"System.Security.Principal.WindowsImpersonationContext\", WINIMP_1)\nHANDLES(WINIMP_1, \"CloseToken\", ves_icall_System_Security_Principal_WindowsImpersonationContext_CloseToken, MonoBoolean, 1, (gpointer))\nHANDLES(WINIMP_2, \"DuplicateToken\", ves_icall_System_Security_Principal_WindowsImpersonationContext_DuplicateToken, gpointer, 1, (gpointer))\nHANDLES(WINIMP_3, \"RevertToSelf\", ves_icall_System_Security_Principal_WindowsImpersonationContext_RevertToSelf, MonoBoolean, 0, ())\nHANDLES(WINIMP_4, \"SetCurrentToken\", ves_icall_System_Security_Principal_WindowsImpersonationContext_SetCurrentToken, MonoBoolean, 1, (gpointer))\n\nICALL_TYPE(WINPRIN, \"System.Security.Principal.WindowsPrincipal\", WINPRIN_1)\nHANDLES(WINPRIN_1, \"IsMemberOfGroupId\", ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupId, MonoBoolean, 2, (gpointer, gpointer))\nHANDLES(WINPRIN_2, \"IsMemberOfGroupName\", ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupName, MonoBoolean, 2, (gpointer, const_char_ptr))\n\nICALL_TYPE(SECSTRING, \"System.Security.SecureString\", SECSTRING_1)\nHANDLES(SECSTRING_1, \"DecryptInternal\", ves_icall_System_Security_SecureString_DecryptInternal, void, 2, (MonoArray, MonoObject))\nHANDLES(SECSTRING_2, \"EncryptInternal\", ves_icall_System_Security_SecureString_EncryptInternal, void, 2, (MonoArray, MonoObject))\n\nICALL_TYPE(SECMAN, \"System.Security.SecurityManager\", SECMAN_1)\nNOHANDLES(ICALL(SECMAN_1, \"get_RequiresElevatedPermissions\", mono_security_core_clr_require_elevated_permissions))\nNOHANDLES(ICALL(SECMAN_2, \"get_SecurityEnabled\", ves_icall_System_Security_SecurityManager_get_SecurityEnabled))\nNOHANDLES(ICALL(SECMAN_3, \"set_SecurityEnabled\", ves_icall_System_Security_SecurityManager_set_SecurityEnabled))\n\nICALL_TYPE(STRING, \"System.String\", STRING_1)\nNOHANDLES(ICALL(STRING_1, \".ctor(System.ReadOnlySpan`1<char>)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_1a, \".ctor(char*)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_2, \".ctor(char*,int,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_3, \".ctor(char,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_4, \".ctor(char[])\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_5, \".ctor(char[],int,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_6, \".ctor(sbyte*)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_7, \".ctor(sbyte*,int,int)\", ves_icall_System_String_ctor_RedirectToCreateString))\nNOHANDLES(ICALL(STRING_8, \".ctor(sbyte*,int,int,System.Text.Encoding)\", ves_icall_System_String_ctor_RedirectToCreateString))\nHANDLES(STRING_9, \"FastAllocateString\", ves_icall_System_String_FastAllocateString, MonoString, 1, (gint32))\nHANDLES(STRING_10, \"InternalIntern\", ves_icall_System_String_InternalIntern, MonoString, 1, (MonoString))\nHANDLES(STRING_11, \"InternalIsInterned\", ves_icall_System_String_InternalIsInterned, MonoString, 1, (MonoString))\n\nICALL_TYPE(TENC, \"System.Text.EncodingHelper\", TENC_1)\nHANDLES(TENC_1, \"InternalCodePage\", ves_icall_System_Text_EncodingHelper_InternalCodePage, MonoString, 1, (gint32_ref))\n\nICALL_TYPE(UNORM, \"System.Text.Normalization\", UNORM_1)\nHANDLES(UNORM_1, \"load_normalization_resource\", ves_icall_System_Text_Normalization_load_normalization_resource, void, 6, (guint8_ptr_ref, guint8_ptr_ref, guint8_ptr_ref, guint8_ptr_ref, guint8_ptr_ref, guint8_ptr_ref))\n\nICALL_TYPE(ILOCK, \"System.Threading.Interlocked\", ILOCK_1)\nNOHANDLES(ICALL(ILOCK_1, \"Add(int&,int)\", ves_icall_System_Threading_Interlocked_Add_Int))\nNOHANDLES(ICALL(ILOCK_2, \"Add(long&,long)\", ves_icall_System_Threading_Interlocked_Add_Long))\nNOHANDLES(ICALL(ILOCK_4, \"CompareExchange(double&,double,double)\", ves_icall_System_Threading_Interlocked_CompareExchange_Double))\nNOHANDLES(ICALL(ILOCK_5, \"CompareExchange(int&,int,int)\", ves_icall_System_Threading_Interlocked_CompareExchange_Int))\nNOHANDLES(ICALL(ILOCK_6, \"CompareExchange(int&,int,int,bool&)\", ves_icall_System_Threading_Interlocked_CompareExchange_Int_Success))\nNOHANDLES(ICALL(ILOCK_7, \"CompareExchange(intptr&,intptr,intptr)\", ves_icall_System_Threading_Interlocked_CompareExchange_IntPtr))\nNOHANDLES(ICALL(ILOCK_8, \"CompareExchange(long&,long,long)\", ves_icall_System_Threading_Interlocked_CompareExchange_Long))\nNOHANDLES(ICALL(ILOCK_9, \"CompareExchange(object&,object&,object&,object&)\", ves_icall_System_Threading_Interlocked_CompareExchange_Object))\nNOHANDLES(ICALL(ILOCK_10, \"CompareExchange(single&,single,single)\", ves_icall_System_Threading_Interlocked_CompareExchange_Single))\nNOHANDLES(ICALL(ILOCK_11, \"Decrement(int&)\", ves_icall_System_Threading_Interlocked_Decrement_Int))\nNOHANDLES(ICALL(ILOCK_12, \"Decrement(long&)\", ves_icall_System_Threading_Interlocked_Decrement_Long))\nNOHANDLES(ICALL(ILOCK_14, \"Exchange(double&,double)\", ves_icall_System_Threading_Interlocked_Exchange_Double))\nNOHANDLES(ICALL(ILOCK_15, \"Exchange(int&,int)\", ves_icall_System_Threading_Interlocked_Exchange_Int))\nNOHANDLES(ICALL(ILOCK_16, \"Exchange(intptr&,intptr)\", ves_icall_System_Threading_Interlocked_Exchange_IntPtr))\nNOHANDLES(ICALL(ILOCK_17, \"Exchange(long&,long)\", ves_icall_System_Threading_Interlocked_Exchange_Long))\nNOHANDLES(ICALL(ILOCK_18, \"Exchange(object&,object&,object&)\", ves_icall_System_Threading_Interlocked_Exchange_Object))\nNOHANDLES(ICALL(ILOCK_19, \"Exchange(single&,single)\", ves_icall_System_Threading_Interlocked_Exchange_Single))\nNOHANDLES(ICALL(ILOCK_20, \"Increment(int&)\", ves_icall_System_Threading_Interlocked_Increment_Int))\nNOHANDLES(ICALL(ILOCK_21, \"Increment(long&)\", ves_icall_System_Threading_Interlocked_Increment_Long))\nNOHANDLES(ICALL(ILOCK_22, \"MemoryBarrierProcessWide\", ves_icall_System_Threading_Interlocked_MemoryBarrierProcessWide))\nNOHANDLES(ICALL(ILOCK_23, \"Read(long&)\", ves_icall_System_Threading_Interlocked_Read_Long))\n\nICALL_TYPE(ITHREAD, \"System.Threading.InternalThread\", ITHREAD_1)\nHANDLES(ITHREAD_1, \"Thread_free_internal\", ves_icall_System_Threading_InternalThread_Thread_free_internal, void, 1, (MonoInternalThread))\n\nICALL_TYPE(MONIT, \"System.Threading.Monitor\", MONIT_8)\nHANDLES(MONIT_8, \"Enter\", ves_icall_System_Threading_Monitor_Monitor_Enter, void, 1, (MonoObject))\nHANDLES(MONIT_1, \"Exit\", mono_monitor_exit_icall, void, 1, (MonoObject))\nHANDLES(MONIT_2, \"Monitor_pulse\", ves_icall_System_Threading_Monitor_Monitor_pulse, void, 1, (MonoObject))\nHANDLES(MONIT_3, \"Monitor_pulse_all\", ves_icall_System_Threading_Monitor_Monitor_pulse_all, void, 1, (MonoObject))\nHANDLES(MONIT_4, \"Monitor_test_owner\", ves_icall_System_Threading_Monitor_Monitor_test_owner, MonoBoolean, 1, (MonoObject))\nHANDLES(MONIT_5, \"Monitor_test_synchronised\", ves_icall_System_Threading_Monitor_Monitor_test_synchronised, MonoBoolean, 1, (MonoObject))\nHANDLES(MONIT_7, \"Monitor_wait\", ves_icall_System_Threading_Monitor_Monitor_wait, MonoBoolean, 2, (MonoObject, guint32))\nHANDLES(MONIT_9, \"try_enter_with_atomic_var\", ves_icall_System_Threading_Monitor_Monitor_try_enter_with_atomic_var, void, 3, (MonoObject, guint32, MonoBoolean_ref))\n\nICALL_TYPE(MUTEX, \"System.Threading.Mutex\", MUTEX_1)\nHANDLES(MUTEX_1, \"CreateMutex_icall\", ves_icall_System_Threading_Mutex_CreateMutex_icall, gpointer, 4, (MonoBoolean, const_gunichar2_ptr, gint32, MonoBoolean_ref))\nHANDLES(MUTEX_2, \"OpenMutex_icall\", ves_icall_System_Threading_Mutex_OpenMutex_icall, gpointer, 4, (const_gunichar2_ptr, gint32, gint32, gint32_ref))\nNOHANDLES(ICALL(MUTEX_3, \"ReleaseMutex_internal\", ves_icall_System_Threading_Mutex_ReleaseMutex_internal))\n\nICALL_TYPE(NATIVEC, \"System.Threading.NativeEventCalls\", NATIVEC_1)\nNOHANDLES(ICALL(NATIVEC_1, \"CloseEvent_internal\", ves_icall_System_Threading_Events_CloseEvent_internal))\nHANDLES(NATIVEC_2, \"CreateEvent_icall\", ves_icall_System_Threading_Events_CreateEvent_icall, gpointer, 5, (MonoBoolean, MonoBoolean, const_gunichar2_ptr, gint32, gint32_ref))\nHANDLES(NATIVEC_3, \"OpenEvent_icall\", ves_icall_System_Threading_Events_OpenEvent_icall, gpointer, 4, (const_gunichar2_ptr, gint32, gint32, gint32_ref))\nNOHANDLES(ICALL(NATIVEC_4, \"ResetEvent_internal\",  ves_icall_System_Threading_Events_ResetEvent_internal))\nNOHANDLES(ICALL(NATIVEC_5, \"SetEvent_internal\",    ves_icall_System_Threading_Events_SetEvent_internal))\n\nICALL_TYPE(SEMA, \"System.Threading.Semaphore\", SEMA_1)\nNOHANDLES(ICALL(SEMA_1, \"CreateSemaphore_icall\", ves_icall_System_Threading_Semaphore_CreateSemaphore_icall))\nNOHANDLES(ICALL(SEMA_2, \"OpenSemaphore_icall\", ves_icall_System_Threading_Semaphore_OpenSemaphore_icall))\nNOHANDLES(ICALL(SEMA_3, \"ReleaseSemaphore_internal\", ves_icall_System_Threading_Semaphore_ReleaseSemaphore_internal))\n\nICALL_TYPE(THREAD, \"System.Threading.Thread\", THREAD_1)\nHANDLES(THREAD_1, \"Abort_internal(System.Threading.InternalThread,object)\", ves_icall_System_Threading_Thread_Abort, void, 2, (MonoInternalThread, MonoObject))\nHANDLES(THREAD_1a, \"ByteArrayToCurrentDomain(byte[])\", ves_icall_System_Threading_Thread_ByteArrayToCurrentDomain, MonoArray, 1, (MonoArray))\nHANDLES(THREAD_1b, \"ByteArrayToRootDomain(byte[])\", ves_icall_System_Threading_Thread_ByteArrayToRootDomain, MonoArray, 1, (MonoArray))\nHANDLES(THREAD_2, \"ClrState(System.Threading.InternalThread,System.Threading.ThreadState)\", ves_icall_System_Threading_Thread_ClrState, void, 2, (MonoInternalThread, guint32))\nHANDLES(THREAD_2a, \"ConstructInternalThread\", ves_icall_System_Threading_Thread_ConstructInternalThread, void, 1, (MonoThreadObject))\nHANDLES(THREAD_55, \"GetAbortExceptionState\", ves_icall_System_Threading_Thread_GetAbortExceptionState, MonoObject, 1, (MonoThreadObject))\nNOHANDLES(ICALL(THREAD_60, \"GetCurrentThread_icall\", ves_icall_System_Threading_Thread_GetCurrentThread))\nHANDLES(THREAD_7, \"GetDomainID\", ves_icall_System_Threading_Thread_GetDomainID, gint32, 0, ())\nHANDLES(THREAD_8, \"GetName_internal(System.Threading.InternalThread)\", ves_icall_System_Threading_Thread_GetName_internal, MonoString, 1, (MonoInternalThread))\nHANDLES(THREAD_57, \"GetPriorityNative\", ves_icall_System_Threading_Thread_GetPriority, int, 1, (MonoThreadObject))\nHANDLES(THREAD_59, \"GetStackTraces\", ves_icall_System_Threading_Thread_GetStackTraces, void, 2, (MonoArrayOut, MonoArrayOut))\nHANDLES(THREAD_11, \"GetState(System.Threading.InternalThread)\", ves_icall_System_Threading_Thread_GetState, guint32, 1, (MonoInternalThread))\nHANDLES(THREAD_53, \"InterruptInternal\", ves_icall_System_Threading_Thread_Interrupt_internal, void, 1, (MonoThreadObject))\nHANDLES(THREAD_12, \"JoinInternal\", ves_icall_System_Threading_Thread_Join_internal, MonoBoolean, 2, (MonoThreadObject, int))\nNOHANDLES(ICALL(THREAD_13, \"MemoryBarrier\", ves_icall_System_Threading_Thread_MemoryBarrier))\nHANDLES(THREAD_14, \"ResetAbortNative\", ves_icall_System_Threading_Thread_ResetAbort, void, 1, (MonoThreadObject))\nHANDLES(THREAD_15, \"ResumeInternal\", ves_icall_System_Threading_Thread_Resume, void, 1, (MonoThreadObject))\nHANDLES(THREAD_18, \"SetName_icall\", ves_icall_System_Threading_Thread_SetName_icall, void, 3, (MonoInternalThread, const_gunichar2_ptr, gint32))\nHANDLES(THREAD_58, \"SetPriorityNative\", ves_icall_System_Threading_Thread_SetPriority, void, 2, (MonoThreadObject, int))\nHANDLES(THREAD_21, \"SetState(System.Threading.InternalThread,System.Threading.ThreadState)\", ves_icall_System_Threading_Thread_SetState, void, 2, (MonoInternalThread, guint32))\nHANDLES(THREAD_22, \"SleepInternal\", ves_icall_System_Threading_Thread_Sleep_internal, void, 1, (gint32))\nHANDLES(THREAD_54, \"SpinWait_nop\", ves_icall_System_Threading_Thread_SpinWait_nop, void, 0, ())\nHANDLES(THREAD_23, \"SuspendInternal\", ves_icall_System_Threading_Thread_Suspend, void, 1, (MonoThreadObject))\n// FIXME SystemMaxStackStize should be SystemMaxStackSize\nNOHANDLES(ICALL(THREAD_56, \"SystemMaxStackStize\", ves_icall_System_Threading_Thread_SystemMaxStackSize))\nHANDLES(THREAD_25, \"Thread_internal\", ves_icall_System_Threading_Thread_Thread_internal, MonoBoolean, 2, (MonoThreadObject, MonoObject))\nNOHANDLES(ICALL(THREAD_26, \"VolatileRead(byte&)\", ves_icall_System_Threading_Thread_VolatileRead1))\nNOHANDLES(ICALL(THREAD_27, \"VolatileRead(double&)\", ves_icall_System_Threading_Thread_VolatileReadDouble))\nNOHANDLES(ICALL(THREAD_28, \"VolatileRead(int&)\", ves_icall_System_Threading_Thread_VolatileRead4))\nNOHANDLES(ICALL(THREAD_29, \"VolatileRead(int16&)\", ves_icall_System_Threading_Thread_VolatileRead2))\nNOHANDLES(ICALL(THREAD_30, \"VolatileRead(intptr&)\", ves_icall_System_Threading_Thread_VolatileReadIntPtr))\nNOHANDLES(ICALL(THREAD_31, \"VolatileRead(long&)\", ves_icall_System_Threading_Thread_VolatileRead8))\nNOHANDLES(ICALL(THREAD_32, \"VolatileRead(object&)\", ves_icall_System_Threading_Thread_VolatileReadObject))\nNOHANDLES(ICALL(THREAD_33, \"VolatileRead(sbyte&)\", ves_icall_System_Threading_Thread_VolatileRead1))\nNOHANDLES(ICALL(THREAD_34, \"VolatileRead(single&)\", ves_icall_System_Threading_Thread_VolatileReadFloat))\nNOHANDLES(ICALL(THREAD_35, \"VolatileRead(uint&)\", ves_icall_System_Threading_Thread_VolatileRead4))\nNOHANDLES(ICALL(THREAD_36, \"VolatileRead(uint16&)\", ves_icall_System_Threading_Thread_VolatileRead2))\nNOHANDLES(ICALL(THREAD_37, \"VolatileRead(uintptr&)\", ves_icall_System_Threading_Thread_VolatileReadIntPtr))\nNOHANDLES(ICALL(THREAD_38, \"VolatileRead(ulong&)\", ves_icall_System_Threading_Thread_VolatileRead8))\nNOHANDLES(ICALL(THREAD_39, \"VolatileWrite(byte&,byte)\", ves_icall_System_Threading_Thread_VolatileWrite1))\nNOHANDLES(ICALL(THREAD_40, \"VolatileWrite(double&,double)\", ves_icall_System_Threading_Thread_VolatileWriteDouble))\nNOHANDLES(ICALL(THREAD_41, \"VolatileWrite(int&,int)\", ves_icall_System_Threading_Thread_VolatileWrite4))\nNOHANDLES(ICALL(THREAD_42, \"VolatileWrite(int16&,int16)\", ves_icall_System_Threading_Thread_VolatileWrite2))\nNOHANDLES(ICALL(THREAD_43, \"VolatileWrite(intptr&,intptr)\", ves_icall_System_Threading_Thread_VolatileWriteIntPtr))\nNOHANDLES(ICALL(THREAD_44, \"VolatileWrite(long&,long)\", ves_icall_System_Threading_Thread_VolatileWrite8))\nNOHANDLES(ICALL(THREAD_45, \"VolatileWrite(object&,object)\", ves_icall_System_Threading_Thread_VolatileWriteObject))\nNOHANDLES(ICALL(THREAD_46, \"VolatileWrite(sbyte&,sbyte)\", ves_icall_System_Threading_Thread_VolatileWrite1))\nNOHANDLES(ICALL(THREAD_47, \"VolatileWrite(single&,single)\", ves_icall_System_Threading_Thread_VolatileWriteFloat))\nNOHANDLES(ICALL(THREAD_48, \"VolatileWrite(uint&,uint)\", ves_icall_System_Threading_Thread_VolatileWrite4))\nNOHANDLES(ICALL(THREAD_49, \"VolatileWrite(uint16&,uint16)\", ves_icall_System_Threading_Thread_VolatileWrite2))\nNOHANDLES(ICALL(THREAD_50, \"VolatileWrite(uintptr&,uintptr)\", ves_icall_System_Threading_Thread_VolatileWriteIntPtr))\nNOHANDLES(ICALL(THREAD_51, \"VolatileWrite(ulong&,ulong)\", ves_icall_System_Threading_Thread_VolatileWrite8))\nNOHANDLES(ICALL(THREAD_9, \"YieldInternal\", ves_icall_System_Threading_Thread_YieldInternal))\n\nICALL_TYPE(THREADP, \"System.Threading.ThreadPool\", THREADP_2)\nHANDLES(THREADP_2, \"GetAvailableThreadsNative\", ves_icall_System_Threading_ThreadPool_GetAvailableThreadsNative, void, 2, (gint32_ref, gint32_ref))\nHANDLES(THREADP_3, \"GetMaxThreadsNative\", ves_icall_System_Threading_ThreadPool_GetMaxThreadsNative, void, 2, (gint32_ref, gint32_ref))\nHANDLES(THREADP_4, \"GetMinThreadsNative\", ves_icall_System_Threading_ThreadPool_GetMinThreadsNative, void, 2, (gint32_ref, gint32_ref))\nHANDLES(THREADP_5, \"InitializeVMTp\", ves_icall_System_Threading_ThreadPool_InitializeVMTp, void, 1, (MonoBoolean_ref))\nHANDLES(THREADP_7, \"NotifyWorkItemComplete\", ves_icall_System_Threading_ThreadPool_NotifyWorkItemComplete, MonoBoolean, 0, ())\nHANDLES(THREADP_8, \"NotifyWorkItemProgressNative\", ves_icall_System_Threading_ThreadPool_NotifyWorkItemProgressNative, void, 0, ())\nHANDLES(THREADP_8m, \"NotifyWorkItemQueued\", ves_icall_System_Threading_ThreadPool_NotifyWorkItemQueued, void, 0, ())\nHANDLES(THREADP_11, \"ReportThreadStatus\", ves_icall_System_Threading_ThreadPool_ReportThreadStatus, void, 1, (MonoBoolean))\nHANDLES(THREADP_12, \"RequestWorkerThread\", ves_icall_System_Threading_ThreadPool_RequestWorkerThread, MonoBoolean, 0, ())\nHANDLES(THREADP_13, \"SetMaxThreadsNative\", ves_icall_System_Threading_ThreadPool_SetMaxThreadsNative, MonoBoolean, 2, (gint32, gint32))\nHANDLES(THREADP_14, \"SetMinThreadsNative\", ves_icall_System_Threading_ThreadPool_SetMinThreadsNative, MonoBoolean, 2, (gint32, gint32))\n\nICALL_TYPE(TTIMER, \"System.Threading.Timer\", TTIMER_1)\nNOHANDLES(ICALL(TTIMER_1, \"GetTimeMonotonic\", ves_icall_System_Threading_Timer_GetTimeMonotonic))\n\nICALL_TYPE(VOLATILE, \"System.Threading.Volatile\", VOLATILE_1)\nNOHANDLES(ICALL(VOLATILE_1, \"Read(double&)\", ves_icall_System_Threading_Volatile_ReadDouble))\nNOHANDLES(ICALL(VOLATILE_2, \"Read(long&)\", ves_icall_System_Threading_Volatile_Read8))\nNOHANDLES(ICALL(VOLATILE_3, \"Read(ulong&)\", ves_icall_System_Threading_Volatile_ReadU8))\nNOHANDLES(ICALL(VOLATILE_4, \"Write(double&,double)\", ves_icall_System_Threading_Volatile_WriteDouble))\nNOHANDLES(ICALL(VOLATILE_5, \"Write(long&,long)\", ves_icall_System_Threading_Volatile_Write8))\nNOHANDLES(ICALL(VOLATILE_6, \"Write(ulong&,ulong)\", ves_icall_System_Threading_Volatile_WriteU8))\n\nICALL_TYPE(WAITH, \"System.Threading.WaitHandle\", WAITH_1)\nHANDLES(WAITH_1, \"SignalAndWait_Internal\", ves_icall_System_Threading_WaitHandle_SignalAndWait_Internal, gint32, 3, (gpointer, gpointer, gint32))\nHANDLES(WAITH_2, \"Wait_internal\", ves_icall_System_Threading_WaitHandle_Wait_internal, gint32, 4, (gpointer_ptr, gint32, MonoBoolean, gint32))\n\nICALL_TYPE(TYPE, \"System.Type\", TYPE_1)\nHANDLES(TYPE_1, \"internal_from_handle\", ves_icall_System_Type_internal_from_handle, MonoReflectionType, 1, (MonoType_ref))\n\nICALL_TYPE(TYPEDR, \"System.TypedReference\", TYPEDR_1)\nHANDLES(TYPEDR_1, \"InternalMakeTypedReference\", ves_icall_System_TypedReference_InternalMakeTypedReference, void, 4, (MonoTypedRef_ptr, MonoObject, MonoArray, MonoReflectionType))\nHANDLES(TYPEDR_2, \"InternalToObject\", ves_icall_System_TypedReference_ToObject, MonoObject, 1, (MonoTypedRef_ptr))\n\nICALL_TYPE(VALUET, \"System.ValueType\", VALUET_1)\nHANDLES(VALUET_1, \"InternalEquals\", ves_icall_System_ValueType_Equals, MonoBoolean, 3, (MonoObject, MonoObject, MonoArrayOut))\nHANDLES(VALUET_2, \"InternalGetHashCode\", ves_icall_System_ValueType_InternalGetHashCode, gint32, 2, (MonoObject, MonoArrayOut))\n\nICALL_TYPE(WEBIC, \"System.Web.Util.ICalls\", WEBIC_1)\nHANDLES_REUSE_WRAPPER(WEBIC_1, \"GetMachineConfigPath\", ves_icall_System_Configuration_DefaultConfig_get_machine_config_path, MonoString, 0, ())\nHANDLES(WEBIC_2, \"GetMachineInstallDirectory\", ves_icall_System_Web_Util_ICalls_get_machine_install_dir, MonoString, 0, ())\nHANDLES(WEBIC_3, \"GetUnmanagedResourcesPtr\", ves_icall_get_resources_ptr, MonoBoolean, 3, (MonoReflectionAssembly, gpointer_ref, gint32_ref))\n\n#ifndef DISABLE_COM\nICALL_TYPE(COMOBJ, \"System.__ComObject\", COMOBJ_1)\nHANDLES(COMOBJ_1, \"CreateRCW\", ves_icall_System_ComObject_CreateRCW, MonoObject, 1, (MonoReflectionType))\nHANDLES(COMOBJ_2, \"GetInterfaceInternal\", ves_icall_System_ComObject_GetInterfaceInternal, gpointer, 3, (MonoComObject, MonoReflectionType, MonoBoolean))\nHANDLES(COMOBJ_3, \"ReleaseInterfaces\", ves_icall_System_ComObject_ReleaseInterfaces, void, 1, (MonoComObject))\n#endif\n\n#endif\n\n// This is similar to HANDLES() but is for icalls passed to register_jit_icall.\n// There is no metadata for these. No signature matching.\n// Presently their wrappers are less efficient, but hopefully that can be fixed,\n// by making a direct call to them, inserting the LMF below them (possibly,\n// providing it to them via a function pointer, if it cannot be done in C),\n// and of course using managed-style coop handles within them.\n// Alternately, ilgen.\n//\n// This is not just for register_icall, for any time coop wrappers are needed,\n// that there is no metadata for. For example embedding API.\n\n// helper for the managed alloc support\nMONO_HANDLE_REGISTER_ICALL (ves_icall_string_alloc, MonoString, 1, (int))\n\n// Windows: Allocates with CoTaskMemAlloc.\n// Unix: Allocates with g_malloc.\n// Either way: Free with mono_marshal_free (Windows:CoTaskMemFree, Unix:g_free).\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_utf8str, gpointer, 1, (MonoString))\n\nMONO_HANDLE_REGISTER_ICALL (mono_array_to_byte_byvalarray, void, 3, (gpointer, MonoArray, guint32))\nMONO_HANDLE_REGISTER_ICALL (mono_array_to_lparray, gpointer, 1, (MonoArray))\nMONO_HANDLE_REGISTER_ICALL (mono_array_to_savearray, gpointer, 1, (MonoArray))\nMONO_HANDLE_REGISTER_ICALL (mono_byvalarray_to_byte_array, void, 3, (MonoArray, const_char_ptr, guint32))\nMONO_HANDLE_REGISTER_ICALL (mono_delegate_to_ftnptr, gpointer, 1, (MonoDelegate))\nMONO_HANDLE_REGISTER_ICALL (mono_free_lparray, void, 2, (MonoArray, gpointer_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_ftnptr_to_delegate, MonoDelegate, 2, (MonoClass_ptr, gpointer))\nMONO_HANDLE_REGISTER_ICALL (mono_marshal_asany, gpointer, 3, (MonoObject, MonoMarshalNative, int))\nMONO_HANDLE_REGISTER_ICALL (mono_marshal_free_asany, void, 4, (MonoObject, gpointer, MonoMarshalNative, int))\nMONO_HANDLE_REGISTER_ICALL (mono_marshal_string_to_utf16_copy, gunichar2_ptr, 1, (MonoString))\nMONO_HANDLE_REGISTER_ICALL (mono_object_isinst_icall, MonoObject, 2, (MonoObject, MonoClass_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_string_builder_to_utf16, gunichar2_ptr, 1, (MonoStringBuilder))\nMONO_HANDLE_REGISTER_ICALL (mono_string_builder_to_utf8, char_ptr, 1, (MonoStringBuilder))\nMONO_HANDLE_REGISTER_ICALL (mono_string_from_bstr_icall, MonoString, 1, (mono_bstr_const))\nMONO_HANDLE_REGISTER_ICALL (mono_string_from_byvalstr, MonoString, 2, (const_char_ptr, int))\nMONO_HANDLE_REGISTER_ICALL (mono_string_from_byvalwstr, MonoString, 2, (const_gunichar2_ptr, int))\nMONO_HANDLE_REGISTER_ICALL (mono_string_new_len_wrapper, MonoString, 2, (const_char_ptr, guint))\nMONO_HANDLE_REGISTER_ICALL (mono_string_new_wrapper_internal, MonoString, 1, (const_char_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_ansibstr, gpointer, 1, (MonoString))\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_bstr, mono_bstr, 1, (MonoString))\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_byvalstr, void, 3, (char_ptr, MonoString, int))\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_byvalwstr, void, 3, (gunichar2_ptr, MonoString, int))\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_utf16_internal, mono_unichar2_ptr, 1, (MonoString))\nMONO_HANDLE_REGISTER_ICALL (mono_string_to_utf32_internal, mono_unichar4_ptr, 1, (MonoString)) // embedding API\nMONO_HANDLE_REGISTER_ICALL (mono_string_utf16_to_builder, void, 2, (MonoStringBuilder, const_gunichar2_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_string_utf16_to_builder2, MonoStringBuilder, 1, (const_gunichar2_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_string_utf8_to_builder, void, 2, (MonoStringBuilder, const_char_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_string_utf8_to_builder2, MonoStringBuilder, 1, (const_char_ptr))\nMONO_HANDLE_REGISTER_ICALL (mono_type_from_handle, MonoReflectionType, 1, (MonoType_ptr)) // called by icalls\nMONO_HANDLE_REGISTER_ICALL (ves_icall_marshal_alloc, gpointer, 1, (gsize))\nMONO_HANDLE_REGISTER_ICALL (ves_icall_mono_marshal_xdomain_copy_value, MonoObject, 1, (MonoObject))\nMONO_HANDLE_REGISTER_ICALL (ves_icall_mono_string_from_utf16, MonoString, 1, (const_gunichar2_ptr))\nMONO_HANDLE_REGISTER_ICALL (ves_icall_mono_string_to_utf8, char_ptr, 1, (MonoString))\nMONO_HANDLE_REGISTER_ICALL (ves_icall_string_new_wrapper, MonoString, 1, (const_char_ptr))\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_ICALL_INTERNALS_H__\n#define __MONO_METADATA_ICALL_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n#include <mono/metadata/object-internals.h>\n\n// On Windows platform implementation of bellow methods are hosted in separate source file\n// icall-windows.c or icall-windows-*.c. On other platforms the implementation is still keept\n// in icall.c still declared as static and in some places even inlined.\n#ifdef HOST_WIN32\nvoid\nmono_icall_make_platform_path (gchar *path);\n\nconst gchar *\nmono_icall_get_file_path_prefix (const gchar *path);\n\ngpointer\nmono_icall_module_get_hinstance (MonoImage *image);\n\nMonoStringHandle\nmono_icall_get_machine_name (MonoError *error);\n\nint\nmono_icall_get_platform (void);\n\nMonoStringHandle\nmono_icall_get_new_line (MonoError *error);\n\nMonoBoolean\nmono_icall_is_64bit_os (void);\n\nMonoArrayHandle\nmono_icall_get_environment_variable_names (MonoError *error);\n\nvoid\nmono_icall_set_environment_variable (MonoString *name, MonoString *value);\n\nMonoStringHandle\nmono_icall_get_windows_folder_path (int folder, MonoError *error);\n\nvoid\nmono_icall_write_windows_debug_string (const gunichar2 *message);\n\ngint32\nmono_icall_wait_for_input_idle (gpointer handle, gint32 milliseconds);\n#endif  /* HOST_WIN32 */\n\n// On platforms not using classic WIN API support the  implementation of bellow methods are hosted in separate source file\n// icall-windows-*.c. On platforms using classic WIN API the implementation is still keept in icall.c and still declared\n// static and in some places even inlined.\n#if !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\nMonoArray *\nmono_icall_get_logical_drives (void);\n\nguint32\nmono_icall_drive_info_get_drive_type (MonoString *root_path_name);\n#endif  /* !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */\n\ngconstpointer\nmono_lookup_internal_call_full (MonoMethod *method, gboolean warn_on_missing, mono_bool *uses_handles, mono_bool *foreign);\n\nMONO_PAL_API void\nmono_add_internal_call_with_flags (const char *name, const void* method, gboolean cooperative);\n\nMONO_PROFILER_API void\nmono_add_internal_call_internal (const char *name, gconstpointer method);\n\nMonoAssembly*\nmono_runtime_get_caller_from_stack_mark (MonoStackCrawlMark *stack_mark);\n\ntypedef enum {\n\tMONO_ICALL_FLAGS_NONE = 0,\n\tMONO_ICALL_FLAGS_FOREIGN = 1 << 1,\n\tMONO_ICALL_FLAGS_USES_HANDLES = 1 << 2,\n\tMONO_ICALL_FLAGS_COOPERATIVE = 1 << 3\n} MonoInternalCallFlags;\n\ngconstpointer\nmono_lookup_internal_call_full_with_flags (MonoMethod *method, gboolean warn_on_missing, guint32 *flags);\n\ngboolean\nmono_is_missing_icall_addr (gconstpointer addr);\n\n#ifdef __cplusplus\n\n#if !HOST_ANDROID\n\n#include <type_traits>\n\n#endif\n\ntemplate <typename T>\n#if HOST_ANDROID\ninline void\n#else\ninline typename std::enable_if<std::is_function<T>::value ||\n\t\t\t       std::is_function<typename std::remove_pointer<T>::type>::value >::type\n#endif\nmono_add_internal_call_with_flags (const char *name, T method, gboolean cooperative)\n{\n\treturn mono_add_internal_call_with_flags (name, (const void*)method, cooperative);\n}\n\ntemplate <typename T>\n#if HOST_ANDROID\ninline void\n#else\ninline typename std::enable_if<std::is_function<T>::value ||\n\t\t\t       std::is_function<typename std::remove_pointer<T>::type>::value >::type\n#endif\nmono_add_internal_call_internal (const char *name, T method)\n{\n\treturn mono_add_internal_call_internal (name, (const void*)method);\n}\n\n#endif // __cplusplus\n\n#endif /* __MONO_METADATA_ICALL_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-signatures.h",
    "content": "/**\n * \\file\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n *\n * Previously JIT icall signatures were presented as strings,\n * subject to parsing and hashing and allocations and locking.\n * Here they are statically allocated and almost statically initialized.\n * There is no parsing, locking, or hashing.\n */\n#ifndef __MONO_METADATA_ICALL_SIGNATURES_H__\n#define __MONO_METADATA_ICALL_SIGNATURES_H__\n\n// FIXME Some of these are only needed under ifdef.\n// FIXME Some of these are redundant like obj vs. object, int vs. int32.\n//\n// count and types, where first type is return type\n// and the rest are the parameter types.\n//\n// There are tradeoffs either way as to if return\n// type is part of the parameter list.\n//\n// Define the following symbols via token pasting.\n// These are listed here for code search.\n//\n// mono_icall_sig_object\n// mono_icall_sig_ptr\n// mono_icall_sig_void\n// mono_icall_sig_double_double\n// mono_icall_sig_double_int32\n// mono_icall_sig_double_long\n// mono_icall_sig_double_ptr\n// mono_icall_sig_float_long\n// mono_icall_sig_int_obj\n// mono_icall_sig_int16_double\n// mono_icall_sig_int32_double\n// mono_icall_sig_int32_obj\n// mono_icall_sig_int32_object // alias of previous\n// mono_icall_sig_int8_double\n// mono_icall_sig_long_double\n// mono_icall_sig_long_float\n// mono_icall_sig_obj_ptr\n// mono_icall_sig_object_int\n// mono_icall_sig_object_int32\n// mono_icall_sig_object_object\n// mono_icall_sig_object_ptr // alias\n// mono_icall_sig_ptr_int\n// mono_icall_sig_ptr_obj\n// mono_icall_sig_ptr_object // alias of previous\n// mono_icall_sig_ptr_ptr\n// mono_icall_sig_uint16_double\n// mono_icall_sig_uint32_double\n// mono_icall_sig_uint32_float\n// mono_icall_sig_uint8_double\n// mono_icall_sig_ulong_double\n// mono_icall_sig_ulong_float\n// mono_icall_sig_void_int\n// mono_icall_sig_void_int32\n// mono_icall_sig_void_object\n// mono_icall_sig_void_ptr\n// mono_icall_sig_bool_ptr_ptrref\n// mono_icall_sig_double_double_double\n// mono_icall_sig_float_float_float\n// mono_icall_sig_int_obj_ptr\n// mono_icall_sig_int32_int32_int32\n// mono_icall_sig_int32_int32_ptr\n// mono_icall_sig_int32_int32_ptrref\n// mono_icall_sig_int32_ptr_ptr\n// mono_icall_sig_int32_ptr_ptrref\n// mono_icall_sig_long_long_int32\n// mono_icall_sig_long_long_long\n// mono_icall_sig_obj_ptr_int // alias\n// mono_icall_sig_object_int_object\n// mono_icall_sig_object_object_ptr\n// mono_icall_sig_object_ptr_int\n// mono_icall_sig_object_ptr_int32\n// mono_icall_sig_object_ptr_ptr\n// mono_icall_sig_ptr_int32_ptrref\n// mono_icall_sig_ptr_object_ptr\n// mono_icall_sig_ptr_ptr_int\n// mono_icall_sig_ptr_ptr_int32\n// mono_icall_sig_ptr_ptr_ptr\n// mono_icall_sig_ptr_ptr_ptrref\n// mono_icall_sig_ptr_uint32_ptrref\n// mono_icall_sig_uint32_double_double\n// mono_icall_sig_uint32_ptr_int32\n// mono_icall_sig_void_double_ptr\n// mono_icall_sig_void_int32_ptrref\n// mono_icall_sig_void_obj_ptr\n// mono_icall_sig_void_object_object\n// mono_icall_sig_void_object_ptr // alias\n// mono_icall_sig_void_ptr_int\n// mono_icall_sig_void_ptr_int32\n// mono_icall_sig_void_ptr_object\n// mono_icall_sig_void_ptr_ptr\n// mono_icall_sig_void_ptr_ptrref\n// mono_icall_sig_void_uint32_ptrref\n// mono_icall_sig_bool_ptr_int32_ptrref\n// mono_icall_sig_int32_int32_ptr_ptrref\n// mono_icall_sig_int32_ptr_int32_ptr\n// mono_icall_sig_int32_ptr_int32_ptrref\n// mono_icall_sig_object_int_object_object\n// mono_icall_sig_object_object_ptr_ptr\n// mono_icall_sig_object_ptr_int_int\n// mono_icall_sig_object_ptr_int_int32\n// mono_icall_sig_object_ptr_int_ptr\n// mono_icall_sig_object_ptr_ptr_int32\n// mono_icall_sig_ptr_object_int32_int32\n// mono_icall_sig_ptr_object_ptr_ptr\n// mono_icall_sig_ptr_ptr_int_ptr\n// mono_icall_sig_ptr_ptr_int32_ptrref\n// mono_icall_sig_ptr_ptr_ptr_ptr\n// mono_icall_sig_ptr_ptr_ptr_ptrref\n// mono_icall_sig_ptr_ptr_uint32_ptrref\n// mono_icall_sig_void_object_object_ptr\n// mono_icall_sig_void_object_ptr_int32\n// mono_icall_sig_void_ptr_int_object\n// mono_icall_sig_void_ptr_int_ptr\n// mono_icall_sig_void_ptr_object_int32\n// mono_icall_sig_void_ptr_ptr_int\n// mono_icall_sig_void_ptr_ptr_int32\n// mono_icall_sig_void_ptr_ptr_ptr\n// mono_icall_sig_void_ptr_ptr_ptrref\n// mono_icall_sig_int32_object_ptr_ptr_ptr\n// mono_icall_sig_object_object_ptr_ptr_ptr\n// mono_icall_sig_object_ptr_int_int_int\n// mono_icall_sig_ptr_object_int_ptr_ptr\n// mono_icall_sig_ptr_ptr_int32_ptr_ptrref\n// mono_icall_sig_ptr_ptr_ptr_int32_ptrref\n// mono_icall_sig_ptr_ptr_ptr_ptr_ptrref\n// mono_icall_sig_ptr_ptr_ptr_ptrref_ptrref\n// mono_icall_sig_void_object_ptr_int32_int32\n// mono_icall_sig_void_object_ptr_ptr_ptr\n// mono_icall_sig_void_ptr_int_int_object\n// mono_icall_sig_void_ptr_ptr_ptr_ptr\n// mono_icall_sig_ptr_ptr_ptr_ptr_ptr\n// mono_icall_sig_int_int_int_ptr_ptr_ptr\n// mono_icall_sig_int_ptr_int_int_ptr_object\n// mono_icall_sig_object_ptr_int_int_int_int\n// mono_icall_sig_object_ptr_ptr_ptr_ptr_ptr\n// mono_icall_sig_ptr_ptr_int32_ptr_ptr_ptrref\n// mono_icall_sig_void_ptr_ptr_int32_ptr_ptrref\n// mono_icall_sig_void_ptr_ptr_ptr_ptr_ptr\n// mono_icall_sig_ptr_ptr_ptr_ptr_ptr_ptr\n// mono_icall_sig_int32_ptr_ptr_ptr_ptr_ptr_int32\n// mono_icall_sig_void_ptr_ptr_ptr_ptr_ptr_ptr\n// mono_icall_sig_ptr_ptr_ptr_ptr_ptr_ptr_ptr\n// mono_icall_sig_void_ptr_ptr_int32_ptr_ptrref_ptr_ptrref\n\n#define ICALL_SIGS\t\t\t\t\\\nICALL_SIG (1, (object))\t\t\t\t\\\nICALL_SIG (1, (ptr))\t\t\t\t\\\nICALL_SIG (1, (void))\t\t\t\t\\\nICALL_SIG (2, (double, double))\t\t\t\\\nICALL_SIG (2, (double, int32))\t\t\t\\\nICALL_SIG (2, (double, long))\t\t\t\\\nICALL_SIG (2, (double, ptr))\t\t\t\\\nICALL_SIG (2, (float, long))\t\t\t\\\nICALL_SIG (2, (int, obj))\t\t\t\\\nICALL_SIG (2, (int16, double))\t\t\t\\\nICALL_SIG (2, (int32, double))\t\t\t\\\nICALL_SIG (2, (int32, obj))\t\t\t\\\nICALL_SIG (2, (int32, object))\t\t\t\\\nICALL_SIG (2, (int8, double))\t\t\t\\\nICALL_SIG (2, (long, double))\t\t\t\\\nICALL_SIG (2, (long, float))\t\t\t\\\nICALL_SIG (2, (obj, ptr))\t\t\t\\\nICALL_SIG (2, (object, int))\t\t\t\\\nICALL_SIG (2, (object, int32))\t\t\t\\\nICALL_SIG (2, (object, object))\t\t\t\\\nICALL_SIG (2, (object, ptr))\t\t\t\\\nICALL_SIG (2, (ptr, int))\t\t\t\\\nICALL_SIG (2, (ptr, obj))\t\t\t\\\nICALL_SIG (2, (ptr, object))\t\t\t\\\nICALL_SIG (2, (ptr, ptr))\t\t\t\\\nICALL_SIG (2, (uint16, double))\t\t\t\\\nICALL_SIG (2, (uint32, double))\t\t\t\\\nICALL_SIG (2, (uint32, float))\t\t\t\\\nICALL_SIG (2, (uint8, double))\t\t\t\\\nICALL_SIG (2, (ulong, double))\t\t\t\\\nICALL_SIG (2, (ulong, float))\t\t\t\\\nICALL_SIG (2, (void, int))\t\t\t\\\nICALL_SIG (2, (void, int32))\t\t\t\\\nICALL_SIG (2, (void, object))\t\t\t\\\nICALL_SIG (2, (void, ptr))\t\t\t\\\nICALL_SIG (3, (bool, ptr, ptrref))\t\t\\\nICALL_SIG (3, (double, double, double))\t\t\\\nICALL_SIG (3, (float, float, float))\t\t\\\nICALL_SIG (3, (int, obj, ptr))\t\t\t\\\nICALL_SIG (3, (int32, int32, int32))\t\t\\\nICALL_SIG (3, (int32, int32, ptr))\t\t\\\nICALL_SIG (3, (int32, int32, ptrref))\t\t\\\nICALL_SIG (3, (int32, ptr, ptr))\t\t\\\nICALL_SIG (3, (int32, ptr, ptrref))\t\t\\\nICALL_SIG (3, (long, long, int32))\t\t\\\nICALL_SIG (3, (long, long, long))\t\t\\\nICALL_SIG (3, (obj, ptr, int))\t\t\t\\\nICALL_SIG (3, (object, int, object))\t\t\\\nICALL_SIG (3, (object, object, ptr))\t\t\\\nICALL_SIG (3, (object, ptr, int))\t\t\\\nICALL_SIG (3, (object, ptr, int32))\t\t\\\nICALL_SIG (3, (object, ptr, ptr))\t\t\\\nICALL_SIG (3, (ptr, int32, ptrref))\t\t\\\nICALL_SIG (3, (ptr, object, ptr))\t\t\\\nICALL_SIG (3, (ptr, ptr, int))\t\t\t\\\nICALL_SIG (3, (ptr, ptr, int32))\t\t\\\nICALL_SIG (3, (ptr, ptr, ptr))\t\t\t\\\nICALL_SIG (3, (ptr, ptr, ptrref))\t\t\\\nICALL_SIG (3, (ptr, uint32, ptrref))\t\t\\\nICALL_SIG (3, (uint32, double, double))\t\t\\\nICALL_SIG (3, (uint32, ptr, int32))\t\t\\\nICALL_SIG (3, (void, double, ptr))\t\t\\\nICALL_SIG (3, (void, int32, ptrref))\t\t\\\nICALL_SIG (3, (void, obj, ptr))\t\t\t\\\nICALL_SIG (3, (void, object, object))\t\t\\\nICALL_SIG (3, (void, object, ptr))\t\t\\\nICALL_SIG (3, (void, ptr, int))\t\t\t\\\nICALL_SIG (3, (void, ptr, int32))\t\t\\\nICALL_SIG (3, (void, ptr, object))\t\t\\\nICALL_SIG (3, (void, ptr, ptr))\t\t\t\\\nICALL_SIG (3, (void, ptr, ptrref))\t\t\\\nICALL_SIG (3, (void, uint32, ptrref))\t\t\\\nICALL_SIG (4, (bool, ptr, int32, ptrref))\t\\\nICALL_SIG (4, (int32, int32, ptr, ptrref))\t\\\nICALL_SIG (4, (int32, ptr, int32, ptr))\t\t\\\nICALL_SIG (4, (int32, ptr, int32, ptrref))\t\\\nICALL_SIG (4, (object, int, object, object))\t\\\nICALL_SIG (4, (object, object, ptr, ptr))\t\\\nICALL_SIG (4, (object, ptr, int, int))\t\t\\\nICALL_SIG (4, (object, ptr, int, int32))\t\\\nICALL_SIG (4, (object, ptr, int, ptr))\t    \\\nICALL_SIG (4, (object, ptr, ptr, int32))\t\\\nICALL_SIG (4, (ptr, object, int32, int32))\t\\\nICALL_SIG (4, (ptr, object, ptr, ptr))\t\t\\\nICALL_SIG (4, (ptr, ptr, int, ptr))\t\t\\\nICALL_SIG (4, (ptr, ptr, int32, ptrref))\t\\\nICALL_SIG (4, (ptr, ptr, ptr, ptr))\t\t\\\nICALL_SIG (4, (ptr, ptr, ptr, ptrref))\t\t\\\nICALL_SIG (4, (ptr, ptr, uint32, ptrref))\t\\\nICALL_SIG (4, (void, object, object, ptr))\t\\\nICALL_SIG (4, (void, object, ptr, int32))\t\\\nICALL_SIG (4, (void, ptr, int, object))\t\t\\\nICALL_SIG (4, (void, ptr, int, ptr))\t\t\\\nICALL_SIG (4, (void, ptr, object, int32))\t\\\nICALL_SIG (4, (void, ptr, ptr, int))\t\t\\\nICALL_SIG (4, (void, ptr, ptr, int32))\t\t\\\nICALL_SIG (4, (void, ptr, ptr, ptr))\t\t\\\nICALL_SIG (4, (void, ptr, ptr, ptrref))\t\\\nICALL_SIG (5, (int32, object, ptr, ptr, ptr)) \t\\\nICALL_SIG (5, (object, object, ptr, ptr, ptr))\t\\\nICALL_SIG (5, (object, ptr, int, int, int))\t\\\nICALL_SIG (5, (ptr, object, int, ptr, ptr))\t\\\nICALL_SIG (5, (ptr, ptr, int32, ptr, ptrref))\t\\\nICALL_SIG (5, (ptr, ptr, ptr, int32, ptrref))\t\\\nICALL_SIG (5, (ptr, ptr, ptr, ptr, ptrref))\t\\\nICALL_SIG (5, (ptr, ptr, ptr, ptrref, ptrref))\t\\\nICALL_SIG (5, (void, object, ptr, int32, int32)) \t\\\nICALL_SIG (5, (void, object, ptr, ptr, ptr))\t\t\\\nICALL_SIG (5, (void, ptr, int, int, object))\t\t\\\nICALL_SIG (5, (void, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (5, (void, ptr, ptr, int, object))\t\\\nICALL_SIG (5, (void, ptr, ptr, int, ptr))\t\\\nICALL_SIG (5, (ptr, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (6, (int, int, int, ptr, ptr, ptr))\t\t\\\nICALL_SIG (6, (int, ptr, int, int, ptr, object))\t\\\nICALL_SIG (6, (object, ptr, int, int, int, int))\t\\\nICALL_SIG (6, (object, ptr, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (6, (ptr, ptr, int32, ptr, ptr, ptrref))\t\\\nICALL_SIG (6, (void, ptr, ptr, int32, ptr, ptrref))\t\\\nICALL_SIG (6, (void, ptr, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (6, (ptr, ptr, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (7, (int32, ptr, ptr, ptr, ptr, ptr, int32))\t\\\nICALL_SIG (7, (void, ptr, ptr, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (7, (ptr, ptr, ptr, ptr, ptr, ptr, ptr))\t\\\nICALL_SIG (8, (void, ptr, ptr, int32, ptr, ptrref, ptr, ptrref)) \t\\\n\n// ICALL_SIG_NAME: mono_icall_sig pasted with its parameters with underscores between each.\n#define ICALL_SIG_NAME_1(a) \t\t \t mono_icall_sig_ ## a\n#define ICALL_SIG_NAME_2(a, b) \t\t \t mono_icall_sig_ ## a ## _ ## b\n#define ICALL_SIG_NAME_3(a, b, c) \t \t mono_icall_sig_ ## a ## _ ## b ## _ ## c\n#define ICALL_SIG_NAME_4(a, b, c, d) \t \t mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d\n#define ICALL_SIG_NAME_5(a, b, c, d, e)    \t mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e\n#define ICALL_SIG_NAME_6(a, b, c, d, e, f) \t mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f\n#define ICALL_SIG_NAME_7(a, b, c, d, e, f, g)\t mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f ## _ ## g\n#define ICALL_SIG_NAME_8(a, b, c, d, e, f, g, h) mono_icall_sig_ ## a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f ## _ ## g ## _ ## h\n\n#define ICALL_SIG_NAME(n, types) ICALL_SIG_NAME_ ## n types\n\n// Declare each icall_sig as a MonoMethodSignature * const.\n// The address is constant but the contents are not quite.\n#define ICALL_SIG(n, types) extern MonoMethodSignature * const ICALL_SIG_NAME (n, types);\n\nICALL_SIGS\n\n#undef ICALL_SIG\n\nvoid\nmono_create_icall_signatures (void);\n\n#endif // __MONO_METADATA_ICALL_SIGNATURES_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-table.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_ICALL_TABLE_H__\n#define __MONO_METADATA_ICALL_TABLE_H__\n\n#include <config.h>\n#include <glib.h>\n#include <mono/utils/mono-publib.h>\n#include \"marshal.h\"\n#include \"icalls.h\"\n\n#define MONO_ICALL_TABLE_CALLBACKS_VERSION 2\n\ntypedef struct {\n\tint version;\n\tgpointer (*lookup) (MonoMethod *method, char *classname, char *methodname, char *sigstart, gboolean *uses_handles);\n\tconst char* (*lookup_icall_symbol) (gpointer func);\n} MonoIcallTableCallbacks;\n\nICALL_EXTERN_C\nvoid\nmono_install_icall_table_callbacks (const MonoIcallTableCallbacks *cb);\n\nMONO_API void\nmono_icall_table_init (void);\n\n// It helps for types to be single tokens, though this can be relaxed in some places.\n// Marshaling a \"ptr\" does nothing -- just pass it on unchanged.\n// Marshaling a \"ref\" also does nothing at this layer, but\n// creates a handle in  marshal-ilgen.c.\n// \"ref\" means \"can be an interior pointer\".\n// \"ptr\" means \"to a local\".\n// It is generally difficult to know, and \"ref\" is safer.\n// Presently it does not matter.\ntypedef gint32  *gint32_ptr;\ntypedef gsize *gsize_ptr;\ntypedef guchar *guchar_ptr;\ntypedef const guchar *const_guchar_ptr;\ntypedef gpointer *gpointer_ptr;\ntypedef const char *const_char_ptr;\ntypedef char *char_ptr;\ntypedef char **char_ptr_ptr;\ntypedef gunichar2 *gunichar2_ptr;\ntypedef const gunichar2 *const_gunichar2_ptr;\ntypedef int *int_ptr;\ntypedef int **int_ptr_ref;\ntypedef guint8 **guint8_ptr_ref;\ntypedef GPtrArray *GPtrArray_ptr;\n// HANDLE is not used just to avoid duplicate typedef warnings with some compilers.\n// gpointer == void* == HANDLE == FILE_HANDLE == PROCESS_HANDLE.\ntypedef gpointer PROCESS_HANDLE;\ntypedef gpointer FILE_HANDLE;\ntypedef MonoAssemblyName *MonoAssemblyName_ptr;\ntypedef MonoBoolean *MonoBoolean_ptr;\ntypedef MonoClass *MonoClass_ptr;\ntypedef MonoClassField *MonoClassField_ptr;\ntypedef MonoEvent *MonoEvent_ptr;\ntypedef MonoImage *MonoImage_ptr;\ntypedef MonoMethod *MonoMethod_ptr;\ntypedef MonoProperty *MonoProperty_ptr;\ntypedef MonoPropertyInfo *MonoPropertyInfo_ref;\ntypedef MonoType *MonoType_ptr;\ntypedef MonoTypedRef *MonoTypedRef_ptr;\ntypedef MonoStackCrawlMark *MonoStackCrawlMark_ptr;\ntypedef MonoVTable *MonoVTable_ptr;\ntypedef unsigned *unsigned_ptr;\ntypedef mono_unichar2 *mono_unichar2_ptr;\ntypedef mono_unichar4 *mono_unichar4_ptr;\ntypedef WSABUF *WSABUF_ptr;\n\ntypedef char **char_ptr_ref;\ntypedef gint32  *gint32_ref;\ntypedef gint64  *gint64_ref;\ntypedef gpointer *gpointer_ref;\ntypedef gsize *gsize_ref;\ntypedef guint32 *guint32_ref;\ntypedef guint64 *guint64_ref;\ntypedef int *int_ref;\ntypedef MonoAssemblyName *MonoAssemblyName_ref;\ntypedef MonoBoolean *MonoBoolean_ref;\ntypedef MonoClassField *MonoClassField_ref;\ntypedef MonoEvent *MonoEvent_ref;\ntypedef MonoEventInfo *MonoEventInfo_ref;\ntypedef MonoGenericParamInfo *MonoGenericParamInfo_ptr;\ntypedef MonoMethod *MonoMethod_ref;\ntypedef MonoMethodInfo *MonoMethodInfo_ref;\ntypedef MonoResolveTokenError *MonoResolveTokenError_ref;\ntypedef MonoType *MonoType_ref;\ntypedef MonoTypedRef *MonoTypedRef_ref;\ntypedef MonoW32ProcessInfo *MonoW32ProcessInfo_ref;\n\n// Maybe do this in TYPED_HANDLE_DECL.\ntypedef MonoArray MonoArrayOut;\ntypedef MonoArray MonoArrayInOut;\ntypedef MonoArrayHandle MonoArrayOutHandle;\ntypedef MonoArrayHandle MonoArrayInOutHandle;\ntypedef MonoException MonoExceptionOut;\ntypedef MonoExceptionHandle MonoExceptionOutHandle;\ntypedef MonoObject MonoObjectOut;\ntypedef MonoObject MonoObjectInOut;\ntypedef MonoObjectHandle MonoObjectOutHandle;\ntypedef MonoObjectHandle MonoObjectInOutHandle;\ntypedef MonoReflectionModule MonoReflectionModuleOut;\ntypedef MonoReflectionModuleHandle MonoReflectionModuleOutHandle;\ntypedef MonoString MonoStringOut;\ntypedef MonoStringHandle MonoStringOutHandle;\n\n// How the arguments and return value of an icall should be wrapped.\n// The names and meanings are from marshal-ilgen.c.\n// \tICALL_HANDLES_WRAP_NONE\n// \tICALL_HANDLES_WRAP_OBJ\n// \tICALL_HANDLES_WRAP_OBJ_INOUT\n// \tICALL_HANDLES_WRAP_OBJ_OUT\n// \tICALL_HANDLES_WRAP_VALUETYPE_REF\n//\n// In the present implementation, all that matters is, handle-or-not,\n// in and out and inout are the same, and none and valuetype_ref are the same.\n// Handle creation is in marshal-ilgen.c.\n\n// Map a type to a type class: Void and above.\n#define MONO_HANDLE_TYPE_WRAP_void \t\t\tVoid\n#define MONO_HANDLE_TYPE_WRAP_GPtrArray_ptr  \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoBoolean   \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_const_gunichar2_ptr\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gunichar2_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gint   \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gint32   \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gint64   \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gpointer   \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gconstpointer   \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gsize   \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gssize   \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_guchar_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_guint     \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_const_guchar_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_guint32  \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_guint64  \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_int \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_uint     \t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_PInfo\t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_mono_bstr\t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_mono_bstr_const\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_unsigned_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_mono_unichar2_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_mono_unichar4_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoImage_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoClassField_ptr\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoMarshalNative\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoProperty_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoProtocolType\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_size_t\t\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoVTable_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_WSABUF_ptr\t\tICALL_HANDLES_WRAP_NONE\n\n#define MONO_HANDLE_TYPE_WRAP_MonoAssemblyName_ref\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoBoolean_ref \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoClassField_ref  \tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoEvent_ref\t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoEventInfo_ref\t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoMethod_ref \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoMethodInfo_ref\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoPropertyInfo_ref\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoType_ref  \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoTypedRef_ref \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_gint32_ref   \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_gint64_ref  \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_gpointer_ref   \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_gsize_ref   \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_guint32_ref   \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_guint64_ref   \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_int_ref  \t\t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_gint32_ref  \t\t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_int_ptr_ref  \t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_char_ptr_ref\t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_guint8_ptr_ref\t\tICALL_HANDLES_WRAP_VALUETYPE_REF\n#define MONO_HANDLE_TYPE_WRAP_MonoResolveTokenError_ref\tICALL_HANDLES_WRAP_VALUETYPE_REF\n\n// HANDLE is not used just to avoid duplicate typedef warnings with some compilers.\n// gpointer == void* == HANDLE == FILE_HANDLE == PROCESS_HANDLE.\n#define MONO_HANDLE_TYPE_WRAP_char_ptr   \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_const_char_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_FILE_HANDLE\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoClass_ptr  \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoEvent_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoGenericParamInfo_ptr\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoMethod_ptr \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoType_ptr  \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoTypedRef_ptr \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_MonoStackCrawlMark_ptr  \tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gint32_ptr   \t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_gpointer_ptr\t\tICALL_HANDLES_WRAP_NONE\n#define MONO_HANDLE_TYPE_WRAP_PROCESS_HANDLE\t\tICALL_HANDLES_WRAP_NONE\n\n// Please keep this sorted (grep ICALL_HANDLES_WRAP_OBJ$ | sort)\n#define MONO_HANDLE_TYPE_WRAP_MonoAppContext \t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoAppDomain\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoAppDomainSetup\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoArray\t\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoAsyncResult\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoCalendarData\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoComInteropProxy\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoComObject\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoCultureData\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoCultureInfo\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoDelegate\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoException\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoInternalThread\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoIOSelectorJob\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoObject\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoManifestResourceInfo \t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoMulticastDelegate\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionAssembly\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionAssemblyBuilder \tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionDynamicMethod \tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionEvent\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionMonoEvent\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionField\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionMarshalAsAttribute\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionMethod     \t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionMethodBody \t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionModule \t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionModuleBuilder \tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionParameter\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionProperty\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionSigHelper\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionType\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionTypeBuilder\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoRegionInfo\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoString\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoStringBuilder\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoThreadObject\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoTransparentProxy\t\t\tICALL_HANDLES_WRAP_OBJ\n#define MONO_HANDLE_TYPE_WRAP_MonoW32ProcessStartInfo\t\tICALL_HANDLES_WRAP_OBJ\n\n#define MONO_HANDLE_TYPE_WRAP_MonoExceptionOut\t\tICALL_HANDLES_WRAP_OBJ_OUT\n#define MONO_HANDLE_TYPE_WRAP_MonoObjectOut\t\tICALL_HANDLES_WRAP_OBJ_OUT\n#define MONO_HANDLE_TYPE_WRAP_MonoStringOut\t\tICALL_HANDLES_WRAP_OBJ_OUT\n#define MONO_HANDLE_TYPE_WRAP_MonoArrayOut\t\tICALL_HANDLES_WRAP_OBJ_OUT\n#define MONO_HANDLE_TYPE_WRAP_MonoReflectionModuleOut \tICALL_HANDLES_WRAP_OBJ_OUT\n\n#define MONO_HANDLE_TYPE_WRAP_MonoW32ProcessInfo_ref\tICALL_HANDLES_WRAP_VALUETYPE_REF\n\n// These are rare, and could be eliminated.\n// They could be return values, or just separate out parameters.\n#define MONO_HANDLE_TYPE_WRAP_MonoObjectInOut\tICALL_HANDLES_WRAP_OBJ_INOUT\n#define MONO_HANDLE_TYPE_WRAP_MonoArrayInOut\tICALL_HANDLES_WRAP_OBJ_INOUT\n\n// Do macro_prefix for type type, mapping type to a type class.\n// Note that the macro can further be followed by parameters.\n#define MONO_HANDLE_DO3(macro_prefix, type) macro_prefix ## type\n#define MONO_HANDLE_DO2(macro_prefix, type) MONO_HANDLE_DO3 (macro_prefix, type)\n#define MONO_HANDLE_DO(macro_prefix, type)  MONO_HANDLE_DO2 (macro_prefix, MONO_HANDLE_TYPE_WRAP_ ## type)\n\n#define MONO_HANDLE_RETURN_BEGIN(type)\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_RETURN_BEGIN_, type) (type)\n#define MONO_HANDLE_RETURN_BEGIN_Void(type)\t\t\t/* nothing */\n#define MONO_HANDLE_RETURN_BEGIN_ICALL_HANDLES_WRAP_NONE(type)  type icall_result =\n#define MONO_HANDLE_RETURN_BEGIN_ICALL_HANDLES_WRAP_OBJ(type)   type ## Handle icall_result =\n\n#define MONO_HANDLE_RETURN_END(type)\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_RETURN_END_, type);\n#define MONO_HANDLE_RETURN_END_Void\t\t\t\tHANDLE_FUNCTION_RETURN ()\n#define MONO_HANDLE_RETURN_END_ICALL_HANDLES_WRAP_NONE   \tHANDLE_FUNCTION_RETURN_VAL (icall_result)\n#define MONO_HANDLE_RETURN_END_ICALL_HANDLES_WRAP_OBJ\t\tHANDLE_FUNCTION_RETURN_OBJ (icall_result)\n\n// Convert raw handles to typed handles, just by casting and copying a pointer.\n#define MONO_HANDLE_MARSHAL(type, n)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_MARSHAL_, type) (type, n)\n#define MONO_HANDLE_MARSHAL_ICALL_HANDLES_WRAP_NONE(type, n)     \ta ## n\n#define MONO_HANDLE_MARSHAL_ICALL_HANDLES_WRAP_OBJ(type, n)\t\t*(type ## Handle*)&a ## n\n#define MONO_HANDLE_MARSHAL_ICALL_HANDLES_WRAP_OBJ_OUT(type, n)\t\t*(type ## Handle*)&a ## n\n#define MONO_HANDLE_MARSHAL_ICALL_HANDLES_WRAP_OBJ_INOUT(type, n)\t*(type ## Handle*)&a ## n\n#define MONO_HANDLE_MARSHAL_ICALL_HANDLES_WRAP_VALUETYPE_REF(type, n)\ta ## n\n\n// Declare and initialize a local for an object in, out, inout parameters, upon input.\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS(type, n)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_REGISTER_ICALL_LOCALS_, type) (type, n)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_ICALL_HANDLES_WRAP_NONE(type, n)     \t\t/* nothing */\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_ICALL_HANDLES_WRAP_OBJ(type, n)\t\ttype ## Handle a ## n = MONO_HANDLE_NEW (type, a ## n ## _raw);\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_ICALL_HANDLES_WRAP_OBJ_OUT(type, n)\t\tunused_untested_looks_correct1 type ## Handle a ## n = MONO_HANDLE_NEW (type, NULL);\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_ICALL_HANDLES_WRAP_OBJ_INOUT(type, n)\t\tunused_untested_looks_correct2 type ## Handle a ## n = MONO_HANDLE_NEW (type, *a ## n ## _raw);\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_ICALL_HANDLES_WRAP_VALUETYPE_REF(type, n)\tFIXME restore mono_icall_handle_new_interior from e8b037642104527bd9b9ba70d502210b9c12d2b8 \\\n\t\t\t\t\t\t\t\t\t\t\ttype ## Handle a ## n = mono_icall_handle_new_interior (a ## n ## _raw);\n// Produce all the locals, i.e. up to one per parameter.\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_0()\t\t\t\t\t/* nothing  */\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_1(t0)\t\t\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t0, 0)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_2(t0, t1)\t\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS_1 (t0) \t\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t1, 1)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_3(t0, t1, t2)\t\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS_2 (t0, t1) \t\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t2, 2)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_4(t0, t1, t2, t3)\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS_3 (t0, t1, t2)\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t3, 3)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_5(t0, t1, t2, t3, t4)\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS_4 (t0, t1, t2, t3)\t\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t4, 4)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_6(t0, t1, t2, t3, t4, t5)\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS_5 (t0, t1, t2, t3, t4) \t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t5, 5)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_7(t0, t1, t2, t3, t4, t5, t6)\t\tMONO_HANDLE_REGISTER_ICALL_LOCALS_6 (t0, t1, t2, t3, t4, t5) \t\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t6, 6)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_8(t0, t1, t2, t3, t4, t5, t6, t7)\tMONO_HANDLE_REGISTER_ICALL_LOCALS_7 (t0, t1, t2, t3, t4, t5, t6) \tMONO_HANDLE_REGISTER_ICALL_LOCALS (t7, 7)\n#define MONO_HANDLE_REGISTER_ICALL_LOCALS_9(t0, t1, t2, t3, t4, t5, t6, t7, t8)\tMONO_HANDLE_REGISTER_ICALL_LOCALS_8 (t0, t1, t2, t3, t4, t5, t6, t7)\tMONO_HANDLE_REGISTER_ICALL_LOCALS (t8, 8)\n\n// Convert a typed handle to raw pointer upon output.\n#define MONO_HANDLE_REGISTER_ICALL_OUT(type, n)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_REGISTER_ICALL_OUT_, type) (type, n)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_ICALL_HANDLES_WRAP_NONE(type, n)\t\t/* nothing */\n#define MONO_HANDLE_REGISTER_ICALL_OUT_ICALL_HANDLES_WRAP_OBJ(type, n)\t\t/* nothing */\n#define MONO_HANDLE_REGISTER_ICALL_OUT_ICALL_HANDLES_WRAP_OBJ_OUT(type, n)\tunused_untested_looks_correct3 *a ## n ## _raw = MONO_HANDLE_RAW (a ## n);\n#define MONO_HANDLE_REGISTER_ICALL_OUT_ICALL_HANDLES_WRAP_OBJ_INOUT\t\tunused_untested_looks_correct4 *a ## n ## _raw = MONO_HANDLE_RAW (a ## n);\n#define MONO_HANDLE_REGISTER_ICALL_OUT_ICALL_HANDLES_VALUETYPE_REF(type, n)\t/* nothing */\n\n// Convert all the typed handles to raw pointers upon output, i.e. up to one per parameter.\n#define MONO_HANDLE_REGISTER_ICALL_OUT_0()\t\t\t\t\t/* nothing  */\n#define MONO_HANDLE_REGISTER_ICALL_OUT_1(t0)\t\t\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT (t0, 0)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_2(t0, t1)\t\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT_1 (t0) \t\t\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT (t1, 1)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_3(t0, t1, t2)\t\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT_2 (t0, t1) \t\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT (t2, 2)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_4(t0, t1, t2, t3)\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT_3 (t0, t1, t2)\t\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT (t3, 3)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_5(t0, t1, t2, t3, t4)\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT_4 (t0, t1, t2, t3)\t\t\tMONO_HANDLE_REGISTER_ICALL_OUT (t4, 4)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_6(t0, t1, t2, t3, t4, t5)\t\tMONO_HANDLE_REGISTER_ICALL_OUT_5 (t0, t1, t2, t3, t4) \t\t\tMONO_HANDLE_REGISTER_ICALL_OUT (t5, 5)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_7(t0, t1, t2, t3, t4, t5, t6)\t\tMONO_HANDLE_REGISTER_ICALL_OUT_6 (t0, t1, t2, t3, t4, t5) \t\tMONO_HANDLE_REGISTER_ICALL_OUT (t6, 6)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_8(t0, t1, t2, t3, t4, t5, t6, t7)\tMONO_HANDLE_REGISTER_ICALL_OUT_7 (t0, t1, t2, t3, t4, t5, t6) \t\tMONO_HANDLE_REGISTER_ICALL_OUT (t7, 7)\n#define MONO_HANDLE_REGISTER_ICALL_OUT_9(t0, t1, t2, t3, t4, t5, t6, t7, t8)\tMONO_HANDLE_REGISTER_ICALL_OUT_8 (t0, t1, t2, t3, t4, t5, t6, t7)\tMONO_HANDLE_REGISTER_ICALL_OUT (t8, 8)\n\n#define MONO_HANDLE_TYPE_TYPED(type)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_TYPE_TYPED_, type) (type)\n#define MONO_HANDLE_TYPE_TYPED_Void(type)\t\t\t\ttype\n#define MONO_HANDLE_TYPE_TYPED_ICALL_HANDLES_WRAP_NONE(type)\t\ttype\n#define MONO_HANDLE_TYPE_TYPED_ICALL_HANDLES_WRAP_OBJ(type)\t\ttype ## Handle\n#define MONO_HANDLE_TYPE_TYPED_ICALL_HANDLES_WRAP_OBJ_OUT(type)\t\ttype ## Handle\n#define MONO_HANDLE_TYPE_TYPED_ICALL_HANDLES_WRAP_OBJ_INOUT(type)\ttype ## Handle\n#define MONO_HANDLE_TYPE_TYPED_ICALL_HANDLES_WRAP_VALUETYPE_REF(type)\ttype\n\n// Map a type to a raw handle, or itself.\n#define MONO_HANDLE_TYPE_RAWHANDLE(type)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_TYPE_RAWHANDLE_, type) (type)\n#define MONO_HANDLE_TYPE_RAWHANDLE_Void(type)\t\t\t\t\ttype\n#define MONO_HANDLE_TYPE_RAWHANDLE_ICALL_HANDLES_WRAP_NONE(type)\t\ttype\n#define MONO_HANDLE_TYPE_RAWHANDLE_ICALL_HANDLES_WRAP_OBJ(type)\t\t\tMonoRawHandle\n#define MONO_HANDLE_TYPE_RAWHANDLE_ICALL_HANDLES_WRAP_OBJ_OUT(type)\t\tMonoRawHandle\n#define MONO_HANDLE_TYPE_RAWHANDLE_ICALL_HANDLES_WRAP_OBJ_INOUT(type)\t\tMonoRawHandle\n#define MONO_HANDLE_TYPE_RAWHANDLE_ICALL_HANDLES_WRAP_VALUETYPE_REF(type)\ttype\n\n// Map a type to a raw pointer, or itself.\n#define MONO_HANDLE_TYPE_RAWPOINTER(type)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_TYPE_RAWPOINTER_, type) (type)\n#define MONO_HANDLE_TYPE_RAWPOINTER_Void(type)\t\t\t\t\ttype\n#define MONO_HANDLE_TYPE_RAWPOINTER_ICALL_HANDLES_WRAP_NONE(type)\t\ttype\n#define MONO_HANDLE_TYPE_RAWPOINTER_ICALL_HANDLES_WRAP_OBJ(type)\t\ttype*\n// Only used for return types.\n//#define MONO_HANDLE_TYPE_RAWPOINTER_ICALL_HANDLES_WRAP_OBJ_OUT(type)\t\ttype*\n//#define MONO_HANDLE_TYPE_RAWPOINTER_ICALL_HANDLES_WRAP_OBJ_INOUT(type)\ttype*\n#define MONO_HANDLE_TYPE_RAWPOINTER_ICALL_HANDLES_WRAP_VALUETYPE_REF(type)\ttype\n\n// Type/name in raw handle prototype and implementation.\n#define MONO_HANDLE_ARG_RAWHANDLE(type, n)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_ARG_RAWHANDLE_, type) (type, n)\n#define MONO_HANDLE_ARG_RAWHANDLE_ICALL_HANDLES_WRAP_NONE(type, n)\t\tMONO_HANDLE_TYPE_RAWHANDLE (type) a ## n\n#define MONO_HANDLE_ARG_RAWHANDLE_ICALL_HANDLES_WRAP_OBJ(type, n)\t\tMONO_HANDLE_TYPE_RAWHANDLE (type) a ## n\n#define MONO_HANDLE_ARG_RAWHANDLE_ICALL_HANDLES_WRAP_OBJ_OUT(type, n)\t\tMONO_HANDLE_TYPE_RAWHANDLE (type) a ## n\n#define MONO_HANDLE_ARG_RAWHANDLE_ICALL_HANDLES_WRAP_OBJ_INOUT(type, n)\tMONO_HANDLE_TYPE_RAWHANDLE (type) a ## n\n#define MONO_HANDLE_ARG_RAWHANDLE_ICALL_HANDLES_WRAP_VALUETYPE_REF(type, n)\tMONO_HANDLE_TYPE_RAWHANDLE (type) a ## n\n\n// Type/name in raw pointer prototype and implementation.\n#define MONO_HANDLE_ARG_RAWPOINTER(type, n)\t\t\t\t\tMONO_HANDLE_DO (MONO_HANDLE_ARG_RAWPOINTER_, type) (type, n)\n#define MONO_HANDLE_ARG_RAWPOINTER_ICALL_HANDLES_WRAP_NONE(type, n)\t\tMONO_HANDLE_TYPE_RAWPOINTER (type) a ## n\n#define MONO_HANDLE_ARG_RAWPOINTER_ICALL_HANDLES_WRAP_OBJ(type, n)\t\tMONO_HANDLE_TYPE_RAWPOINTER (type) a ## n ## _raw\n#define MONO_HANDLE_ARG_RAWPOINTER_ICALL_HANDLES_WRAP_OBJ_OUT(type, n)\t\tunused_untested_looks_correct5 MONO_HANDLE_TYPE_RAWPOINTER (type) a ## n ## _raw\n#define MONO_HANDLE_ARG_RAWPOINTER_ICALL_HANDLES_WRAP_OBJ_INOUT(type, n)\tunused_untested_looks_correct6 MONO_HANDLE_TYPE_RAWPOINTER (type) a ## n ## _raw\n#define MONO_HANDLE_ARG_RAWPOINTER_ICALL_HANDLES_WRAP_VALUETYPE_REF(type, n)\tFIXME //MONO_HANDLE_TYPE_RAWPOINTER (type) a ## n\n\n// Generate a parameter list, types only, for a function accepting/returning typed handles.\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_0()\t   \t\t\t     /* nothing */\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_1(t0) \t   \t\t\t     MONO_HANDLE_TYPE_TYPED (t0)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_2(t0, t1)     \t\t\t     MONO_HANDLE_FOREACH_TYPE_TYPED_1 (t0) \t\t\t\t,MONO_HANDLE_TYPE_TYPED (t1)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_3(t0, t1, t2)\t\t\t     MONO_HANDLE_FOREACH_TYPE_TYPED_2 (t0, t1)\t\t        \t,MONO_HANDLE_TYPE_TYPED (t2)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_4(t0, t1, t2, t3)\t\t     MONO_HANDLE_FOREACH_TYPE_TYPED_3 (t0, t1, t2) \t\t\t,MONO_HANDLE_TYPE_TYPED (t3)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_5(t0, t1, t2, t3, t4) \t\t     MONO_HANDLE_FOREACH_TYPE_TYPED_4 (t0, t1, t2, t3) \t\t\t,MONO_HANDLE_TYPE_TYPED (t4)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_6(t0, t1, t2, t3, t4, t5)             MONO_HANDLE_FOREACH_TYPE_TYPED_5 (t0, t1, t2, t3, t4) \t\t,MONO_HANDLE_TYPE_TYPED (t5)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_7(t0, t1, t2, t3, t4, t5, t6) \t     MONO_HANDLE_FOREACH_TYPE_TYPED_6 (t0, t1, t2, t3, t4, t5) \t \t,MONO_HANDLE_TYPE_TYPED (t6)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_8(t0, t1, t2, t3, t4, t5, t6, t7)     MONO_HANDLE_FOREACH_TYPE_TYPED_7 (t0, t1, t2, t3, t4, t5, t6)\t,MONO_HANDLE_TYPE_TYPED (t7)\n#define MONO_HANDLE_FOREACH_TYPE_TYPED_9(t0, t1, t2, t3, t4, t5, t6, t7, t8) MONO_HANDLE_FOREACH_TYPE_TYPED_8 (t0, t1, t2, t3, t4, t5, t6, t7)\t,MONO_HANDLE_TYPE_TYPED (t8)\n\n// Generate a parameter list, types and names, for a function accepting raw handles and no MonoError,\n// and returning a raw pointer.\n#define MONO_HANDLE_FOREACH_ARG_RAW_0()\t\t\t\t\t\tvoid\n#define MONO_HANDLE_FOREACH_ARG_RAW_1(t0) \t   \t  \t\t\tMONO_HANDLE_ARG_RAWHANDLE (t0, 0)\n#define MONO_HANDLE_FOREACH_ARG_RAW_2(t0, t1)\t  \t\t\t\tMONO_HANDLE_FOREACH_ARG_RAW_1 (t0),             \t\tMONO_HANDLE_ARG_RAWHANDLE (t1, 1)\n#define MONO_HANDLE_FOREACH_ARG_RAW_3(t0, t1, t2)\t  \t\t\tMONO_HANDLE_FOREACH_ARG_RAW_2 (t0, t1),         \t\tMONO_HANDLE_ARG_RAWHANDLE (t2, 2)\n#define MONO_HANDLE_FOREACH_ARG_RAW_4(t0, t1, t2, t3)\t\t\t\tMONO_HANDLE_FOREACH_ARG_RAW_3 (t0, t1, t2),     \t\tMONO_HANDLE_ARG_RAWHANDLE (t3, 3)\n#define MONO_HANDLE_FOREACH_ARG_RAW_5(t0, t1, t2, t3, t4)\t\t\tMONO_HANDLE_FOREACH_ARG_RAW_4 (t0, t1, t2, t3), \t\tMONO_HANDLE_ARG_RAWHANDLE (t4, 4)\n#define MONO_HANDLE_FOREACH_ARG_RAW_6(t0, t1, t2, t3, t4, t5)\t\t\tMONO_HANDLE_FOREACH_ARG_RAW_5 (t0, t1, t2, t3, t4), \t\tMONO_HANDLE_ARG_RAWHANDLE (t5, 5)\n#define MONO_HANDLE_FOREACH_ARG_RAW_7(t0, t1, t2, t3, t4, t5, t6)\t\tMONO_HANDLE_FOREACH_ARG_RAW_6 (t0, t1, t2, t3, t4, t5), \tMONO_HANDLE_ARG_RAWHANDLE (t6, 6)\n#define MONO_HANDLE_FOREACH_ARG_RAW_8(t0, t1, t2, t3, t4, t5, t6, t7)\t\tMONO_HANDLE_FOREACH_ARG_RAW_7 (t0, t1, t2, t3, t4, t5, t6),\tMONO_HANDLE_ARG_RAWHANDLE (t7, 7)\n#define MONO_HANDLE_FOREACH_ARG_RAW_9(t0, t1, t2, t3, t4, t5, t6, t7, t8)  \tMONO_HANDLE_FOREACH_ARG_RAW_8 (t0, t1, t2, t3, t4, t5, t6, t7),\tMONO_HANDLE_ARG_RAWHANDLE (t8, 8)\n\n// Generate a parameter list, types and names, for a function accepting raw pointers and no MonoError,\n// and returning a raw pointer.\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_0()\t\t\t\t\t\tvoid\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_1(t0) \t   \t  \t\t\tMONO_HANDLE_ARG_RAWPOINTER (t0, 0)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_2(t0, t1)\t  \t\t\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_1 (t0),             \t\t\tMONO_HANDLE_ARG_RAWPOINTER (t1, 1)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_3(t0, t1, t2)\t  \t\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_2 (t0, t1),         \t\t\tMONO_HANDLE_ARG_RAWPOINTER (t2, 2)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_4(t0, t1, t2, t3)\t\t\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_3 (t0, t1, t2),     \t\t\tMONO_HANDLE_ARG_RAWPOINTER (t3, 3)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_5(t0, t1, t2, t3, t4)\t\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_4 (t0, t1, t2, t3), \t\t\tMONO_HANDLE_ARG_RAWPOINTER (t4, 4)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_6(t0, t1, t2, t3, t4, t5)\t\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_5 (t0, t1, t2, t3, t4), \t\tMONO_HANDLE_ARG_RAWPOINTER (t5, 5)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_7(t0, t1, t2, t3, t4, t5, t6)\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_6 (t0, t1, t2, t3, t4, t5), \t\tMONO_HANDLE_ARG_RAWPOINTER (t6, 6)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_8(t0, t1, t2, t3, t4, t5, t6, t7)\t\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_7 (t0, t1, t2, t3, t4, t5, t6),\tMONO_HANDLE_ARG_RAWPOINTER (t7, 7)\n#define MONO_HANDLE_FOREACH_ARG_RAWPOINTER_9(t0, t1, t2, t3, t4, t5, t6, t7, t8)\tMONO_HANDLE_FOREACH_ARG_RAWPOINTER_8 (t0, t1, t2, t3, t4, t5, t6, t7),\tMONO_HANDLE_ARG_RAWPOINTER (t8, 8)\n\n#define MONO_HANDLE_REGISTER_ICALL_CALL_0 /*  nothing */\n#define MONO_HANDLE_REGISTER_ICALL_CALL_1 a0,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_2 MONO_HANDLE_REGISTER_ICALL_CALL_1 a1,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_3 MONO_HANDLE_REGISTER_ICALL_CALL_2 a2,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_4 MONO_HANDLE_REGISTER_ICALL_CALL_3 a3,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_5 MONO_HANDLE_REGISTER_ICALL_CALL_4 a4,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_6 MONO_HANDLE_REGISTER_ICALL_CALL_5 a5,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_7 MONO_HANDLE_REGISTER_ICALL_CALL_6 a6,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_8 MONO_HANDLE_REGISTER_ICALL_CALL_7 a7,\n#define MONO_HANDLE_REGISTER_ICALL_CALL_9 MONO_HANDLE_REGISTER_ICALL_CALL_8 a8,\n\n// Call from the wrapper to the actual icall, passing on the\n// WRAP_NONE parameters directly, casting handles from raw to typed.\n#define MONO_HANDLE_CALL_0()\t\t\t\t\t/* nothing  */\n#define MONO_HANDLE_CALL_1(t0)\t\t\t\t\tMONO_HANDLE_MARSHAL (t0, 0)\n#define MONO_HANDLE_CALL_2(t0, t1)\t\t\t\tMONO_HANDLE_CALL_1 (t0), \t\t\t\tMONO_HANDLE_MARSHAL (t1, 1)\n#define MONO_HANDLE_CALL_3(t0, t1, t2)\t\t\t\tMONO_HANDLE_CALL_2 (t0, t1), \t\t\t\tMONO_HANDLE_MARSHAL (t2, 2)\n#define MONO_HANDLE_CALL_4(t0, t1, t2, t3)\t\t\tMONO_HANDLE_CALL_3 (t0, t1, t2),\t\t\tMONO_HANDLE_MARSHAL (t3, 3)\n#define MONO_HANDLE_CALL_5(t0, t1, t2, t3, t4)\t\t\tMONO_HANDLE_CALL_4 (t0, t1, t2, t3),\t\t\tMONO_HANDLE_MARSHAL (t4, 4)\n#define MONO_HANDLE_CALL_6(t0, t1, t2, t3, t4, t5)\t\tMONO_HANDLE_CALL_5 (t0, t1, t2, t3, t4), \t\tMONO_HANDLE_MARSHAL (t5, 5)\n#define MONO_HANDLE_CALL_7(t0, t1, t2, t3, t4, t5, t6)\t\tMONO_HANDLE_CALL_6 (t0, t1, t2, t3, t4, t5), \t\tMONO_HANDLE_MARSHAL (t6, 6)\n#define MONO_HANDLE_CALL_8(t0, t1, t2, t3, t4, t5, t6, t7)\tMONO_HANDLE_CALL_7 (t0, t1, t2, t3, t4, t5, t6), \tMONO_HANDLE_MARSHAL (t7, 7)\n#define MONO_HANDLE_CALL_9(t0, t1, t2, t3, t4, t5, t6, t7, t8)\tMONO_HANDLE_CALL_8 (t0, t1, t2, t3, t4, t5, t6, t7),\tMONO_HANDLE_MARSHAL (t8, 8)\n\n// Place a comma after a parameter list of length n, i.e. nothing for 0, else comma.\n#define MONO_HANDLE_COMMA_0 /* nothing */\n#define MONO_HANDLE_COMMA_1 ,\n#define MONO_HANDLE_COMMA_2 ,\n#define MONO_HANDLE_COMMA_3 ,\n#define MONO_HANDLE_COMMA_4 ,\n#define MONO_HANDLE_COMMA_5 ,\n#define MONO_HANDLE_COMMA_6 ,\n#define MONO_HANDLE_COMMA_7 ,\n#define MONO_HANDLE_COMMA_8 ,\n#define MONO_HANDLE_COMMA_9 ,\n\n// Declare the function that takes/returns typed handles and a MonoError.\n#define MONO_HANDLE_DECLARE(id, name, func, rettype, n, argtypes)\t\\\nMONO_HANDLE_TYPE_TYPED (rettype)\t\t\t\t\t\\\nfunc (MONO_HANDLE_FOREACH_TYPE_TYPED_ ## n argtypes MONO_HANDLE_COMMA_ ## n MonoError *error)\n\n// Declare the function wrapper that takes raw handles and returns a raw pointer.\n#define MONO_HANDLE_DECLARE_RAW(id, name, func, rettype, n, argtypes)\t\\\nICALL_EXPORT MONO_HANDLE_TYPE_RAWPOINTER (rettype)\t\t\t\t\\\nfunc ## _raw ( MONO_HANDLE_FOREACH_ARG_RAW_ ## n argtypes)\n\n// Implement ves_icall_foo_raw over ves_icall_foo.\n// Raw handles are converted to/from typed handles and the rest is passed through.\n// This is for functions in icall-def.h.\n\n#define MONO_HANDLE_IMPLEMENT(id, name, func, rettype, n, argtypes)\t\\\n\t\t\t\t\t\t\t\t\t\t\\\nMONO_HANDLE_DECLARE_RAW (id, name, func, rettype, n, argtypes)\t\t\t\\\n{\t\t\t\t\t\t\t\t\t\t\\\n\tHANDLE_FUNCTION_ENTER ();\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tERROR_DECL (error);\t\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tMONO_HANDLE_RETURN_BEGIN (rettype)\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tfunc (MONO_HANDLE_CALL_ ## n argtypes MONO_HANDLE_COMMA_ ## n error);\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tmono_error_set_pending_exception (error);\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tMONO_HANDLE_RETURN_END (rettype)\t\t\t\t\t\\\n}\t\t\t\t\t\t\t\t\t\t\\\n\n// Declare the function that takes/returns raw pointers and no MonoError.\n#define MONO_HANDLE_REGISTER_ICALL_DECLARE_RAW(func, rettype, n, argtypes)\t\\\nICALL_EXPORT MONO_HANDLE_TYPE_RAWPOINTER (rettype)\t\t\t\t\\\nfunc ( MONO_HANDLE_FOREACH_ARG_RAWPOINTER_ ## n argtypes)\n\n// Implement ves_icall_foo over ves_icall_foo_impl.\n//\n// Raw pointers are converted to/from handles and the rest is passed through.\n// The in/out/inout-ness of parameters must be correct. (unlike MONO_HANDLE_IMPLEMENT)\n// Valuetype-refs are not handled. (unlike MONO_HANDLE_IMPLEMENT)\n// Handle creation is less efficient than MONO_HANDLE_IMPLEMENT (marshal-ilgen.c) -- using TLS\n// and per-handle work.\n//\n// In future this should produce an array of IcallHandlesWrap and send that through\n// to emit_native_icall_wrapper_ilgen to gain its efficient handles.\n//\n// Or put the handles directly in the coop frame, or pointers to them.\n// i.e. one TLS access at function start and end.\n//\n// This is for functions passed to mono_register_jit_icall_info, etc.\n\n#define MONO_HANDLE_REGISTER_ICALL_IMPLEMENT(func, rettype, n, argtypes)\t\\\n\t\t\t\t\t\t\t\t\t\t\\\nMONO_HANDLE_REGISTER_ICALL_DECLARE_RAW (func, rettype, n, argtypes)\t\t\\\n{\t\t\t\t\t\t\t\t\t\t\\\n\tHANDLE_FUNCTION_ENTER ();\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tERROR_DECL (error);\t\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tMONO_HANDLE_REGISTER_ICALL_LOCALS_ ## n argtypes\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tMONO_HANDLE_RETURN_BEGIN (rettype)\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tfunc ## _impl (MONO_HANDLE_REGISTER_ICALL_CALL_ ## n error);\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tMONO_HANDLE_REGISTER_ICALL_OUT_ ## n argtypes\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tmono_error_set_pending_exception (error);\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tMONO_HANDLE_RETURN_END (rettype)\t\t\t\t\t\\\n}\t\t\t\t\t\t\t\t\t\t\\\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icall-windows-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_ICALL_WINDOWS_INTERNALS_H__\n#define __MONO_METADATA_ICALL_WINDOWS_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n#include \"mono/metadata/icall-internals.h\"\n#include \"mono/metadata/object.h\"\n#include \"mono/metadata/object-internals.h\"\n#include \"mono/metadata/class.h\"\n#include \"mono/metadata/class-internals.h\"\n#endif /* HOST_WIN32 */\n#endif /* __MONO_METADATA_ICALL_WINDOWS_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/icalls.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_ICALLS_H__\n#define __MONO_METADATA_ICALLS_H__\n\n#include <mono/utils/mono-publib.h>\n\n#ifdef ENABLE_ICALL_EXPORT\n#define ICALL_EXPORT MONO_API\n#define ICALL_EXTERN_C G_EXTERN_C\n#else\n/* Can't be static as icall.c defines icalls referenced by icall-tables.c */\n#define ICALL_EXPORT /* nothing */\n#define ICALL_EXTERN_C /* nothing */\n#endif\n\n#endif // __MONO_METADATA_ICALLS_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/image-internals.h",
    "content": "/**\n * \\file\n * Copyright 2015 Xamarin Inc\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_IMAGE_INTERNALS_H__\n#define __MONO_METADATA_IMAGE_INTERNALS_H__\n\n#include <mono/metadata/image.h>\n#include <mono/metadata/loader-internals.h>\n\nMonoImage*\nmono_image_loaded_internal (MonoAssemblyLoadContext *alc, const char *name, mono_bool refonly);\n\nMonoImage*\nmono_image_load_file_for_image_checked (MonoImage *image, int fileidx, MonoError *error);\n\nMonoImage*\nmono_image_load_module_checked (MonoImage *image, int idx, MonoError *error);\n\nMonoImage *\nmono_image_open_a_lot (MonoAssemblyLoadContext *alc, const char *fname, MonoImageOpenStatus *status, gboolean refonly, gboolean load_from_context);\n\ngboolean\nmono_is_problematic_image (MonoImage *image);\n\ngboolean\nmono_is_problematic_file (const char *fname);\n\n#endif /* __MONO_METADATA_IMAGE_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/image.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONONET_METADATA_IMAGE_H_ \n#define _MONONET_METADATA_IMAGE_H_\n\n#include <stdio.h>\n#include <mono/utils/mono-publib.h>\n#include <mono/utils/mono-error.h>\n#include <mono/metadata/object-forward.h>\n\nMONO_BEGIN_DECLS\n\ntypedef struct _MonoAssembly MonoAssembly;\ntypedef struct _MonoAssemblyName MonoAssemblyName;\ntypedef struct _MonoTableInfo MonoTableInfo;\n\ntypedef enum {\n\tMONO_IMAGE_OK,\n\tMONO_IMAGE_ERROR_ERRNO,\n\tMONO_IMAGE_MISSING_ASSEMBLYREF,\n\tMONO_IMAGE_IMAGE_INVALID\n} MonoImageOpenStatus;\n\nMONO_API void          mono_images_init    (void);\nMONO_API void          mono_images_cleanup (void);\n\nMONO_API MonoImage    *mono_image_open     (const char *fname,\n\t\t\t\t   MonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage             *mono_image_open_full (const char *fname,\n\t\t\t\t   MonoImageOpenStatus *status, mono_bool refonly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage             *mono_pe_file_open     (const char *fname,\n\t\t\t\t     MonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage    *mono_image_open_from_data (char *data, uint32_t data_len, mono_bool need_copy,\n                                         MonoImageOpenStatus *status);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage    *mono_image_open_from_data_full (char *data, uint32_t data_len, mono_bool need_copy,\n                                         MonoImageOpenStatus *status, mono_bool refonly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage    *mono_image_open_from_data_with_name (char *data, uint32_t data_len, mono_bool need_copy,\n                                                   MonoImageOpenStatus *status, mono_bool refonly, const char *name);\nMONO_API void          mono_image_fixup_vtable (MonoImage *image);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage             *mono_image_loaded   (const char *name);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage             *mono_image_loaded_full   (const char *name, mono_bool refonly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage             *mono_image_loaded_by_guid (const char *guid);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoImage             *mono_image_loaded_by_guid_full (const char *guid, mono_bool refonly);\nMONO_API void          mono_image_init     (MonoImage *image);\nMONO_API void          mono_image_close    (MonoImage *image);\nMONO_API void          mono_image_addref   (MonoImage *image);\nMONO_API const char   *mono_image_strerror (MonoImageOpenStatus status);\n\nMONO_API int           mono_image_ensure_section     (MonoImage *image,\n\t\t\t\t\t     const char *section);\nMONO_API int           mono_image_ensure_section_idx (MonoImage *image,\n\t\t\t\t\t     int section);\n\nMONO_API uint32_t       mono_image_get_entry_point    (MonoImage *image);\nMONO_API const char   *mono_image_get_resource       (MonoImage *image, uint32_t offset, uint32_t *size);\nMONO_API MONO_RT_EXTERNAL_ONLY MonoImage*    mono_image_load_file_for_image (MonoImage *image, int fileidx);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoImage*    mono_image_load_module (MonoImage *image, int idx);\n\nMONO_API const char*   mono_image_get_name       (MonoImage *image);\nMONO_API const char*   mono_image_get_filename   (MonoImage *image);\nMONO_API const char *  mono_image_get_guid       (MonoImage *image);\nMONO_API MonoAssembly* mono_image_get_assembly   (MonoImage *image);\nMONO_API mono_bool     mono_image_is_dynamic     (MonoImage *image);\nMONO_API char*         mono_image_rva_map        (MonoImage *image, uint32_t rva);\n\nMONO_API const MonoTableInfo *mono_image_get_table_info (MonoImage *image, int table_id);\nMONO_API int                  mono_image_get_table_rows (MonoImage *image, int table_id);\nMONO_API int                  mono_table_info_get_rows  (const MonoTableInfo *table);\n\n/* This actually returns a MonoPEResourceDataEntry *, but declaring it\n * causes an include file loop.\n */\nMONO_API void*      mono_image_lookup_resource (MonoImage *image, uint32_t res_id,\n\t\t\t\t\t  uint32_t lang_id, mono_unichar2 *name);\n\nMONO_API const char*   mono_image_get_public_key  (MonoImage *image, uint32_t *size);\nMONO_API const char*   mono_image_get_strong_name (MonoImage *image, uint32_t *size);\nMONO_API uint32_t       mono_image_strong_name_position (MonoImage *image, uint32_t *size);\nMONO_API void          mono_image_add_to_name_cache (MonoImage *image, \n\t\t\tconst char *nspace, const char *name, uint32_t idx);\nMONO_API mono_bool     mono_image_has_authenticode_entry (MonoImage *image);\n\nMONO_END_DECLS\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/jit-icall-reg.h",
    "content": "/**\n * \\file\n *   Enum for JIT icalls: MonoJitICallId MONO_JIT_ICALL_mono_foo, etc.\n *   Static storage for JIT icall info: mono_get_jit_icall_info().\n *\n *   mono_find_jit_icall_info (MonoJitICallId)\n *     Convert enum to pointer.\n *\n *   mono_find_jit_icall_info ((MonoJitICallId)int)\n *     Convert int to pointer.\n *\n *  mono_jit_icall_info_id (MonoJitICallInfo*)\n *     Convert pointer to enum.\n *\n *   mono_jit_icall_info_index (MonoJitICallInfo*)\n *     Convert pointer to int.\n *\n *   &mono_get_icall_info ()->name\n *     Convert name to pointer.\n *\n *   MONO_JIT_ICALL_ ## name\n *     Convert name to enum.\n *\n *   All conversions are just a few instructions.\n *\n * Author:\n *   Jay Krell (jaykrell@microsoft.com)\n *\n * Copyright 2019 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n// No include guard needed.\n\n// Changes within MONO_JIT_ICALLS require revising MONO_AOT_FILE_VERSION.\n#define MONO_JIT_ICALLS \\\n\t\\\nMONO_JIT_ICALL (ZeroIsReserved)\t\\\n\t\\\n/* These must be ordered like MonoTrampolineType. */\t\\\nMONO_JIT_ICALL (generic_trampoline_jit)\t\\\nMONO_JIT_ICALL (generic_trampoline_jump)\t\\\nMONO_JIT_ICALL (generic_trampoline_rgctx_lazy_fetch)\t\\\nMONO_JIT_ICALL (generic_trampoline_aot)\t\\\nMONO_JIT_ICALL (generic_trampoline_aot_plt)\t\\\nMONO_JIT_ICALL (generic_trampoline_delegate)\t\\\nMONO_JIT_ICALL (generic_trampoline_generic_virtual_remoting)\t\\\nMONO_JIT_ICALL (generic_trampoline_vcall)\t\\\n\t\\\n/* These must be ordered like MonoTlsKey (alphabetical). */ \\\nMONO_JIT_ICALL (mono_tls_get_domain_extern) \\\nMONO_JIT_ICALL (mono_tls_get_jit_tls_extern) \\\nMONO_JIT_ICALL (mono_tls_get_lmf_addr_extern) \\\nMONO_JIT_ICALL (mono_tls_get_sgen_thread_info_extern) \\\nMONO_JIT_ICALL (mono_tls_get_thread_extern) \\\n\t\\\nMONO_JIT_ICALL (__emul_fadd)\t\\\nMONO_JIT_ICALL (__emul_fcmp_ceq)\t\\\nMONO_JIT_ICALL (__emul_fcmp_cgt)\t\\\nMONO_JIT_ICALL (__emul_fcmp_cgt_un)\t\\\nMONO_JIT_ICALL (__emul_fcmp_clt)\t\\\nMONO_JIT_ICALL (__emul_fcmp_clt_un)\t\\\nMONO_JIT_ICALL (__emul_fcmp_eq)\t\\\nMONO_JIT_ICALL (__emul_fcmp_ge)\t\\\nMONO_JIT_ICALL (__emul_fcmp_ge_un)\t\\\nMONO_JIT_ICALL (__emul_fcmp_gt)\t\\\nMONO_JIT_ICALL (__emul_fcmp_gt_un)\t\\\nMONO_JIT_ICALL (__emul_fcmp_le)\t\\\nMONO_JIT_ICALL (__emul_fcmp_le_un)\t\\\nMONO_JIT_ICALL (__emul_fcmp_lt)\t\\\nMONO_JIT_ICALL (__emul_fcmp_lt_un)\t\\\nMONO_JIT_ICALL (__emul_fcmp_ne_un)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_i)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_i1)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_i2)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_i4)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_i8)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_ovf_i8)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_ovf_u8)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_ovf_u8_un)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_r4)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_u)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_u1)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_u2)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_u4)\t\\\nMONO_JIT_ICALL (__emul_fconv_to_u8)\t\\\nMONO_JIT_ICALL (__emul_fdiv)\t\\\nMONO_JIT_ICALL (__emul_fmul)\t\\\nMONO_JIT_ICALL (__emul_fneg)\t\\\nMONO_JIT_ICALL (__emul_frem)\t\\\nMONO_JIT_ICALL (__emul_fsub)\t\\\nMONO_JIT_ICALL (__emul_iconv_to_r_un) \\\nMONO_JIT_ICALL (__emul_iconv_to_r4) \\\nMONO_JIT_ICALL (__emul_iconv_to_r8) \\\nMONO_JIT_ICALL (__emul_lconv_to_r4) \\\nMONO_JIT_ICALL (__emul_lconv_to_r8) \\\nMONO_JIT_ICALL (__emul_lconv_to_r8_un) \\\nMONO_JIT_ICALL (__emul_ldiv) \\\nMONO_JIT_ICALL (__emul_ldiv_un) \\\nMONO_JIT_ICALL (__emul_lmul) \\\nMONO_JIT_ICALL (__emul_lmul_ovf) \\\nMONO_JIT_ICALL (__emul_lmul_ovf_un) \\\nMONO_JIT_ICALL (__emul_lrem) \\\nMONO_JIT_ICALL (__emul_lrem_un) \\\nMONO_JIT_ICALL (__emul_lshl) \\\nMONO_JIT_ICALL (__emul_lshr) \\\nMONO_JIT_ICALL (__emul_lshr_un) \\\nMONO_JIT_ICALL (__emul_op_idiv) \\\nMONO_JIT_ICALL (__emul_op_idiv_un) \\\nMONO_JIT_ICALL (__emul_op_imul) \\\nMONO_JIT_ICALL (__emul_op_imul_ovf) \\\nMONO_JIT_ICALL (__emul_op_imul_ovf_un) \\\nMONO_JIT_ICALL (__emul_op_irem) \\\nMONO_JIT_ICALL (__emul_op_irem_un) \\\nMONO_JIT_ICALL (__emul_rconv_to_i8) \\\nMONO_JIT_ICALL (__emul_rconv_to_ovf_i8) \\\nMONO_JIT_ICALL (__emul_rconv_to_ovf_u8) \\\nMONO_JIT_ICALL (__emul_rconv_to_ovf_u8_un) \\\nMONO_JIT_ICALL (__emul_rconv_to_u4)\t\\\nMONO_JIT_ICALL (__emul_rconv_to_u8) \\\nMONO_JIT_ICALL (__emul_rrem) \\\nMONO_JIT_ICALL (cominterop_get_ccw) \\\nMONO_JIT_ICALL (cominterop_get_ccw_object) \\\nMONO_JIT_ICALL (cominterop_get_function_pointer) \\\nMONO_JIT_ICALL (cominterop_get_interface) \\\nMONO_JIT_ICALL (cominterop_get_method_interface) \\\nMONO_JIT_ICALL (cominterop_object_is_rcw) \\\nMONO_JIT_ICALL (cominterop_restore_domain) \\\nMONO_JIT_ICALL (cominterop_set_ccw_object_domain) \\\nMONO_JIT_ICALL (cominterop_type_from_handle) \\\nMONO_JIT_ICALL (g_free) \\\nMONO_JIT_ICALL (interp_to_native_trampoline)\t\\\nMONO_JIT_ICALL (mini_llvm_init_gshared_method_mrgctx) \\\nMONO_JIT_ICALL (mini_llvm_init_gshared_method_this) \\\nMONO_JIT_ICALL (mini_llvm_init_gshared_method_vtable) \\\nMONO_JIT_ICALL (mini_llvm_init_method) \\\nMONO_JIT_ICALL (mini_llvmonly_init_delegate) \\\nMONO_JIT_ICALL (mini_llvmonly_init_delegate_virtual) \\\nMONO_JIT_ICALL (mini_llvmonly_init_vtable_slot) \\\nMONO_JIT_ICALL (mini_llvmonly_resolve_generic_virtual_call) \\\nMONO_JIT_ICALL (mini_llvmonly_resolve_generic_virtual_iface_call) \\\nMONO_JIT_ICALL (mini_llvmonly_resolve_iface_call_gsharedvt) \\\nMONO_JIT_ICALL (mini_llvmonly_resolve_vcall_gsharedvt) \\\nMONO_JIT_ICALL (mini_llvmonly_throw_nullref_exception) \\\nMONO_JIT_ICALL (mono_amd64_resume_unwind)\t\\\nMONO_JIT_ICALL (mono_amd64_start_gsharedvt_call)\t\\\nMONO_JIT_ICALL (mono_amd64_throw_corlib_exception)\t\\\nMONO_JIT_ICALL (mono_amd64_throw_exception)\t\\\nMONO_JIT_ICALL (mono_arch_rethrow_exception) \\\nMONO_JIT_ICALL (mono_arch_throw_corlib_exception) \\\nMONO_JIT_ICALL (mono_arch_throw_exception) \\\nMONO_JIT_ICALL (mono_arm_resume_unwind)\t\\\nMONO_JIT_ICALL (mono_arm_start_gsharedvt_call)\t\\\nMONO_JIT_ICALL (mono_arm_throw_exception)\t\\\nMONO_JIT_ICALL (mono_arm_throw_exception_by_token)\t\\\nMONO_JIT_ICALL (mono_arm_unaligned_stack)\t\\\nMONO_JIT_ICALL (mono_array_new_1) \\\nMONO_JIT_ICALL (mono_array_new_2) \\\nMONO_JIT_ICALL (mono_array_new_3) \\\nMONO_JIT_ICALL (mono_array_new_4) \\\nMONO_JIT_ICALL (mono_array_new_n_icall) \\\nMONO_JIT_ICALL (mono_array_to_byte_byvalarray) \\\nMONO_JIT_ICALL (mono_array_to_lparray) \\\nMONO_JIT_ICALL (mono_array_to_savearray) \\\nMONO_JIT_ICALL (mono_break) \\\nMONO_JIT_ICALL (mono_byvalarray_to_byte_array) \\\nMONO_JIT_ICALL (mono_chkstk_win64) \\\nMONO_JIT_ICALL (mono_ckfinite) \\\nMONO_JIT_ICALL (mono_class_interface_match) \\\nMONO_JIT_ICALL (mono_class_static_field_address) \\\nMONO_JIT_ICALL (mono_compile_method_icall) \\\nMONO_JIT_ICALL (mono_context_get_icall) \\\nMONO_JIT_ICALL (mono_context_set_icall) \\\nMONO_JIT_ICALL (mono_create_corlib_exception_0) \\\nMONO_JIT_ICALL (mono_create_corlib_exception_1) \\\nMONO_JIT_ICALL (mono_create_corlib_exception_2) \\\nMONO_JIT_ICALL (mono_debug_personality) \\\nMONO_JIT_ICALL (mono_debugger_agent_breakpoint_from_context) \\\nMONO_JIT_ICALL (mono_debugger_agent_single_step_from_context) \\\nMONO_JIT_ICALL (mono_debugger_agent_user_break) \\\nMONO_JIT_ICALL (mono_delegate_begin_invoke) \\\nMONO_JIT_ICALL (mono_delegate_end_invoke) \\\nMONO_JIT_ICALL (mono_delegate_to_ftnptr) \\\nMONO_JIT_ICALL (mono_domain_get) \\\nMONO_JIT_ICALL (mono_dummy_jit_icall) \\\nMONO_JIT_ICALL (mono_exception_from_token) \\\nMONO_JIT_ICALL (mono_fill_class_rgctx) \\\nMONO_JIT_ICALL (mono_fill_method_rgctx) \\\nMONO_JIT_ICALL (mono_fload_r4) \\\nMONO_JIT_ICALL (mono_fload_r4_arg) \\\nMONO_JIT_ICALL (mono_free_bstr) \\\nMONO_JIT_ICALL (mono_free_lparray) \\\nMONO_JIT_ICALL (mono_fstore_r4) \\\nMONO_JIT_ICALL (mono_ftnptr_to_delegate) \\\nMONO_JIT_ICALL (mono_gc_alloc_obj) \\\nMONO_JIT_ICALL (mono_gc_alloc_string) \\\nMONO_JIT_ICALL (mono_gc_alloc_vector) \\\nMONO_JIT_ICALL (mono_gc_wbarrier_generic_nostore_internal) \\\nMONO_JIT_ICALL (mono_gc_wbarrier_range_copy) \\\nMONO_JIT_ICALL (mono_gchandle_get_target_internal) \\\nMONO_JIT_ICALL (mono_generic_class_init) \\\nMONO_JIT_ICALL (mono_get_assembly_object) \\\nMONO_JIT_ICALL (mono_get_method_object) \\\nMONO_JIT_ICALL (mono_get_native_calli_wrapper) \\\nMONO_JIT_ICALL (mono_get_special_static_data) \\\nMONO_JIT_ICALL (mono_gsharedvt_constrained_call) \\\nMONO_JIT_ICALL (mono_gsharedvt_value_copy) \\\nMONO_JIT_ICALL (mono_helper_compile_generic_method) \\\nMONO_JIT_ICALL (mono_helper_ldstr) \\\nMONO_JIT_ICALL (mono_helper_ldstr_mscorlib) \\\nMONO_JIT_ICALL (mono_helper_newobj_mscorlib) \\\nMONO_JIT_ICALL (mono_helper_stelem_ref_check) \\\nMONO_JIT_ICALL (mono_init_vtable_slot) \\\nMONO_JIT_ICALL (mono_interp_entry_from_trampoline) \\\nMONO_JIT_ICALL (mono_interp_to_native_trampoline) \\\nMONO_JIT_ICALL (mono_isfinite_double) \\\nMONO_JIT_ICALL (mono_jit_set_domain) \\\nMONO_JIT_ICALL (mono_ldftn) \\\nMONO_JIT_ICALL (mono_ldtoken_wrapper) \\\nMONO_JIT_ICALL (mono_ldtoken_wrapper_generic_shared) \\\nMONO_JIT_ICALL (mono_ldvirtfn) \\\nMONO_JIT_ICALL (mono_ldvirtfn_gshared) \\\nMONO_JIT_ICALL (mono_llvm_clear_exception) \\\nMONO_JIT_ICALL (mono_llvm_load_exception) \\\nMONO_JIT_ICALL (mono_llvm_match_exception) \\\nMONO_JIT_ICALL (mono_llvm_resume_exception) \\\nMONO_JIT_ICALL (mono_llvm_resume_unwind_trampoline) \\\nMONO_JIT_ICALL (mono_llvm_rethrow_exception) \\\nMONO_JIT_ICALL (mono_llvm_rethrow_exception_trampoline) \\\nMONO_JIT_ICALL (mono_llvm_set_unhandled_exception_handler) \\\nMONO_JIT_ICALL (mono_llvm_throw_corlib_exception) \\\nMONO_JIT_ICALL (mono_llvm_throw_corlib_exception_abs_trampoline) \\\nMONO_JIT_ICALL (mono_llvm_throw_corlib_exception_trampoline) \\\nMONO_JIT_ICALL (mono_llvm_throw_exception) \\\nMONO_JIT_ICALL (mono_llvm_throw_exception_trampoline) \\\nMONO_JIT_ICALL (mono_llvmonly_init_delegate) \\\nMONO_JIT_ICALL (mono_llvmonly_init_delegate_virtual) \\\nMONO_JIT_ICALL (mono_marshal_asany) \\\nMONO_JIT_ICALL (mono_marshal_check_domain_image) \\\nMONO_JIT_ICALL (mono_marshal_clear_last_error) \\\nMONO_JIT_ICALL (mono_marshal_free) \\\nMONO_JIT_ICALL (mono_marshal_free_array) \\\nMONO_JIT_ICALL (mono_marshal_free_asany) \\\nMONO_JIT_ICALL (mono_marshal_get_type_object) \\\nMONO_JIT_ICALL (mono_marshal_isinst_with_cache) \\\nMONO_JIT_ICALL (mono_marshal_safearray_begin) \\\nMONO_JIT_ICALL (mono_marshal_safearray_create) \\\nMONO_JIT_ICALL (mono_marshal_safearray_end) \\\nMONO_JIT_ICALL (mono_marshal_safearray_free_indices) \\\nMONO_JIT_ICALL (mono_marshal_safearray_get_value) \\\nMONO_JIT_ICALL (mono_marshal_safearray_next) \\\nMONO_JIT_ICALL (mono_marshal_safearray_set_value) \\\nMONO_JIT_ICALL (mono_marshal_set_domain_by_id) \\\nMONO_JIT_ICALL (mono_marshal_set_last_error) \\\nMONO_JIT_ICALL (mono_marshal_set_last_error_windows) \\\nMONO_JIT_ICALL (mono_marshal_string_to_utf16) \\\nMONO_JIT_ICALL (mono_marshal_string_to_utf16_copy) \\\nMONO_JIT_ICALL (mono_marshal_xdomain_copy_out_value) \\\nMONO_JIT_ICALL (mono_monitor_enter_fast) \\\nMONO_JIT_ICALL (mono_monitor_enter_internal) \\\nMONO_JIT_ICALL (mono_monitor_enter_v4_fast) \\\nMONO_JIT_ICALL (mono_monitor_enter_v4_internal) \\\nMONO_JIT_ICALL (mono_object_castclass_unbox) \\\nMONO_JIT_ICALL (mono_object_castclass_with_cache) \\\nMONO_JIT_ICALL (mono_object_isinst_icall) \\\nMONO_JIT_ICALL (mono_object_isinst_with_cache) \\\nMONO_JIT_ICALL (mono_ppc_throw_exception)\t\\\nMONO_JIT_ICALL (mono_profiler_raise_exception_clause) \\\nMONO_JIT_ICALL (mono_profiler_raise_gc_allocation) \\\nMONO_JIT_ICALL (mono_profiler_raise_method_enter) \\\nMONO_JIT_ICALL (mono_profiler_raise_method_leave) \\\nMONO_JIT_ICALL (mono_profiler_raise_method_tail_call) \\\nMONO_JIT_ICALL (mono_remoting_update_exception) \\\nMONO_JIT_ICALL (mono_remoting_wrapper) \\\nMONO_JIT_ICALL (mono_resolve_generic_virtual_call) \\\nMONO_JIT_ICALL (mono_resolve_generic_virtual_iface_call) \\\nMONO_JIT_ICALL (mono_resolve_iface_call_gsharedvt) \\\nMONO_JIT_ICALL (mono_resolve_vcall_gsharedvt) \\\nMONO_JIT_ICALL (mono_resume_unwind) \\\nMONO_JIT_ICALL (mono_rethrow_preserve_exception) \\\nMONO_JIT_ICALL (mono_string_builder_to_utf16) \\\nMONO_JIT_ICALL (mono_string_builder_to_utf8) \\\nMONO_JIT_ICALL (mono_string_from_bstr_icall) \\\nMONO_JIT_ICALL (mono_string_from_byvalstr) \\\nMONO_JIT_ICALL (mono_string_from_byvalwstr) \\\nMONO_JIT_ICALL (mono_string_new_len_wrapper) \\\nMONO_JIT_ICALL (mono_string_new_wrapper_internal) \\\nMONO_JIT_ICALL (mono_string_to_ansibstr) \\\nMONO_JIT_ICALL (mono_string_to_bstr) \\\nMONO_JIT_ICALL (mono_string_to_byvalstr) \\\nMONO_JIT_ICALL (mono_string_to_byvalwstr) \\\nMONO_JIT_ICALL (mono_string_to_utf16_internal) \\\nMONO_JIT_ICALL (mono_string_to_utf8str) \\\nMONO_JIT_ICALL (mono_string_utf16_to_builder) \\\nMONO_JIT_ICALL (mono_string_utf16_to_builder2) \\\nMONO_JIT_ICALL (mono_string_utf8_to_builder) \\\nMONO_JIT_ICALL (mono_string_utf8_to_builder2) \\\nMONO_JIT_ICALL (mono_struct_delete_old) \\\nMONO_JIT_ICALL (mono_thread_force_interruption_checkpoint_noraise) \\\nMONO_JIT_ICALL (mono_thread_get_undeniable_exception) \\\nMONO_JIT_ICALL (mono_thread_interruption_checkpoint) \\\nMONO_JIT_ICALL (mono_threads_attach_coop) \\\nMONO_JIT_ICALL (mono_threads_detach_coop) \\\nMONO_JIT_ICALL (mono_threads_enter_gc_safe_region_unbalanced) \\\nMONO_JIT_ICALL (mono_threads_enter_gc_unsafe_region_unbalanced) \\\nMONO_JIT_ICALL (mono_threads_exit_gc_safe_region_unbalanced) \\\nMONO_JIT_ICALL (mono_threads_exit_gc_unsafe_region_unbalanced) \\\nMONO_JIT_ICALL (mono_threads_state_poll) \\\nMONO_JIT_ICALL (mono_throw_exception) \\\nMONO_JIT_ICALL (mono_throw_method_access) \\\nMONO_JIT_ICALL (mono_throw_bad_image) \\\nMONO_JIT_ICALL (mono_trace_enter_method) \\\nMONO_JIT_ICALL (mono_trace_leave_method) \\\nMONO_JIT_ICALL (mono_upgrade_remote_class_wrapper) \\\nMONO_JIT_ICALL (mono_value_copy_internal) \\\nMONO_JIT_ICALL (mono_x86_start_gsharedvt_call)\t\\\nMONO_JIT_ICALL (mono_x86_throw_corlib_exception)\t\\\nMONO_JIT_ICALL (mono_x86_throw_exception)\t\\\nMONO_JIT_ICALL (native_to_interp_trampoline)\t\\\nMONO_JIT_ICALL (personality) \\\nMONO_JIT_ICALL (pthread_getspecific) \\\nMONO_JIT_ICALL (rgctx_fetch_trampoline_general)\t\\\nMONO_JIT_ICALL (sdb_breakpoint_trampoline)\t\\\nMONO_JIT_ICALL (sdb_single_step_trampoline)\t\\\nMONO_JIT_ICALL (type_from_handle) \\\nMONO_JIT_ICALL (ves_icall_array_new) \\\nMONO_JIT_ICALL (ves_icall_array_new_specific) \\\nMONO_JIT_ICALL (ves_icall_marshal_alloc) \\\nMONO_JIT_ICALL (ves_icall_mono_delegate_ctor) \\\nMONO_JIT_ICALL (ves_icall_mono_delegate_ctor_interp) \\\nMONO_JIT_ICALL (ves_icall_mono_ldstr) \\\nMONO_JIT_ICALL (ves_icall_mono_marshal_xdomain_copy_value) \\\nMONO_JIT_ICALL (ves_icall_mono_string_from_utf16) \\\nMONO_JIT_ICALL (ves_icall_mono_string_to_utf8) \\\nMONO_JIT_ICALL (ves_icall_object_new) \\\nMONO_JIT_ICALL (ves_icall_object_new_specific) \\\nMONO_JIT_ICALL (ves_icall_runtime_class_init) \\\nMONO_JIT_ICALL (ves_icall_string_alloc) \\\nMONO_JIT_ICALL (ves_icall_string_new_wrapper) \\\nMONO_JIT_ICALL (ves_icall_thread_finish_async_abort) \\\n\t\\\nMONO_JIT_ICALL (count) \\\n\n#define MONO_JIT_ICALL_mono_get_lmf_addr MONO_JIT_ICALL_mono_tls_get_lmf_addr_extern\n\ntypedef enum MonoJitICallId\n{\n#define MONO_JIT_ICALL(x) MONO_JIT_ICALL_ ## x,\nMONO_JIT_ICALLS\n#undef MONO_JIT_ICALL\n} MonoJitICallId;\n\ntypedef union MonoJitICallInfos {\n\tstruct {\n#define MONO_JIT_ICALL(x) MonoJitICallInfo x;\nMONO_JIT_ICALLS\n#undef MONO_JIT_ICALL\n\t};\n\tMonoJitICallInfo array [MONO_JIT_ICALL_count];\n} MonoJitICallInfos;\n\n// Indirect mono_jit_icall_info access through a function or macro due to loaded LLVM.\n//\n#if MONO_LLVM_LOADED\n\nMONO_LLVM_INTERNAL MonoJitICallInfos*\nmono_get_jit_icall_info (void);\n\n#else\n\nextern MonoJitICallInfos mono_jit_icall_info;\n\n#define mono_get_jit_icall_info() (&mono_jit_icall_info)\n\n#endif\n\n// Convert MonoJitICallInfo* to an int or enum.\n//\n#define mono_jit_icall_info_index(x) ((x) - mono_get_jit_icall_info ()->array)\n#define mono_jit_icall_info_id(x) ((MonoJitICallId)mono_jit_icall_info_index(x))\n\n// Given an enum/id, get the MonoJitICallInfo*.\n//\nstatic inline MonoJitICallInfo*\nmono_find_jit_icall_info (MonoJitICallId id)\n{\n\tconst guint index = (guint)id;\n\n\tg_assert (index < MONO_JIT_ICALL_count);\n\tg_static_assert (MONO_JIT_ICALL_count < 0x200); // fits in 9 bits\n\n\treturn &mono_get_jit_icall_info ()->array [index];\n}\n\n#if __cplusplus\n// MonoJumpInfo.jit_icall_id is gsize instead of MonoJitICallId in order\n// to fully overlap pointers, and not match union reads with writes.\ninline MonoJitICallInfo*\nmono_find_jit_icall_info (gsize id)\n{\n\treturn mono_find_jit_icall_info ((MonoJitICallId)id);\n}\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/loaded-images-internals.h",
    "content": "/**\n* \\file\n*/\n\n#ifndef _MONO_METADATA_IMAGE_HASHES_H_\n#define _MONO_METADATA_IMAGE_HASHES_H_\n\n#include <glib.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/metadata/loader-internals.h>\n#include <mono/utils/mono-forward.h>\n#include <mono/utils/mono-error.h>\n\n/*\n * The \"loaded images\" hashes keep track of the various assemblies and netmodules loaded\n * There are four, for all combinations of [look up by path or assembly name?]\n * and [normal or reflection-only load?, as in Assembly.ReflectionOnlyLoad]\n */\nenum {\n\tMONO_LOADED_IMAGES_HASH_PATH = 0,\n\tMONO_LOADED_IMAGES_HASH_PATH_REFONLY = 1,\n\tMONO_LOADED_IMAGES_HASH_NAME = 2,\n\tMONO_LOADED_IMAGES_HASH_NAME_REFONLY = 3,\n\tMONO_LOADED_IMAGES_HASH_COUNT = 4\n};\n\nstruct _MonoLoadedImages {\n\tMonoAssemblyLoadContext *owner; /* NULL if global */\n\tGHashTable *loaded_images_hashes [MONO_LOADED_IMAGES_HASH_COUNT];\n};\n\nvoid\nmono_loaded_images_init (MonoLoadedImages *li, MonoAssemblyLoadContext *owner);\n\nvoid\nmono_loaded_images_cleanup (MonoLoadedImages *li, gboolean shutdown);\n\nvoid\nmono_loaded_images_free (MonoLoadedImages *li);\n\nGHashTable *\nmono_loaded_images_get_hash (MonoLoadedImages *li, gboolean refonly);\n\nGHashTable *\nmono_loaded_images_get_by_name_hash (MonoLoadedImages *li, gboolean refonly);\n\ngboolean\nmono_loaded_images_remove_image (MonoImage *image);\n\nMonoLoadedImages*\nmono_image_get_loaded_images_for_modules (MonoImage *image);\n\n#ifndef ENABLE_NETCORE\nMonoLoadedImages*\nmono_get_global_loaded_images (void);\n#endif\n\nMonoImage *\nmono_find_image_owner (void *ptr);\n\nvoid\nmono_images_lock (void);\n\nvoid\nmono_images_unlock (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/loader-internals.h",
    "content": "/**\n* \\file\n*/\n\n#ifndef _MONO_METADATA_LOADER_INTERNALS_H_\n#define _MONO_METADATA_LOADER_INTERNALS_H_\n\n#include <glib.h>\n#include <mono/metadata/appdomain.h>\n#include <mono/metadata/image.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/utils/mono-forward.h>\n#include <mono/utils/mono-error.h>\n#include <mono/utils/mono-coop-mutex.h>\n\ntypedef struct _MonoLoadedImages MonoLoadedImages;\ntypedef struct _MonoAssemblyLoadContext MonoAssemblyLoadContext;\n\n#ifndef DISABLE_DLLMAP\ntypedef struct _MonoDllMap MonoDllMap;\nstruct _MonoDllMap {\n\tchar *dll;\n\tchar *target;\n\tchar *func;\n\tchar *target_func;\n\tMonoDllMap *next;\n};\n#endif\n\n#ifdef ENABLE_NETCORE\n/* FIXME: this probably belongs somewhere else */\nstruct _MonoAssemblyLoadContext {\n\tMonoDomain *domain;\n\tMonoLoadedImages *loaded_images;\n\tGSList *loaded_assemblies;\n\tMonoCoopMutex assemblies_lock;\n\t/* Handle of the corresponding managed object.  If the ALC is\n\t * collectible, the handle is weak, otherwise it's strong.\n\t */\n\tuint32_t gchandle;\n\n\t// Used in native-library.c for the hash table below; do not access anywhere else\n\tMonoCoopMutex pinvoke_lock;\n\t// Maps malloc-ed char* pinvoke scope -> MonoDl*\n\tGHashTable *pinvoke_scopes;\n};\n#endif /* ENABLE_NETCORE */\n\nvoid\nmono_global_loader_data_lock (void);\n\nvoid\nmono_global_loader_data_unlock (void);\n\ngpointer\nmono_lookup_pinvoke_call_internal (MonoMethod *method, MonoError *error);\n\n#ifndef DISABLE_DLLMAP\nvoid\nmono_dllmap_insert_internal (MonoImage *assembly, const char *dll, const char *func, const char *tdll, const char *tfunc);\n\nvoid\nmono_global_dllmap_cleanup (void);\n#endif\n\nvoid\nmono_global_loader_cache_init (void);\n\nvoid\nmono_global_loader_cache_cleanup (void);\n\n#ifdef ENABLE_NETCORE\nvoid\nmono_set_pinvoke_search_directories (int dir_count, char **dirs);\n\nvoid\nmono_alc_init (MonoAssemblyLoadContext *alc, MonoDomain *domain);\n\nvoid\nmono_alc_cleanup (MonoAssemblyLoadContext *alc);\n\nvoid\nmono_alc_assemblies_lock (MonoAssemblyLoadContext *alc);\n\nvoid\nmono_alc_assemblies_unlock (MonoAssemblyLoadContext *alc);\n\ngboolean\nmono_alc_is_default (MonoAssemblyLoadContext *alc);\n\nMonoAssembly*\nmono_alc_invoke_resolve_using_load_nofail (MonoAssemblyLoadContext *alc, MonoAssemblyName *aname);\n\nMonoAssembly*\nmono_alc_invoke_resolve_using_resolving_event_nofail (MonoAssemblyLoadContext *alc, MonoAssemblyName *aname);\n\nMonoAssembly*\nmono_alc_invoke_resolve_using_resolve_satellite_nofail (MonoAssemblyLoadContext *alc, MonoAssemblyName *aname);\n\n#endif /* ENABLE_NETCORE */\n\nstatic inline MonoDomain *\nmono_alc_domain (MonoAssemblyLoadContext *alc)\n{\n#ifdef ENABLE_NETCORE\n\treturn alc->domain;\n#else\n\treturn mono_domain_get ();\n#endif\n}\n\nMonoLoadedImages *\nmono_alc_get_loaded_images (MonoAssemblyLoadContext *alc);\n\nMONO_API void\nmono_loader_save_bundled_library (int fd, uint64_t offset, uint64_t size, const char *destfname);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/loader.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_LOADER_H_\n#define _MONO_METADATA_LOADER_H_ 1\n\n#include <mono/utils/mono-forward.h>\n#include <mono/metadata/metadata.h>\n#include <mono/metadata/image.h>\n#include <mono/utils/mono-error.h>\n\nMONO_BEGIN_DECLS\n\ntypedef mono_bool (*MonoStackWalk)     (MonoMethod *method, int32_t native_offset, int32_t il_offset, mono_bool managed, void* data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod *\nmono_get_method             (MonoImage *image, uint32_t token, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod *\nmono_get_method_full        (MonoImage *image, uint32_t token, MonoClass *klass,\n\t\t\t     MonoGenericContext *context);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod *\nmono_get_method_constrained (MonoImage *image, uint32_t token, MonoClass *constrained_class,\n\t\t\t     MonoGenericContext *context, MonoMethod **cil_method);\n\nMONO_API void               \nmono_free_method           (MonoMethod *method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethodSignature*\nmono_method_get_signature_full (MonoMethod *method, MonoImage *image, uint32_t token,\n\t\t\t\tMonoGenericContext *context);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethodSignature*\nmono_method_get_signature  (MonoMethod *method, MonoImage *image, uint32_t token);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethodSignature*\nmono_method_signature      (MonoMethod *method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethodHeader*\nmono_method_get_header     (MonoMethod *method);\n\nMONO_API const char*\nmono_method_get_name       (MonoMethod *method);\n\nMONO_API MonoClass*\nmono_method_get_class      (MonoMethod *method);\n\nMONO_API uint32_t\nmono_method_get_token      (MonoMethod *method);\n\nMONO_API uint32_t\nmono_method_get_flags      (MonoMethod *method, uint32_t *iflags);\n\nMONO_API uint32_t\nmono_method_get_index      (MonoMethod *method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_add_internal_call     (const char *name, const void* method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_dangerous_add_raw_internal_call (const char *name, const void* method);\n\nMONO_API void*\nmono_lookup_internal_call (MonoMethod *method);\n\nMONO_API const char*\nmono_lookup_icall_symbol (MonoMethod *m);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_dllmap_insert (MonoImage *assembly, const char *dll, const char *func, const char *tdll, const char *tfunc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void*\nmono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char **exc_arg);\n\nMONO_API void\nmono_method_get_param_names (MonoMethod *method, const char **names);\n\nMONO_API uint32_t\nmono_method_get_param_token (MonoMethod *method, int idx);\n\nMONO_API void\nmono_method_get_marshal_info (MonoMethod *method, MonoMarshalSpec **mspecs);\n\nMONO_API mono_bool\nmono_method_has_marshal_info (MonoMethod *method);\n\nMONO_API MonoMethod*\nmono_method_get_last_managed  (void);\n\nMONO_API void\nmono_stack_walk         (MonoStackWalk func, void* user_data);\n\n/* Use this if the IL offset is not needed: it's faster */\nMONO_API void\nmono_stack_walk_no_il   (MonoStackWalk func, void* user_data);\n\ntypedef mono_bool (*MonoStackWalkAsyncSafe)     (MonoMethod *method, MonoDomain *domain, void *base_address, int offset, void* data);\nMONO_API void\nmono_stack_walk_async_safe   (MonoStackWalkAsyncSafe func, void *initial_sig_context, void* user_data);\n\nMONO_API MonoMethodHeader*\nmono_method_get_header_checked (MonoMethod *method, MonoError *error);\n\nMONO_END_DECLS\n\n#endif\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/locales.h",
    "content": "/**\n * \\file\n * Culture-sensitive handling\n *\n * Authors:\n *\tDick Porter (dick@ximian.com)\n *\n * (C) 2003 Ximian, Inc.\n */\n\n#ifndef _MONO_METADATA_LOCALES_H_\n#define _MONO_METADATA_LOCALES_H_\n\n#include <glib.h>\n\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/icalls.h>\n\n#if !ENABLE_NETCORE\n\n/* This is a copy of System.Globalization.CompareOptions */\ntypedef enum {\n\tCompareOptions_None=0x00,\n\tCompareOptions_IgnoreCase=0x01,\n\tCompareOptions_IgnoreNonSpace=0x02,\n\tCompareOptions_IgnoreSymbols=0x04,\n\tCompareOptions_IgnoreKanaType=0x08,\n\tCompareOptions_IgnoreWidth=0x10,\n\tCompareOptions_StringSort=0x20000000,\n\tCompareOptions_Ordinal=0x40000000\n} MonoCompareOptions;\n\ntypedef struct NumberFormatEntryManaged NumberFormatEntryManaged;\n\nICALL_EXPORT\ngconstpointer\nves_icall_System_Globalization_CultureData_fill_number_data (gint32 number_index, NumberFormatEntryManaged *managed);\n\nICALL_EXPORT\nvoid ves_icall_System_Globalization_CultureInfo_construct_internal_locale (MonoCultureInfo *this_obj, MonoString *locale);\n\nICALL_EXPORT\nvoid ves_icall_System_Globalization_CompareInfo_construct_compareinfo (MonoCompareInfo *comp, MonoString *locale);\n\nICALL_EXPORT gint32\nves_icall_System_Globalization_CompareInfo_internal_compare (const gunichar2 *str1, gint32 len1,\n\tconst gunichar2 *str2, gint32 len2, gint32 options);\n\nICALL_EXPORT\nvoid ves_icall_System_Globalization_CompareInfo_free_internal_collator (MonoCompareInfo *this_obj);\n\nICALL_EXPORT gint32\nves_icall_System_Globalization_CompareInfo_internal_index (const gunichar2 *source, gint32 sindex,\n\tgint32 count, const gunichar2 *value, gint32 value_length, MonoBoolean first);\n\n#endif /* !ENABLE_NETCORE */\n\n#define MONO_LOCALE_INVARIANT (0x007F)\n\n#endif /* _MONO_METADATA_FILEIO_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/lock-tracer.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_LOCK_TRACER_H__\n#define __MONO_METADATA_LOCK_TRACER_H__\n\n/*This is a private header*/\n#include <glib.h>\n\n#include \"mono/utils/mono-os-mutex.h\"\n#include \"mono/utils/mono-coop-mutex.h\"\n\ntypedef enum {\n\tInvalidLock = 0,\n\tLoaderLock,\n\tImageDataLock,\n\tDomainLock,\n\tDomainAssembliesLock,\n\tDomainJitCodeHashLock,\n\tIcallLock,\n\tAssemblyBindingLock,\n\tMarshalLock,\n\tClassesLock,\n\tLoaderGlobalDataLock,\n\tThreadsLock,\n} RuntimeLocks;\n\n#ifdef LOCK_TRACER\n\nvoid mono_locks_tracer_init (void);\n\nvoid mono_locks_lock_acquired (RuntimeLocks kind, gpointer lock);\nvoid mono_locks_lock_released (RuntimeLocks kind, gpointer lock);\n\n#else\n\n#define mono_locks_tracer_init() do {} while (0)\n\n#define mono_locks_lock_acquired(__UNUSED0, __UNUSED1) do {} while (0)\n#define mono_locks_lock_released(__UNUSED0, __UNUSED1) do {} while (0)\n\n#endif\n\n#define mono_locks_os_acquire(LOCK,NAME)\t\\\n\tdo {\t\\\n\t\tmono_os_mutex_lock (LOCK);\t\\\n\t\tmono_locks_lock_acquired (NAME, LOCK);\t\\\n\t} while (0)\n\n#define mono_locks_os_release(LOCK,NAME)\t\\\n\tdo {\t\\\n\t\tmono_locks_lock_released (NAME, LOCK);\t\\\n\t\tmono_os_mutex_unlock (LOCK);\t\\\n\t} while (0)\n\n#define mono_locks_coop_acquire(LOCK,NAME)\t\\\n\tdo {\t\\\n\t\tmono_coop_mutex_lock (LOCK);\t\\\n\t\tmono_locks_lock_acquired (NAME, LOCK);\t\\\n\t} while (0)\n\n#define mono_locks_coop_release(LOCK,NAME)\t\\\n\tdo {\t\\\n\t\tmono_locks_lock_released (NAME, LOCK);\t\\\n\t\tmono_coop_mutex_unlock (LOCK);\t\\\n\t} while (0)\n\n#endif /* __MONO_METADATA_LOCK_TRACER_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/marshal-ilgen.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_MARSHAL_ILGEN_H__\n#define __MONO_MARSHAL_ILGEN_H__\n\nMONO_API void\nmono_marshal_ilgen_init (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/marshal-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_MARSHAL_INTERNALS_H__\n#define __MONO_METADATA_MARSHAL_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n#include <mono/metadata/object-internals.h>\n\nMonoObjectHandle\nmono_marshal_xdomain_copy_value_handle (MonoObjectHandle val, MonoError *error);\n\nvoid*\nmono_marshal_alloc_co_task_mem (size_t size);\n\nvoid\nmono_marshal_free_co_task_mem (void *ptr);\n\ngpointer\nmono_marshal_realloc_co_task_mem (gpointer ptr, size_t size);\n\nvoid\nmono_marshal_free_hglobal (void *ptr);\n\ngpointer\nmono_marshal_realloc_hglobal (gpointer ptr, size_t size);\n\nvoid*\nmono_marshal_alloc_hglobal (size_t size);\n\nvoid*\nmono_marshal_alloc_hglobal_error (gsize size, MonoError*);\n\ntypedef enum {\n\tTYPECHECK_OBJECT_ARG_POS = 0,\n\tTYPECHECK_CLASS_ARG_POS = 1,\n\tTYPECHECK_CACHE_ARG_POS = 2\n} MarshalTypeCheckPositions;\n\n#endif /* __MONO_METADATA_MARSHAL_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/marshal-windows-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_MARSHAL_WINDOWS_INTERNALS_H__\n#define __MONO_METADATA_MARSHAL_WINDOWS_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n#include \"mono/metadata/marshal.h\"\n#include \"mono/metadata/marshal-internals.h\"\n#include \"mono/metadata/exception.h\"\n#endif /* HOST_WIN32 */\n\n#endif /* __MONO_METADATA_MARSHAL_WINDOWS_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/marshal.h",
    "content": "/**\n * \\file\n * Routines for marshaling complex types in P/Invoke methods.\n * \n * Author:\n *   Paolo Molaro (lupus@ximian.com)\n *\n * (C) 2002 Ximian, Inc.  http://www.ximian.com\n *\n */\n\n#ifndef __MONO_MARSHAL_H__\n#define __MONO_MARSHAL_H__\n\n#include <mono/metadata/class.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/opcodes.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/method-builder.h>\n#include <mono/metadata/remoting.h>\n#include <mono/utils/mono-error.h>\n#include <mono/metadata/icalls.h>\n\ntypedef gunichar2 *mono_bstr;\ntypedef const gunichar2 *mono_bstr_const;\n\n#define mono_marshal_find_bitfield_offset(type, elem, byte_offset, bitmask) \\\n\tdo { \\\n\t\ttype tmp; \\\n\t\tmemset (&tmp, 0, sizeof (tmp)); \\\n\t\ttmp.elem = 1; \\\n\t\tmono_marshal_find_nonzero_bit_offset ((guint8*)&tmp, sizeof (tmp), (byte_offset), (bitmask)); \\\n\t} while (0)\n\n\nGENERATE_TRY_GET_CLASS_WITH_CACHE_DECL(stringbuilder)\n\n\n/*\n * This structure holds the state kept by the emit_ marshalling functions.\n * This is exported so it can be used by cominterop.c.\n */\ntypedef struct {\n\tMonoMethodBuilder *mb;\n\tMonoMethodSignature *sig;\n\tMonoMethodPInvoke *piinfo;\n\tint *orig_conv_args; /* Locals containing the original values of byref args */\n\tint retobj_var;\n\tint vtaddr_var;\n\tMonoClass *retobj_class;\n\tMonoMethodSignature *csig; /* Might need to be changed due to MarshalAs directives */\n\tMonoImage *image; /* The image to use for looking up custom marshallers */\n} EmitMarshalContext;\n\ntypedef enum {\n\t/*\n\t * This is invoked to convert arguments from the current types to\n\t * the underlying types expected by the platform routine.  If required,\n\t * the methods create a temporary variable with the proper type, and return\n\t * the location for it (either the passed argument, or the newly allocated\n\t * local slot).\n\t */\n\tMARSHAL_ACTION_CONV_IN,\n\n\t/*\n\t * This operation is called to push the actual value that was optionally\n\t * converted on the first stage\n\t */\n\tMARSHAL_ACTION_PUSH,\n\n\t/*\n\t * Convert byref arguments back or free resources allocated during the\n\t * CONV_IN stage\n\t */\n\tMARSHAL_ACTION_CONV_OUT,\n\n\t/*\n\t * The result from the unmanaged call is at the top of the stack when\n\t * this action is invoked.    The result should be stored in the\n\t * third local variable slot. \n\t */\n\tMARSHAL_ACTION_CONV_RESULT,\n\n\tMARSHAL_ACTION_MANAGED_CONV_IN,\n\tMARSHAL_ACTION_MANAGED_CONV_OUT,\n\tMARSHAL_ACTION_MANAGED_CONV_RESULT\n} MarshalAction;\n\n/*\n * This is an extension of the MONO_WRAPPER_ enum to avoid adding more elements to that\n * enum.\n */\ntypedef enum {\n\tWRAPPER_SUBTYPE_NONE,\n\t/* Subtypes of MONO_WRAPPER_MANAGED_TO_MANAGED */\n\tWRAPPER_SUBTYPE_ELEMENT_ADDR,\n\tWRAPPER_SUBTYPE_STRING_CTOR,\n\t/* Subtypes of MONO_WRAPPER_STELEMREF */\n\tWRAPPER_SUBTYPE_VIRTUAL_STELEMREF,\n\t/* Subtypes of MONO_WRAPPER_OTHER */\n\tWRAPPER_SUBTYPE_FAST_MONITOR_ENTER,\n\tWRAPPER_SUBTYPE_FAST_MONITOR_ENTER_V4,\n\tWRAPPER_SUBTYPE_FAST_MONITOR_EXIT,\n\tWRAPPER_SUBTYPE_PTR_TO_STRUCTURE,\n\tWRAPPER_SUBTYPE_STRUCTURE_TO_PTR,\n\t/* Subtypes of MONO_WRAPPER_CASTCLASS */\n\tWRAPPER_SUBTYPE_CASTCLASS_WITH_CACHE,\n\tWRAPPER_SUBTYPE_ISINST_WITH_CACHE,\n\t/* Subtypes of MONO_WRAPPER_RUNTIME_INVOKE */\n\tWRAPPER_SUBTYPE_RUNTIME_INVOKE_NORMAL,\n\tWRAPPER_SUBTYPE_RUNTIME_INVOKE_DYNAMIC,\n\tWRAPPER_SUBTYPE_RUNTIME_INVOKE_DIRECT,\n\tWRAPPER_SUBTYPE_RUNTIME_INVOKE_VIRTUAL,\n\t/* Subtypes of MONO_WRAPPER_MANAGED_TO_NATIVE */\n\tWRAPPER_SUBTYPE_ICALL_WRAPPER, // specifically JIT icalls\n\tWRAPPER_SUBTYPE_NATIVE_FUNC_AOT,\n\tWRAPPER_SUBTYPE_PINVOKE,\n\t/* Subtypes of MONO_WRAPPER_OTHER */\n\tWRAPPER_SUBTYPE_SYNCHRONIZED_INNER,\n\tWRAPPER_SUBTYPE_GSHAREDVT_IN,\n\tWRAPPER_SUBTYPE_GSHAREDVT_OUT,\n\tWRAPPER_SUBTYPE_ARRAY_ACCESSOR,\n\t/* Subtypes of MONO_WRAPPER_MANAGED_TO_MANAGED */\n\tWRAPPER_SUBTYPE_GENERIC_ARRAY_HELPER,\n\t/* Subtypes of MONO_WRAPPER_DELEGATE_INVOKE */\n\tWRAPPER_SUBTYPE_DELEGATE_INVOKE_VIRTUAL,\n\tWRAPPER_SUBTYPE_DELEGATE_INVOKE_BOUND,\n\t/* Subtypes of MONO_WRAPPER_OTHER */\n\tWRAPPER_SUBTYPE_GSHAREDVT_IN_SIG,\n\tWRAPPER_SUBTYPE_GSHAREDVT_OUT_SIG,\n\tWRAPPER_SUBTYPE_INTERP_IN,\n\tWRAPPER_SUBTYPE_INTERP_LMF,\n\tWRAPPER_SUBTYPE_AOT_INIT,\n\tWRAPPER_SUBTYPE_LLVM_FUNC\n} WrapperSubtype;\n\ntypedef struct {\n\tMonoMethod *method;\n\tMonoClass *klass;\n} NativeToManagedWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} StringCtorWrapperInfo;\n\ntypedef struct {\n\tint kind;\n} VirtualStelemrefWrapperInfo;\n\ntypedef struct {\n\tguint32 rank, elem_size;\n} ElementAddrWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n\t/* For WRAPPER_SUBTYPE_RUNTIME_INVOKE_NORMAL */\n\tMonoMethodSignature *sig;\n} RuntimeInvokeWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} ManagedToNativeWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} SynchronizedWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} SynchronizedInnerWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} GenericArrayHelperWrapperInfo;\n\ntypedef struct {\n\tMonoJitICallId jit_icall_id;\n} ICallWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} ArrayAccessorWrapperInfo;\n\ntypedef struct {\n\tMonoClass *klass;\n} ProxyWrapperInfo;\n\ntypedef struct {\n\tconst char *gc_name;\n\tint alloc_type;\n} AllocatorWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} UnboxWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} RemotingWrapperInfo;\n\ntypedef struct {\n\tMonoMethodSignature *sig;\n} GsharedvtWrapperInfo;\n\ntypedef struct {\n\tMonoMethod *method;\n} DelegateInvokeWrapperInfo;\n\ntypedef struct {\n\tMonoMethodSignature *sig;\n} InterpInWrapperInfo;\n\ntypedef enum {\n\tAOT_INIT_METHOD = 0,\n\tAOT_INIT_METHOD_GSHARED_MRGCTX = 1,\n\tAOT_INIT_METHOD_GSHARED_THIS = 2,\n\tAOT_INIT_METHOD_GSHARED_VTABLE = 3\n} MonoAotInitSubtype;\n\ntypedef struct {\n\t// We emit this code when we init the module,\n\t// and later match up the native code with this method\n\t// using the name.\n\tMonoAotInitSubtype subtype;\n} AOTInitWrapperInfo;\n\ntypedef enum {\n\tLLVM_FUNC_WRAPPER_GC_POLL = 0\n} MonoLLVMFuncWrapperSubtype;\n\ntypedef struct {\n\t// We emit this code when we init the module,\n\t// and later match up the native code with this method\n\t// using the name.\n\tMonoLLVMFuncWrapperSubtype subtype;\n} LLVMFuncWrapperInfo;\n\n/*\n * This structure contains additional information to uniquely identify a given wrapper\n * method. It can be retrieved by mono_marshal_get_wrapper_info () for certain types\n * of wrappers, i.e. ones which do not have a 1-1 association with a method/class.\n */\ntypedef struct {\n\tWrapperSubtype subtype;\n\tunion {\n\t\t/* RUNTIME_INVOKE_... */\n\t\tRuntimeInvokeWrapperInfo runtime_invoke;\n\t\t/* STRING_CTOR */\n\t\tStringCtorWrapperInfo string_ctor;\n\t\t/* ELEMENT_ADDR */\n\t\tElementAddrWrapperInfo element_addr;\n\t\t/* VIRTUAL_STELEMREF */\n\t\tVirtualStelemrefWrapperInfo virtual_stelemref;\n\t\t/* MONO_WRAPPER_NATIVE_TO_MANAGED */\n\t\tNativeToManagedWrapperInfo native_to_managed;\n\t\t/* MONO_WRAPPER_MANAGED_TO_NATIVE */\n\t\tManagedToNativeWrapperInfo managed_to_native;\n\t\t/* SYNCHRONIZED */\n\t\tSynchronizedWrapperInfo synchronized;\n\t\t/* SYNCHRONIZED_INNER */\n\t\tSynchronizedInnerWrapperInfo synchronized_inner;\n\t\t/* GENERIC_ARRAY_HELPER */\n\t\tGenericArrayHelperWrapperInfo generic_array_helper;\n\t\t/* ICALL_WRAPPER */\n\t\tICallWrapperInfo icall;\n\t\t/* ARRAY_ACCESSOR */\n\t\tArrayAccessorWrapperInfo array_accessor;\n\t\t/* PROXY_ISINST etc. */\n\t\tProxyWrapperInfo proxy;\n\t\t/* ALLOC */\n\t\tAllocatorWrapperInfo alloc;\n\t\t/* UNBOX */\n\t\tUnboxWrapperInfo unbox;\n\t\t/* MONO_WRAPPER_REMOTING_INVOKE/MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK/MONO_WRAPPER_XDOMAIN_INVOKE */\n\t\tRemotingWrapperInfo remoting;\n\t\t/* GSHAREDVT_IN_SIG/GSHAREDVT_OUT_SIG */\n\t\tGsharedvtWrapperInfo gsharedvt;\n\t\t/* DELEGATE_INVOKE */\n\t\tDelegateInvokeWrapperInfo delegate_invoke;\n\t\t/* INTERP_IN */\n\t\tInterpInWrapperInfo interp_in;\n\t\t/* AOT_INIT */\n\t\tAOTInitWrapperInfo aot_init;\n\t\t/* LLVM_FUNC */\n\t\tLLVMFuncWrapperInfo llvm_func;\n\t} d;\n} WrapperInfo;\n\ntypedef enum {\n\tSTELEMREF_OBJECT, /*no check at all*/\n\tSTELEMREF_SEALED_CLASS, /*check vtable->klass->element_type */\n\tSTELEMREF_CLASS, /*only the klass->parents check*/\n\tSTELEMREF_CLASS_SMALL_IDEPTH, /* like STELEMREF_CLASS bit without the idepth check */\n\tSTELEMREF_INTERFACE, /*interfaces without variant generic arguments. */\n\tSTELEMREF_COMPLEX, /*arrays, MBR or types with variant generic args - go straight to icalls*/\n\tSTELEMREF_KIND_COUNT\n} MonoStelemrefKind;\n\n\n#define MONO_MARSHAL_CALLBACKS_VERSION 4\n\ntypedef struct {\n\tint version;\n\tint (*emit_marshal_array) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_boolean) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_ptr) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_char) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_scalar) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\n\tint (*emit_marshal_custom) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_asany) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_vtype) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_string) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_safehandle) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_handleref) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_object) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tint (*emit_marshal_variant) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action);\n\tvoid (*emit_castclass) (MonoMethodBuilder *mb);\n\tvoid (*emit_struct_to_ptr) (MonoMethodBuilder *mb, MonoClass *klass);\n\tvoid (*emit_ptr_to_struct) (MonoMethodBuilder *mb, MonoClass *klass);\n\tvoid (*emit_isinst) (MonoMethodBuilder *mb);\n\tvoid (*emit_virtual_stelemref) (MonoMethodBuilder *mb, const char **param_names, MonoStelemrefKind kind);\n\tvoid (*emit_stelemref) (MonoMethodBuilder *mb);\n\tvoid (*emit_array_address) (MonoMethodBuilder *mb, int rank, int elem_size);\n\tvoid (*emit_native_wrapper) (MonoImage *image, MonoMethodBuilder *mb, MonoMethodSignature *sig, MonoMethodPInvoke *piinfo, MonoMarshalSpec **mspecs, gpointer func, gboolean aot, gboolean check_exceptions, gboolean func_param, gboolean skip_gc_trans);\n\tvoid (*emit_managed_wrapper) (MonoMethodBuilder *mb, MonoMethodSignature *invoke_sig, MonoMarshalSpec **mspecs, EmitMarshalContext* m, MonoMethod *method, uint32_t target_handle);\n\tvoid (*emit_runtime_invoke_body) (MonoMethodBuilder *mb, const char **param_names, MonoImage *image, MonoMethod *method, MonoMethodSignature *sig, MonoMethodSignature *callsig, gboolean virtual_, gboolean need_direct_wrapper);\n\tvoid (*emit_runtime_invoke_dynamic) (MonoMethodBuilder *mb);\n\tvoid (*emit_delegate_begin_invoke) (MonoMethodBuilder *mb, MonoMethodSignature *sig);\n\tvoid (*emit_delegate_end_invoke) (MonoMethodBuilder *mb, MonoMethodSignature *sig);\n\tvoid (*emit_delegate_invoke_internal) (MonoMethodBuilder *mb, MonoMethodSignature *sig, MonoMethodSignature *invoke_sig, gboolean static_method_with_first_arg_bound, gboolean callvirt, gboolean closed_over_null, MonoMethod *method, MonoMethod *target_method, MonoClass *target_class, MonoGenericContext *ctx, MonoGenericContainer *container);\n\tvoid (*emit_synchronized_wrapper) (MonoMethodBuilder *mb, MonoMethod *method, MonoGenericContext *ctx, MonoGenericContainer *container, MonoMethod *enter_method, MonoMethod *exit_method, MonoMethod *gettypefromhandle_method);\n\tvoid (*emit_unbox_wrapper) (MonoMethodBuilder *mb, MonoMethod *method);\n\tvoid (*emit_array_accessor_wrapper) (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *sig, MonoGenericContext *ctx);\n\tvoid (*emit_generic_array_helper) (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *csig);\n\tvoid (*emit_thunk_invoke_wrapper) (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *csig);\n\tvoid (*emit_create_string_hack) (MonoMethodBuilder *mb, MonoMethodSignature *csig, MonoMethod *res);\n\tvoid (*emit_native_icall_wrapper) (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *csig, gboolean check_exceptions, gboolean aot, MonoMethodPInvoke *pinfo);\n\tvoid (*emit_icall_wrapper) (MonoMethodBuilder *mb, MonoJitICallInfo *callinfo, MonoMethodSignature *csig2, gboolean check_exceptions);\n\tvoid (*emit_return) (MonoMethodBuilder *mb);\n\tvoid (*emit_vtfixup_ftnptr) (MonoMethodBuilder *mb, MonoMethod *method, int param_count, guint16 type);\n\tvoid (*mb_skip_visibility) (MonoMethodBuilder *mb);\n\tvoid (*mb_set_dynamic) (MonoMethodBuilder *mb);\n\tvoid (*mb_emit_exception) (MonoMethodBuilder *mb, const char *exc_nspace, const char *exc_name, const char *msg);\n\tvoid (*mb_emit_exception_for_error) (MonoMethodBuilder *mb, const MonoError *emitted_error);\n\tvoid (*mb_emit_byte) (MonoMethodBuilder *mb, guint8 op);\n} MonoMarshalCallbacks;\n\n/*type of the function pointer of methods returned by mono_marshal_get_runtime_invoke*/\ntypedef MonoObject *(*RuntimeInvokeFunction) (MonoObject *this_obj, void **params, MonoObject **exc, void* compiled_method);\n\ntypedef void (*RuntimeInvokeDynamicFunction) (void *args, MonoObject **exc, void* compiled_method);\n\nvoid\nmono_install_marshal_callbacks (MonoMarshalCallbacks *cb);\n\n/* marshaling helper functions */\n\nvoid\nmono_marshal_init (void);\n\nvoid\nmono_marshal_init_tls (void);\n\nvoid\nmono_marshal_cleanup (void);\n\ngint32\nmono_class_native_size (MonoClass *klass, guint32 *align);\n\nMonoMarshalType *\nmono_marshal_load_type_info (MonoClass* klass);\n\ngint32\nmono_marshal_type_size (MonoType *type, MonoMarshalSpec *mspec, guint32 *align,\n\t\t\tgboolean as_field, gboolean unicode);\n\nint            \nmono_type_native_stack_size (MonoType *type, guint32 *alignment);\n\nmono_bstr\nmono_ptr_to_bstr (const gunichar2* ptr, int slen);\n\nvoid mono_delegate_free_ftnptr (MonoDelegate *delegate);\n\nvoid\nmono_marshal_ftnptr_eh_callback (guint32 gchandle);\n\nMONO_PAL_API void\nmono_marshal_set_last_error (void);\n\nICALL_EXTERN_C\nvoid\nmono_marshal_clear_last_error (void);\n\nguint\nmono_type_to_ldind (MonoType *type);\n\nguint\nmono_type_to_stind (MonoType *type);\n\n/* functions to create various architecture independent helper functions */\n\nMonoMethod *\nmono_marshal_method_from_wrapper (MonoMethod *wrapper);\n\nWrapperInfo*\nmono_wrapper_info_create (MonoMethodBuilder *mb, WrapperSubtype subtype);\n\nvoid\nmono_marshal_set_wrapper_info (MonoMethod *method, WrapperInfo *info);\n\nMONO_LLVM_INTERNAL WrapperInfo*\nmono_marshal_get_wrapper_info (MonoMethod *wrapper);\n\nMonoMethod *\nmono_marshal_get_delegate_begin_invoke (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_delegate_end_invoke (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_delegate_invoke (MonoMethod *method, MonoDelegate *del);\n\nMonoMethod *\nmono_marshal_get_delegate_invoke_internal (MonoMethod *method, gboolean callvirt, gboolean static_method_with_first_arg_bound, MonoMethod *target_method);\n\nMonoMethod *\nmono_marshal_get_runtime_invoke_full (MonoMethod *method, gboolean virtual_, gboolean need_direct_wrapper);\n\nMonoMethod *\nmono_marshal_get_runtime_invoke (MonoMethod *method, gboolean is_virtual);\n\nMonoMethod*\nmono_marshal_get_runtime_invoke_dynamic (void);\n\nMonoMethod *\nmono_marshal_get_runtime_invoke_for_sig (MonoMethodSignature *sig);\n\nMonoMethodSignature*\nmono_marshal_get_string_ctor_signature (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_managed_wrapper (MonoMethod *method, MonoClass *delegate_klass, uint32_t this_loc, MonoError *exernal_error);\n\ngpointer\nmono_marshal_get_vtfixup_ftnptr (MonoImage *image, guint32 token, guint16 type);\n\nMonoMethod *\nmono_marshal_get_icall_wrapper (MonoJitICallInfo *callinfo, gboolean check_exceptions);\n\nMONO_LLVM_INTERNAL MonoMethod *\nmono_marshal_get_aot_init_wrapper (MonoAotInitSubtype subtype);\n\nMONO_LLVM_INTERNAL const char *\nmono_marshal_get_aot_init_wrapper_name (MonoAotInitSubtype subtype);\n\nMONO_LLVM_INTERNAL MonoMethod *\nmono_marshal_get_llvm_func_wrapper (MonoLLVMFuncWrapperSubtype subtype);\n\nMonoMethod *\nmono_marshal_get_native_wrapper (MonoMethod *method, gboolean check_exceptions, gboolean aot);\n\nMonoMethod *\nmono_marshal_get_native_func_wrapper (MonoImage *image, MonoMethodSignature *sig, MonoMethodPInvoke *piinfo, MonoMarshalSpec **mspecs, gpointer func);\n\nMonoMethod*\nmono_marshal_get_native_func_wrapper_aot (MonoClass *klass);\n\nMonoMethod *\nmono_marshal_get_struct_to_ptr (MonoClass *klass);\n\nMonoMethod *\nmono_marshal_get_ptr_to_struct (MonoClass *klass);\n\nMonoMethod *\nmono_marshal_get_synchronized_wrapper (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_synchronized_inner_wrapper (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_unbox_wrapper (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_castclass_with_cache (void);\n\nMonoMethod *\nmono_marshal_get_isinst_with_cache (void);\n\nMonoMethod *\nmono_marshal_get_stelemref (void);\n\nMonoMethod*\nmono_marshal_get_virtual_stelemref (MonoClass *array_class);\n\nMonoMethod**\nmono_marshal_get_virtual_stelemref_wrappers (int *nwrappers);\n\nMonoMethod*\nmono_marshal_get_array_address (int rank, int elem_size);\n\nMonoMethod *\nmono_marshal_get_array_accessor_wrapper (MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_generic_array_helper (MonoClass *klass, const gchar *name, MonoMethod *method);\n\nMonoMethod *\nmono_marshal_get_thunk_invoke_wrapper (MonoMethod *method);\n\nMonoMethod*\nmono_marshal_get_gsharedvt_in_wrapper (void);\n\nMonoMethod*\nmono_marshal_get_gsharedvt_out_wrapper (void);\n\nvoid\nmono_marshal_free_dynamic_wrappers (MonoMethod *method);\n\nvoid\nmono_marshal_lock_internal (void);\n\nvoid\nmono_marshal_unlock_internal (void);\n\n/* marshaling internal calls */\n\nvoid * \nmono_marshal_alloc (gsize size, MonoError *error);\n\nICALL_EXTERN_C\nvoid \nmono_marshal_free (gpointer ptr);\n\nICALL_EXTERN_C\nvoid\nmono_marshal_free_array (gpointer *ptr, int size);\n\ngboolean \nmono_marshal_free_ccw (MonoObject* obj);\n\nvoid\nmono_cominterop_release_all_rcws (void); \n\nMONO_API void *\nmono_marshal_string_to_utf16 (MonoString *s);\n\nICALL_EXTERN_C\nvoid\nmono_marshal_set_last_error_windows (int error);\n\nICALL_EXTERN_C\nvoid \nmono_struct_delete_old (MonoClass *klass, char *ptr);\n\nint\nmono_emit_marshal (EmitMarshalContext *m, int argnum, MonoType *t, \n\t      MonoMarshalSpec *spec, int conv_arg, \n\t      MonoType **conv_arg_type, MarshalAction action);\n\nICALL_EXTERN_C\nMonoObject *\nmono_marshal_isinst_with_cache (MonoObject *obj, MonoClass *klass, uintptr_t *cache);\n\nICALL_EXTERN_C\nMonoAsyncResult *\nmono_delegate_begin_invoke (MonoDelegate *delegate, gpointer *params);\n\nICALL_EXTERN_C\nMonoObject *\nmono_delegate_end_invoke (MonoDelegate *delegate, gpointer *params);\n\nMonoMarshalNative\nmono_marshal_get_string_encoding (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec);\n\nMonoMarshalConv\nmono_marshal_get_string_to_ptr_conv (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec);\n\nMonoMarshalConv\nmono_marshal_get_stringbuilder_to_ptr_conv (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec);\n\nMonoMarshalConv\nmono_marshal_get_ptr_to_stringbuilder_conv (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec, gboolean *need_free);\n\nMonoMarshalConv\nmono_marshal_get_ptr_to_string_conv (MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec, gboolean *need_free);\n\nMonoType*\nmono_marshal_boolean_conv_in_get_local_type (MonoMarshalSpec *spec, guint8 *ldc_op /*out*/);\n\nMonoClass*\nmono_marshal_boolean_managed_conv_in_get_conv_arg_class (MonoMarshalSpec *spec, guint8 *ldop/*out*/);\n\ngboolean\nmono_pinvoke_is_unicode (MonoMethodPInvoke *piinfo);\n\ngboolean\nmono_marshal_need_free (MonoType *t, MonoMethodPInvoke *piinfo, MonoMarshalSpec *spec);\n\nICALL_EXTERN_C\nMonoObject* mono_marshal_get_type_object (MonoClass *klass);\n\nICALL_EXPORT\nguint32 \nves_icall_System_Runtime_InteropServices_Marshal_GetLastWin32Error (void);\n\nICALL_EXPORT\nvoid\nves_icall_System_Runtime_InteropServices_Marshal_SetLastWin32Error (guint32 err);\n\nICALL_EXPORT\nmono_bstr\nves_icall_System_Runtime_InteropServices_Marshal_BufferToBSTR (const gunichar2 *ptr, int len);\n\nICALL_EXPORT\nvoid\nves_icall_System_Runtime_InteropServices_Marshal_FreeCoTaskMem (void *ptr);\n\nICALL_EXPORT\nvoid\nves_icall_System_Runtime_InteropServices_Marshal_FreeHGlobal (void *ptr);\n\nICALL_EXPORT\nvoid\nves_icall_System_Runtime_InteropServices_Marshal_FreeBSTR (mono_bstr_const ptr);\n\nICALL_EXPORT\nint\nves_icall_System_Runtime_InteropServices_Marshal_AddRefInternal (MonoIUnknown *pUnk);\n\nICALL_EXPORT\nint\nves_icall_System_Runtime_InteropServices_Marshal_QueryInterfaceInternal (MonoIUnknown *pUnk, gconstpointer riid, gpointer* ppv);\n\nICALL_EXPORT\nint\nves_icall_System_Runtime_InteropServices_Marshal_ReleaseInternal (MonoIUnknown *pUnk);\n\nMONO_API void\nmono_win32_compat_CopyMemory (gpointer dest, gconstpointer source, gsize length);\n\nMONO_API void\nmono_win32_compat_FillMemory (gpointer dest, gsize length, guchar fill);\n\nMONO_API void\nmono_win32_compat_MoveMemory (gpointer dest, gconstpointer source, gsize length);\n\nMONO_API void\nmono_win32_compat_ZeroMemory (gpointer dest, gsize length);\n\nMONO_LLVM_INTERNAL void\nmono_marshal_find_nonzero_bit_offset (guint8 *buf, int len, int *byte_offset, guint8 *bitmask);\n\nMonoMethodSignature*\nmono_signature_no_pinvoke (MonoMethod *method);\n\n/* Called from cominterop.c/remoting.c */\n\nvoid\nmono_marshal_emit_native_wrapper (MonoImage *image, MonoMethodBuilder *mb, MonoMethodSignature *sig, MonoMethodPInvoke *piinfo, MonoMarshalSpec **mspecs, gpointer func, gboolean aot, gboolean check_exceptions, gboolean func_param, gboolean skip_gc_trans);\n\nvoid\nmono_marshal_emit_managed_wrapper (MonoMethodBuilder *mb, MonoMethodSignature *invoke_sig, MonoMarshalSpec **mspecs, EmitMarshalContext* m, MonoMethod *method, uint32_t target_handle);\n\nGHashTable*\nmono_marshal_get_cache (GHashTable **var, GHashFunc hash_func, GCompareFunc equal_func);\n\nMonoMethod*\nmono_marshal_find_in_cache (GHashTable *cache, gpointer key);\n\nMonoMethod*\nmono_mb_create_and_cache (GHashTable *cache, gpointer key,\n\t\t\t\t\t\t  MonoMethodBuilder *mb, MonoMethodSignature *sig,\n\t\t\t\t\t\t  int max_stack);\nvoid\nmono_marshal_emit_thread_interrupt_checkpoint (MonoMethodBuilder *mb);\n\nvoid\nmono_marshal_emit_thread_force_interrupt_checkpoint (MonoMethodBuilder *mb);\n\nvoid\nmono_marshal_use_aot_wrappers (gboolean use);\n\nint\nmono_mb_emit_save_args (MonoMethodBuilder *mb, MonoMethodSignature *sig, gboolean save_this);\n\nvoid\nmono_mb_emit_restore_result (MonoMethodBuilder *mb, MonoType *return_type);\n\nMonoMethod*\nmono_mb_create (MonoMethodBuilder *mb, MonoMethodSignature *sig,\n\t\t\t\tint max_stack, WrapperInfo *info);\n\nMonoMethod*\nmono_mb_create_and_cache_full (GHashTable *cache, gpointer key,\n\t\t\t\t\t\t\t   MonoMethodBuilder *mb, MonoMethodSignature *sig,\n\t\t\t\t\t\t\t   int max_stack, WrapperInfo *info, gboolean *out_found);\n\n#endif /* __MONO_MARSHAL_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mempool-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_MEMPOOL_INTERNALS_H_\n#define _MONO_MEMPOOL_INTERNALS_H_\n\n#include <glib.h>\n\n#include \"mono/utils/mono-compiler.h\"\n#include \"mono/metadata/mempool.h\"\n\nstatic inline GList*\ng_list_prepend_mempool (MonoMemPool *mp, GList *list, gpointer data)\n{\n\tGList *new_list;\n\t\n\tnew_list = (GList *) mono_mempool_alloc (mp, sizeof (GList));\n\tnew_list->data = data;\n\tnew_list->prev = list ? list->prev : NULL;\n    new_list->next = list;\n\n    if (new_list->prev)\n            new_list->prev->next = new_list;\n    if (list)\n            list->prev = new_list;\n\n\treturn new_list;\n}\n\nstatic inline GSList*\ng_slist_prepend_mempool (MonoMemPool *mp, GSList *list, gpointer  data)\n{\n\tGSList *new_list;\n\t\n\tnew_list = (GSList *) mono_mempool_alloc (mp, sizeof (GSList));\n\tnew_list->data = data;\n\tnew_list->next = list;\n\n\treturn new_list;\n}\n\nstatic inline GSList*\ng_slist_append_mempool (MonoMemPool *mp, GSList *list, gpointer data)\n{\n\tGSList *new_list;\n\tGSList *last;\n\n\tnew_list = (GSList *) mono_mempool_alloc (mp, sizeof (GSList));\n\tnew_list->data = data;\n\tnew_list->next = NULL;\n\n\tif (list) {\n\t\tlast = list;\n\t\twhile (last->next)\n\t\t\tlast = last->next;\n\t\tlast->next = new_list;\n\n\t\treturn list;\n\t} else\n\t\treturn new_list;\n}\n\nstatic inline GList*\ng_list_append_mempool (MonoMemPool *mp, GList *list, gpointer data)\n{\n\tGList *new_list;\n\n\tnew_list = (GList *) mono_mempool_alloc0 (mp, sizeof (GList));\n\tnew_list->data = data;\n\tnew_list->prev = g_list_last (list);\n\tif (new_list->prev)\n\t\tnew_list->prev->next = new_list;\n\n\treturn list ? list : new_list;\n}\n\nchar*\nmono_mempool_strdup_vprintf (MonoMemPool *pool, const char *format, va_list args);\n\nchar*\nmono_mempool_strdup_printf (MonoMemPool *pool, const char *format, ...) MONO_ATTR_FORMAT_PRINTF(2,3);\n\nlong\nmono_mempool_get_bytes_allocated (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mempool.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_MEMPOOL_H_\n#define _MONO_MEMPOOL_H_\n\n#include <mono/utils/mono-publib.h>\n\ntypedef struct _MonoMemPool MonoMemPool;\n\nMONO_API MonoMemPool *\nmono_mempool_new           (void);\n\nMONO_API MonoMemPool *\nmono_mempool_new_size      (int initial_size);\n\nMONO_API void\nmono_mempool_destroy       (MonoMemPool *pool);\n\nMONO_API void\nmono_mempool_invalidate    (MonoMemPool *pool);\n\nMONO_API void\nmono_mempool_stats         (MonoMemPool *pool);\n\nMONO_API void*\nmono_mempool_alloc         (MonoMemPool *pool, unsigned int size);\n\n#define mono_mempool_alloc(pool, size) (g_cast (mono_mempool_alloc ((pool), (size))))\n\nMONO_API void*\nmono_mempool_alloc0        (MonoMemPool *pool, unsigned int size);\n\n#define mono_mempool_alloc0(pool, size) (g_cast (mono_mempool_alloc0 ((pool), (size))))\n\nMONO_API mono_bool\nmono_mempool_contains_addr (MonoMemPool *pool, void* addr);\n\nMONO_API char*\nmono_mempool_strdup        (MonoMemPool *pool, const char *s);\n\nMONO_API uint32_t\nmono_mempool_get_allocated (MonoMemPool *pool);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/metadata-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_INTERNALS_H__\n#define __MONO_METADATA_INTERNALS_H__\n\n#include \"mono/utils/mono-forward-internal.h\"\n#include \"mono/metadata/image.h\"\n#include \"mono/metadata/blob.h\"\n#include \"mono/metadata/cil-coff.h\"\n#include \"mono/metadata/mempool.h\"\n#include \"mono/metadata/domain-internals.h\"\n#include \"mono/metadata/mono-hash.h\"\n#include \"mono/utils/mono-compiler.h\"\n#include \"mono/utils/mono-dl.h\"\n#include \"mono/utils/monobitset.h\"\n#include \"mono/utils/mono-property-hash.h\"\n#include \"mono/utils/mono-value-hash.h\"\n#include <mono/utils/mono-error.h>\n#include \"mono/utils/mono-conc-hashtable.h\"\n#include \"mono/utils/refcount.h\"\n\nstruct _MonoType {\n\tunion {\n\t\tMonoClass *klass; /* for VALUETYPE and CLASS */\n\t\tMonoType *type;   /* for PTR */\n\t\tMonoArrayType *array; /* for ARRAY */\n\t\tMonoMethodSignature *method;\n\t\tMonoGenericParam *generic_param; /* for VAR and MVAR */\n\t\tMonoGenericClass *generic_class; /* for GENERICINST */\n\t} data;\n\tunsigned int attrs    : 16; /* param attributes or field flags */\n\tMonoTypeEnum type     : 8;\n\tunsigned int has_cmods : 1;  \n\tunsigned int byref    : 1;\n\tunsigned int pinned   : 1;  /* valid when included in a local var signature */\n};\n\ntypedef struct {\n\tunsigned int required : 1;\n\tMonoType *type;\n} MonoSingleCustomMod;\n\n/* Aggregate custom modifiers can happen if a generic VAR or MVAR is inflated,\n * and both the VAR and the type that will be used to inflated it have custom\n * modifiers, but they come from different images.  (e.g. inflating 'class G<T>\n * {void Test (T modopt(IsConst) t);}' with 'int32 modopt(IsLong)' where G is\n * in image1 and the int32 is in image2.)\n *\n * Moreover, we can't just store an image and a type token per modifier, because\n * Roslyn and C++/CLI sometimes create modifiers that mention generic parameters that must be inflated, like:\n *     void .CL1`1.Test(!0 modopt(System.Nullable`1<!0>))\n * So we have to store a resolved MonoType*.\n *\n * Because the types come from different images, we allocate the aggregate\n * custom modifiers container object in the mempool of a MonoImageSet to ensure\n * that it doesn't have dangling image pointers.\n */\ntypedef struct {\n\tuint8_t count;\n\tMonoSingleCustomMod modifiers[1]; /* Actual length is count */\n} MonoAggregateModContainer;\n\n/* ECMA says upto 64 custom modifiers.  It's possible we could see more at\n * runtime due to modifiers being appended together when we inflate type.  In\n * that case we should revisit the places where this define is used to make\n * sure that we don't blow up the stack (or switch to heap allocation for\n * temporaries).\n */\n#define MONO_MAX_EXPECTED_CMODS 64\n\ntypedef struct {\n\tMonoType unmodified;\n\tgboolean is_aggregate;\n\tunion {\n\t\tMonoCustomModContainer cmods;\n\t\t/* the actual aggregate modifiers are in a MonoImageSet mempool\n\t\t * that includes all the images of all the modifier types and\n\t\t * also the type that this aggregate container is a part of.*/\n\t\tMonoAggregateModContainer *amods;\n\t} mods;\n} MonoTypeWithModifiers;\n\ngboolean\nmono_type_is_aggregate_mods (const MonoType *t);\n\nstatic inline void\nmono_type_with_mods_init (MonoType *dest, uint8_t num_mods, gboolean is_aggregate)\n{\n\tif (num_mods == 0) {\n\t\tdest->has_cmods = 0;\n\t\treturn;\n\t}\n\tdest->has_cmods = 1;\n\tMonoTypeWithModifiers *dest_full = (MonoTypeWithModifiers *)dest;\n\tdest_full->is_aggregate = !!is_aggregate;\n\tif (is_aggregate)\n\t\tdest_full->mods.amods = NULL;\n\telse\n\t\tdest_full->mods.cmods.count = num_mods;\n}\n\nMonoCustomModContainer *\nmono_type_get_cmods (const MonoType *t);\n\nMonoAggregateModContainer *\nmono_type_get_amods (const MonoType *t);\n\nvoid\nmono_type_set_amods (MonoType *t, MonoAggregateModContainer *amods);\n\nstatic inline uint8_t\nmono_type_custom_modifier_count (const MonoType *t)\n{\n\tif (!t->has_cmods)\n\t\treturn 0;\n\tMonoTypeWithModifiers *full = (MonoTypeWithModifiers *)t;\n\tif (full->is_aggregate)\n\t\treturn full->mods.amods->count;\n\telse\n\t\treturn full->mods.cmods.count;\n}\n\nMonoType *\nmono_type_get_custom_modifier (const MonoType *ty, uint8_t idx, gboolean *required, MonoError *error);\n\n// Note: sizeof (MonoType) is dangerous. It can copy the num_mods\n// field without copying the variably sized array. This leads to\n// memory unsafety on the stack and/or heap, when we try to traverse\n// this array.\n//\n// Use mono_sizeof_monotype \n// to get the size of the memory to copy.\n#define MONO_SIZEOF_TYPE sizeof (MonoType)\n\nsize_t \nmono_sizeof_type_with_mods (uint8_t num_mods, gboolean aggregate);\n\nsize_t \nmono_sizeof_type (const MonoType *ty);\n\nsize_t\nmono_sizeof_aggregate_modifiers (uint8_t num_mods);\n\nMonoAggregateModContainer *\nmono_metadata_get_canonical_aggregate_modifiers (MonoAggregateModContainer *candidate);\n\n#define MONO_SECMAN_FLAG_INIT(x)\t\t(x & 0x2)\n#define MONO_SECMAN_FLAG_GET_VALUE(x)\t\t(x & 0x1)\n#define MONO_SECMAN_FLAG_SET_VALUE(x,y)\t\tdo { x = ((y) ? 0x3 : 0x2); } while (0)\n\n#define MONO_PUBLIC_KEY_TOKEN_LENGTH\t17\n\n#define MONO_PROCESSOR_ARCHITECTURE_NONE 0\n#define MONO_PROCESSOR_ARCHITECTURE_MSIL 1\n#define MONO_PROCESSOR_ARCHITECTURE_X86 2\n#define MONO_PROCESSOR_ARCHITECTURE_IA64 3\n#define MONO_PROCESSOR_ARCHITECTURE_AMD64 4\n#define MONO_PROCESSOR_ARCHITECTURE_ARM 5\n\nstruct _MonoAssemblyName {\n\tconst char *name;\n\tconst char *culture;\n\tconst char *hash_value;\n\tconst mono_byte* public_key;\n\t// string of 16 hex chars + 1 NULL\n\tmono_byte public_key_token [MONO_PUBLIC_KEY_TOKEN_LENGTH];\n\tuint32_t hash_alg;\n\tuint32_t hash_len;\n\tuint32_t flags;\n#ifdef ENABLE_NETCORE\n\tint major, minor, build, revision, arch;\n#else\n\tuint16_t major, minor, build, revision, arch;\n#endif\n};\n\nstruct MonoTypeNameParse {\n\tchar *name_space;\n\tchar *name;\n\tMonoAssemblyName assembly;\n\tGList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */\n\tGPtrArray *type_arguments;\n\tGList *nested;\n};\n\n\ntypedef enum MonoAssemblyContextKind {\n\t/* Default assembly context: Load(String) and assembly references */\n\tMONO_ASMCTX_DEFAULT = 0,\n\t/* Reflection-only only context: ReflectionOnlyLoad and ReeflectionOnlyLoadFrom */\n\tMONO_ASMCTX_REFONLY = 1,\n\t/* LoadFrom context: LoadFrom() and references */\n\tMONO_ASMCTX_LOADFROM = 2,\n\t/* Individual assembly context (.NET Framework docs call this \"not in\n\t * any context\"): LoadFile(String) and Load(byte[]) are here.\n\t */\n\tMONO_ASMCTX_INDIVIDUAL = 3,\n\n\tMONO_ASMCTX_LAST = 3\n} MonoAssemblyContextKind;\n\ntypedef struct _MonoAssemblyContext {\n\tMonoAssemblyContextKind kind;\n} MonoAssemblyContext;\n\nstruct _MonoAssembly {\n\t/* \n\t * The number of appdomains which have this assembly loaded plus the number of \n\t * assemblies referencing this assembly through an entry in their image->references\n\t * arrays. The latter is needed because entries in the image->references array\n\t * might point to assemblies which are only loaded in some appdomains, and without\n\t * the additional reference, they can be freed at any time.\n\t * The ref_count is initially 0.\n\t */\n\tint ref_count; /* use atomic operations only */\n\tchar *basedir;\n\tMonoAssemblyName aname;\n\tMonoImage *image;\n\tGSList *friend_assembly_names; /* Computed by mono_assembly_load_friends () */\n\tguint8 friend_assembly_names_inited;\n\tguint8 in_gac;\n\tguint8 dynamic;\n\tguint8 corlib_internal;\n\tMonoAssemblyContext context;\n\tguint8 wrap_non_exception_throws;\n\tguint8 wrap_non_exception_throws_inited;\n\tguint8 jit_optimizer_disabled;\n\tguint8 jit_optimizer_disabled_inited;\n\t/* security manager flags (one bit is for lazy initialization) */\n\tguint32 ecma:2;\t\t/* Has the ECMA key */\n\tguint32 aptc:2;\t\t/* Has the [AllowPartiallyTrustedCallers] attributes */\n\tguint32 fulltrust:2;\t/* Has FullTrust permission */\n\tguint32 unmanaged:2;\t/* Has SecurityPermissionFlag.UnmanagedCode permission */\n\tguint32 skipverification:2;\t/* Has SecurityPermissionFlag.SkipVerification permission */\n};\n\ntypedef struct {\n\t/*\n\t * indexed by MonoMethodSignature \n\t * Protected by the marshal lock\n\t */\n\tGHashTable *delegate_invoke_cache;\n\tGHashTable *delegate_begin_invoke_cache;\n\tGHashTable *delegate_end_invoke_cache;\n\tGHashTable *runtime_invoke_signature_cache;\n\tGHashTable *runtime_invoke_sig_cache;\n\n\t/*\n\t * indexed by SignaturePointerPair\n\t */\n\tGHashTable *delegate_abstract_invoke_cache;\n\n\t/*\n\t * indexed by MonoMethod pointers\n\t * Protected by the marshal lock\n\t */\n\tGHashTable *runtime_invoke_method_cache;\n\tGHashTable *managed_wrapper_cache;\n\n\tGHashTable *native_wrapper_cache;\n\tGHashTable *native_wrapper_aot_cache;\n\tGHashTable *native_wrapper_check_cache;\n\tGHashTable *native_wrapper_aot_check_cache;\n\n\tGHashTable *native_func_wrapper_aot_cache;\n\tGHashTable *remoting_invoke_cache;\n\tGHashTable *synchronized_cache;\n\tGHashTable *unbox_wrapper_cache;\n\tGHashTable *cominterop_invoke_cache;\n\tGHashTable *cominterop_wrapper_cache; /* LOCKING: marshal lock */\n\tGHashTable *thunk_invoke_cache;\n} MonoWrapperCaches;\n\ntypedef struct {\n\tconst char* data;\n\tguint32  size;\n} MonoStreamHeader;\n\nstruct _MonoTableInfo {\n\tconst char *base;\n\tguint       rows     : 24;\n\tguint       row_size : 8;\n\n\t/*\n\t * Tables contain up to 9 columns and the possible sizes of the\n\t * fields in the documentation are 1, 2 and 4 bytes.  So we\n\t * can encode in 2 bits the size.\n\t *\n\t * A 32 bit value can encode the resulting size\n\t *\n\t * The top eight bits encode the number of columns in the table.\n\t * we only need 4, but 8 is aligned no shift required. \n\t */\n\tguint32   size_bitfield;\n};\n\n#define REFERENCE_MISSING ((gpointer) -1)\n\ntypedef struct {\n\tgboolean (*match) (MonoImage*);\n\tgboolean (*load_pe_data) (MonoImage*);\n\tgboolean (*load_cli_data) (MonoImage*);\n\tgboolean (*load_tables) (MonoImage*);\n} MonoImageLoader;\n\n/* Represents the physical bytes for an image (usually in the file system, but\n * could be in memory).\n *\n * The MonoImageStorage owns the raw data for an image and is responsible for\n * cleanup.\n *\n * May be shared by multiple MonoImage objects if they opened the same\n * underlying file or byte blob in memory.\n *\n * There is an abstract string key (usually a file path, but could be formed in\n * other ways) that is used to share MonoImageStorage objects among images.\n *\n */\ntypedef struct {\n\tMonoRefCount ref;\n\n\t/* key used for lookups.  owned by this image storage. */\n\tchar *key;\n\n\t/* If the raw data was allocated from a source such as mmap, the allocator may store resource tracking information here. */\n\tvoid *raw_data_handle;\n\tchar *raw_data;\n\tguint32 raw_data_len;\n\t/* data was allocated with mono_file_map and must be unmapped */\n\tguint8 raw_buffer_used    : 1;\n\t/* data was allocated with malloc and must be freed */\n\tguint8 raw_data_allocated : 1;\n\t/* data was allocated with mono_file_map_fileio */\n\tguint8 fileio_used : 1;\n\n#ifdef HOST_WIN32\n\t/* Module was loaded using LoadLibrary. */\n\tguint8 is_module_handle : 1;\n\n\t/* Module entry point is _CorDllMain. */\n\tguint8 has_entry_point : 1;\n#endif\n} MonoImageStorage;\n\nstruct _MonoImage {\n\t/*\n\t * This count is incremented during these situations:\n\t *   - An assembly references this MonoImage through its 'image' field\n\t *   - This MonoImage is present in the 'files' field of an image\n\t *   - This MonoImage is present in the 'modules' field of an image\n\t *   - A thread is holding a temporary reference to this MonoImage between\n\t *     calls to mono_image_open and mono_image_close ()\n\t */\n\tint   ref_count;\n\n\tMonoImageStorage *storage;\n\n\t/* Aliases storage->raw_data when storage is non-NULL. Otherwise NULL. */\n\tchar *raw_data;\n\tguint32 raw_data_len;\n\n\t/* Whenever this is a dynamically emitted module */\n\tguint8 dynamic : 1;\n\n\t/* Whenever this is a reflection only image */\n\tguint8 ref_only : 1;\n\n\t/* Whenever this image contains uncompressed metadata */\n\tguint8 uncompressed_metadata : 1;\n\n\t/* Whenever this image contains metadata only without PE data */\n\tguint8 metadata_only : 1;\n\n\t/*  Whether this image belongs to load-from context */\n\tguint8 load_from_context: 1;\n\n\tguint8 checked_module_cctor : 1;\n\tguint8 has_module_cctor : 1;\n\n\tguint8 idx_string_wide : 1;\n\tguint8 idx_guid_wide : 1;\n\tguint8 idx_blob_wide : 1;\n\n\t/* Whenever this image is considered as platform code for the CoreCLR security model */\n\tguint8 core_clr_platform_code : 1;\n\n\t/* The path to the file for this image or an arbitrary name for images loaded from data. */\n\tchar *name;\n\n\t/* The path to the file for this image or NULL */\n\tchar *filename;\n\n\t/* The assembly name reported in the file for this image (expected to be NULL for a netmodule) */\n\tconst char *assembly_name;\n\n\t/* The module name reported in the file for this image (could be NULL for a malformed file) */\n\tconst char *module_name;\n\tguint32 time_date_stamp;\n\n\tchar *version;\n\tgint16 md_version_major, md_version_minor;\n\tchar *guid;\n\tMonoCLIImageInfo    *image_info;\n\tMonoMemPool         *mempool; /*protected by the image lock*/\n\n\tchar                *raw_metadata;\n\t\t\t    \n\tMonoStreamHeader     heap_strings;\n\tMonoStreamHeader     heap_us;\n\tMonoStreamHeader     heap_blob;\n\tMonoStreamHeader     heap_guid;\n\tMonoStreamHeader     heap_tables;\n\tMonoStreamHeader     heap_pdb;\n\t\t\t    \n\tconst char          *tables_base;\n\n\t/* For PPDB files */\n\tguint64 referenced_tables;\n\tint *referenced_table_rows;\n\n\t/**/\n\tMonoTableInfo        tables [MONO_TABLE_NUM];\n\n\t/*\n\t * references is initialized only by using the mono_assembly_open\n\t * function, and not by using the lowlevel mono_image_open.\n\t *\n\t * It is NULL terminated.\n\t */\n\tMonoAssembly **references;\n\tint nreferences;\n\n\t/* Code files in the assembly. The main assembly has a \"file\" table and also a \"module\"\n\t * table, where the module table is a subset of the file table. We track both lists,\n\t * and because we can lazy-load them at different times we reference-increment both.\n\t */\n\t/* No netmodules in netcore, but for System.Reflection.Emit support we still use modules */\n\tMonoImage **modules;\n\tguint32 module_count;\n\tgboolean *modules_loaded;\n\n\tMonoImage **files;\n\tguint32 file_count;\n\n\tMonoAotModule *aot_module;\n\n\tguint8 aotid[16];\n\n\t/*\n\t * The Assembly this image was loaded from.\n\t */\n\tMonoAssembly *assembly;\n\n#ifdef ENABLE_NETCORE\n\t/*\n\t * The AssemblyLoadContext that this image was loaded into.\n\t */\n\tMonoAssemblyLoadContext *alc;\n#endif\n\n\t/*\n\t * Indexed by method tokens and typedef tokens.\n\t */\n\tGHashTable *method_cache; /*protected by the image lock*/\n\tMonoInternalHashTable class_cache;\n\n\t/* Indexed by memberref + methodspec tokens */\n\tGHashTable *methodref_cache; /*protected by the image lock*/\n\n\t/*\n\t * Indexed by fielddef and memberref tokens\n\t */\n\tMonoConcurrentHashTable *field_cache; /*protected by the image lock*/\n\n\t/* indexed by typespec tokens. */\n\tMonoConcurrentHashTable *typespec_cache; /* protected by the image lock */\n\t/* indexed by token */\n\tGHashTable *memberref_signatures;\n\n\t/* Indexed by blob heap indexes */\n\tGHashTable *method_signatures;\n\n\t/*\n\t * Indexes namespaces to hash tables that map class name to typedef token.\n\t */\n\tGHashTable *name_cache;  /*protected by the image lock*/\n\n\t/*\n\t * Indexed by MonoClass\n\t */\n\tGHashTable *array_cache;\n\tGHashTable *ptr_cache;\n\n\tGHashTable *szarray_cache;\n\t/* This has a separate lock to improve scalability */\n\tmono_mutex_t szarray_cache_lock;\n\n\t/*\n\t * indexed by SignaturePointerPair\n\t */\n\tGHashTable *delegate_bound_static_invoke_cache;\n\tGHashTable *native_func_wrapper_cache;\n\n\t/*\n\t * indexed by MonoMethod pointers \n\t */\n\tGHashTable *wrapper_param_names;\n\tGHashTable *array_accessor_cache;\n\n\t/*\n\t * indexed by MonoClass pointers\n\t */\n\tGHashTable *ldfld_wrapper_cache;\n\tGHashTable *ldflda_wrapper_cache;\n\tGHashTable *stfld_wrapper_cache;\n\tGHashTable *isinst_cache;\n\n\tGHashTable *icall_wrapper_cache;\n\tGHashTable *castclass_cache;\n\tGHashTable *proxy_isinst_cache;\n\tGHashTable *rgctx_template_hash; /* LOCKING: templates lock */\n\n\t/* Contains rarely used fields of runtime structures belonging to this image */\n\tMonoPropertyHash *property_hash;\n\n\tvoid *reflection_info;\n\n\t/*\n\t * user_info is a public field and is not touched by the\n\t * metadata engine\n\t */\n\tvoid *user_info;\n\n#ifndef DISABLE_DLLMAP\n\t/* dll map entries */\n\tMonoDllMap *dll_map;\n#endif\n\n\t/* interfaces IDs from this image */\n\t/* protected by the classes lock */\n\tMonoBitSet *interface_bitset;\n\n\t/* when the image is being closed, this is abused as a list of\n\t   malloc'ed regions to be freed. */\n\tGSList *reflection_info_unregister_classes;\n\n\t/* List of dependent image sets containing this image */\n\t/* Protected by image_sets_lock */\n\tGSList *image_sets;\n\n\t/* Caches for wrappers that DO NOT reference generic */\n\t/* arguments */\n\tMonoWrapperCaches wrapper_caches;\n\n\t/* Pre-allocated anon generic params for the first N generic\n\t * parameters, for a small N */\n\tMonoGenericParam *var_gparam_cache_fast;\n\tMonoGenericParam *mvar_gparam_cache_fast;\n\t/* Anon generic parameters past N, if needed */\n\tMonoConcurrentHashTable *var_gparam_cache;\n\tMonoConcurrentHashTable *mvar_gparam_cache;\n\n#ifndef ENABLE_NETCORE\n\t/* Maps malloc-ed char* pinvoke scope -> MonoDl* */\n\tGHashTable *pinvoke_scopes;\n#endif\n\n\t/* The loader used to load this image */\n\tMonoImageLoader *loader;\n\n\t// Containers for MonoGenericParams associated with this image but not with any specific class or method. Created on demand.\n\t// This could happen, for example, for MonoTypes associated with TypeSpec table entries.\n\tMonoGenericContainer *anonymous_generic_class_container;\n\tMonoGenericContainer *anonymous_generic_method_container;\n\n\tgboolean weak_fields_inited;\n\t/* Contains 1 based indexes */\n\tGHashTable *weak_field_indexes;\n\n\t/*\n\t * No other runtime locks must be taken while holding this lock.\n\t * It's meant to be used only to mutate and query structures part of this image.\n\t */\n\tmono_mutex_t    lock;\n};\n\n/*\n * Generic instances and aggregated custom modifiers depend on many images, and they need to be deleted if one\n * of the images they depend on is unloaded. For example,\n * List<Foo> depends on both List's image and Foo's image.\n * A MonoImageSet is the owner of all generic instances depending on the same set of\n * images.\n */\ntypedef struct {\n\tint nimages;\n\tMonoImage **images;\n\n\t// Generic-specific caches\n\tGHashTable *ginst_cache, *gmethod_cache, *gsignature_cache;\n\tMonoConcurrentHashTable *gclass_cache;\n\n\t/* mirror caches of ones already on MonoImage. These ones contain generics */\n\tGHashTable *szarray_cache, *array_cache, *ptr_cache;\n\n\tMonoWrapperCaches wrapper_caches;\n\n\tGHashTable *aggregate_modifiers_cache;\n\n\t/* Indexed by MonoGenericParam pointers */\n\tGHashTable **gshared_types;\n\t/* The length of the above array */\n\tint gshared_types_len;\n\n\tmono_mutex_t    lock;\n\n\t/*\n\t * Memory for generic instances owned by this image set should be allocated from\n\t * this mempool, using the mono_image_set_alloc family of functions.\n\t */\n\tMonoMemPool         *mempool;\n} MonoImageSet;\n\nenum {\n\tMONO_SECTION_TEXT,\n\tMONO_SECTION_RSRC,\n\tMONO_SECTION_RELOC,\n\tMONO_SECTION_MAX\n};\n\ntypedef struct {\n\tGHashTable *hash;\n\tchar *data;\n\tguint32 alloc_size; /* malloced bytes */\n\tguint32 index;\n\tguint32 offset; /* from start of metadata */\n} MonoDynamicStream;\n\ntypedef struct {\n\tguint32 alloc_rows;\n\tguint32 rows;\n\tguint8  row_size; /*  calculated later with column_sizes */\n\tguint8  columns;\n\tguint32 next_idx;\n\tguint32 *values; /* rows * columns */\n} MonoDynamicTable;\n\n/* \"Dynamic\" assemblies and images arise from System.Reflection.Emit */\nstruct _MonoDynamicAssembly {\n\tMonoAssembly assembly;\n\tchar *strong_name;\n\tguint32 strong_name_size;\n\tguint8 run;\n\tguint8 save;\n\tMonoDomain *domain;\n};\n\nstruct _MonoDynamicImage {\n\tMonoImage image;\n\tguint32 meta_size;\n\tguint32 text_rva;\n\tguint32 metadata_rva;\n\tguint32 image_base;\n\tguint32 cli_header_offset;\n\tguint32 iat_offset;\n\tguint32 idt_offset;\n\tguint32 ilt_offset;\n\tguint32 imp_names_offset;\n\tstruct {\n\t\tguint32 rva;\n\t\tguint32 size;\n\t\tguint32 offset;\n\t\tguint32 attrs;\n\t} sections [MONO_SECTION_MAX];\n\tGHashTable *typespec;\n\tGHashTable *typeref;\n\tGHashTable *handleref;\n\tMonoGHashTable *tokens;\n\tGHashTable *blob_cache;\n\tGHashTable *standalonesig_cache;\n\tGList *array_methods;\n\tGPtrArray *gen_params;\n\tMonoGHashTable *token_fixups;\n\tGHashTable *method_to_table_idx;\n\tGHashTable *field_to_table_idx;\n\tGHashTable *method_aux_hash;\n\tGHashTable *vararg_aux_hash;\n\tMonoGHashTable *generic_def_objects;\n\t/*\n\t * Maps final token values to the object they describe.\n\t */\n\tMonoGHashTable *remapped_tokens;\n\tgboolean run;\n\tgboolean save;\n\tgboolean initial_image;\n\tguint32 pe_kind, machine;\n\tchar *strong_name;\n\tguint32 strong_name_size;\n\tchar *win32_res;\n\tguint32 win32_res_size;\n\tguint8 *public_key;\n\tint public_key_len;\n\tMonoDynamicStream sheap;\n\tMonoDynamicStream code; /* used to store method headers and bytecode */\n\tMonoDynamicStream resources; /* managed embedded resources */\n\tMonoDynamicStream us;\n\tMonoDynamicStream blob;\n\tMonoDynamicStream tstream;\n\tMonoDynamicStream guid;\n\tMonoDynamicTable tables [MONO_TABLE_NUM];\n\tMonoClass *wrappers_type; /*wrappers are bound to this type instead of <Module>*/\n};\n\n/* Contains information about assembly binding */\ntypedef struct _MonoAssemblyBindingInfo {\n\tchar *name;\n\tchar *culture;\n\tguchar public_key_token [MONO_PUBLIC_KEY_TOKEN_LENGTH];\n\tint major;\n\tint minor;\n\tAssemblyVersionSet old_version_bottom;\n\tAssemblyVersionSet old_version_top;\n\tAssemblyVersionSet new_version;\n\tguint has_old_version_bottom : 1;\n\tguint has_old_version_top : 1;\n\tguint has_new_version : 1;\n\tguint is_valid : 1;\n\tgint32 domain_id; /*Needed to unload per-domain binding*/\n} MonoAssemblyBindingInfo;\n\nstruct _MonoMethodHeader {\n\tconst unsigned char  *code;\n#ifdef MONO_SMALL_CONFIG\n\tguint16      code_size;\n#else\n\tguint32      code_size;\n#endif\n\tguint16      max_stack   : 15;\n\tunsigned int is_transient: 1; /* mono_metadata_free_mh () will actually free this header */\n\tunsigned int num_clauses : 15;\n\t/* if num_locals != 0, then the following apply: */\n\tunsigned int init_locals : 1;\n\tguint16      num_locals;\n\tMonoExceptionClause *clauses;\n\tMonoBitSet  *volatile_args;\n\tMonoBitSet  *volatile_locals;\n\tMonoType    *locals [MONO_ZERO_LEN_ARRAY];\n};\n\ntypedef struct {\n\tconst unsigned char *code;\n\tguint32      code_size;\n\tguint16      max_stack;\n\tgboolean     has_clauses;\n\tgboolean     has_locals;\n} MonoMethodHeaderSummary;\n\n// FIXME? offsetof (MonoMethodHeader, locals)?\n#define MONO_SIZEOF_METHOD_HEADER (sizeof (struct _MonoMethodHeader) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n\nstruct _MonoMethodSignature {\n\tMonoType     *ret;\n#ifdef MONO_SMALL_CONFIG\n\tguint8        param_count;\n\tgint8         sentinelpos;\n\tunsigned int  generic_param_count : 5;\n#else\n\tguint16       param_count;\n\tgint16        sentinelpos;\n\tunsigned int  generic_param_count : 16;\n#endif\n\tunsigned int  call_convention     : 6;\n\tunsigned int  hasthis             : 1;\n\tunsigned int  explicit_this       : 1;\n\tunsigned int  pinvoke             : 1;\n\tunsigned int  is_inflated         : 1;\n\tunsigned int  has_type_parameters : 1;\n\tMonoType     *params [MONO_ZERO_LEN_ARRAY];\n};\n\n/*\n * AOT cache configuration loaded from config files.\n * Doesn't really belong here.\n */\ntypedef struct {\n\t/*\n\t * Enable aot caching for applications whose main assemblies are in\n\t * this list.\n\t */\n\tGSList *apps;\n\tGSList *assemblies;\n\tchar *aot_options;\n} MonoAotCacheConfig;\n\n#define MONO_SIZEOF_METHOD_SIGNATURE (sizeof (struct _MonoMethodSignature) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)\n\nstatic inline gboolean\nimage_is_dynamic (MonoImage *image)\n{\n#ifdef DISABLE_REFLECTION_EMIT\n\treturn FALSE;\n#else\n\treturn image->dynamic;\n#endif\n}\n\nstatic inline gboolean\nassembly_is_dynamic (MonoAssembly *assembly)\n{\n#ifdef DISABLE_REFLECTION_EMIT\n\treturn FALSE;\n#else\n\treturn assembly->dynamic;\n#endif\n}\n\n/* for use with allocated memory blocks (assumes alignment is to 8 bytes) */\nguint mono_aligned_addr_hash (gconstpointer ptr);\n\nvoid\nmono_image_check_for_module_cctor (MonoImage *image);\n\ngpointer\nmono_image_alloc  (MonoImage *image, guint size);\n\ngpointer\nmono_image_alloc0 (MonoImage *image, guint size);\n\n#define mono_image_new0(image,type,size) ((type *) mono_image_alloc0 (image, sizeof (type)* (size)))\n\nchar*\nmono_image_strdup (MonoImage *image, const char *s);\n\nchar*\nmono_image_strdup_vprintf (MonoImage *image, const char *format, va_list args);\n\nchar*\nmono_image_strdup_printf (MonoImage *image, const char *format, ...) MONO_ATTR_FORMAT_PRINTF(2,3);\n\nGList*\nmono_g_list_prepend_image (MonoImage *image, GList *list, gpointer data);\n\nGSList*\nmono_g_slist_append_image (MonoImage *image, GSList *list, gpointer data);\n\nvoid\nmono_image_lock (MonoImage *image);\n\nvoid\nmono_image_unlock (MonoImage *image);\n\ngpointer\nmono_image_property_lookup (MonoImage *image, gpointer subject, guint32 property);\n\nvoid\nmono_image_property_insert (MonoImage *image, gpointer subject, guint32 property, gpointer value);\n\nvoid\nmono_image_property_remove (MonoImage *image, gpointer subject);\n\ngboolean\nmono_image_close_except_pools (MonoImage *image);\n\nvoid\nmono_image_close_finish (MonoImage *image);\n\ntypedef void  (*MonoImageUnloadFunc) (MonoImage *image, gpointer user_data);\n\nvoid\nmono_install_image_unload_hook (MonoImageUnloadFunc func, gpointer user_data);\n\nvoid\nmono_remove_image_unload_hook (MonoImageUnloadFunc func, gpointer user_data);\n\nvoid\nmono_install_image_loader (const MonoImageLoader *loader);\n\nvoid\nmono_image_append_class_to_reflection_info_set (MonoClass *klass);\n\ngpointer\nmono_image_set_alloc  (MonoImageSet *set, guint size);\n\ngpointer\nmono_image_set_alloc0 (MonoImageSet *set, guint size);\n\nvoid\nmono_image_set_lock (MonoImageSet *set);\n\nvoid\nmono_image_set_unlock (MonoImageSet *set);\n\nchar*\nmono_image_set_strdup (MonoImageSet *set, const char *s);\n\nMonoImageSet *\nmono_metadata_get_image_set_for_aggregate_modifiers (MonoAggregateModContainer *amods);\n\nMonoImageSet *\nmono_metadata_get_image_set_for_type (MonoType *type);\n\nMonoImageSet *\nmono_metadata_merge_image_sets (MonoImageSet *set1, MonoImageSet *set2);\n\n#define mono_image_set_new0(image,type,size) ((type *) mono_image_set_alloc0 (image, sizeof (type)* (size)))\n\ngboolean\nmono_image_load_cli_header (MonoImage *image, MonoCLIImageInfo *iinfo);\n\ngboolean\nmono_image_load_metadata (MonoImage *image, MonoCLIImageInfo *iinfo);\n\nconst char*\nmono_metadata_string_heap_checked (MonoImage *meta, uint32_t table_index, MonoError *error);\nconst char *\nmono_metadata_blob_heap_null_ok (MonoImage *meta, guint32 index);\nconst char*\nmono_metadata_blob_heap_checked (MonoImage *meta, uint32_t table_index, MonoError *error);\ngboolean\nmono_metadata_decode_row_checked (const MonoImage *image, const MonoTableInfo *t, int idx, uint32_t *res, int res_size, MonoError *error);\n\nMonoType*\nmono_metadata_get_shared_type (MonoType *type);\n\nvoid\nmono_metadata_clean_for_image (MonoImage *image);\n\nvoid\nmono_metadata_clean_generic_classes_for_image (MonoImage *image);\n\nMONO_API void\nmono_metadata_cleanup (void);\n\nconst char *   mono_meta_table_name              (int table);\nvoid           mono_metadata_compute_table_bases (MonoImage *meta);\n\ngboolean\nmono_metadata_interfaces_from_typedef_full  (MonoImage             *image,\n\t\t\t\t\t\t\t\t\t\t\t guint32                table_index,\n\t\t\t\t\t\t\t\t\t\t\t MonoClass           ***interfaces,\n\t\t\t\t\t\t\t\t\t\t\t guint                 *count,\n\t\t\t\t\t\t\t\t\t\t\t gboolean               heap_alloc_result,\n\t\t\t\t\t\t\t\t\t\t\t MonoGenericContext    *context,\n\t\t\t\t\t\t\t\t\t\t\t MonoError *error);\n\nMONO_API MonoMethodSignature *\nmono_metadata_parse_method_signature_full   (MonoImage             *image,\n\t\t\t\t\t     MonoGenericContainer  *generic_container,\n\t\t\t\t\t     int                     def,\n\t\t\t\t\t     const char             *ptr,\n\t\t\t\t\t     const char            **rptr,\n\t\t\t\t\t     MonoError *error);\n\nMONO_API MonoMethodHeader *\nmono_metadata_parse_mh_full                 (MonoImage             *image,\n\t\t\t\t\t     MonoGenericContainer  *container,\n\t\t\t\t\t     const char            *ptr,\n\t\t\t\t\t\t MonoError *error);\n\nMonoMethodSignature  *mono_metadata_parse_signature_checked (MonoImage *image, \n\t\t\t\t\t\t\t     uint32_t    token,\n\t\t\t\t\t\t\t     MonoError *error);\n\ngboolean\nmono_method_get_header_summary (MonoMethod *method, MonoMethodHeaderSummary *summary);\n\nint* mono_metadata_get_param_attrs          (MonoImage *m, int def, int param_count);\ngboolean mono_metadata_method_has_param_attrs (MonoImage *m, int def);\n\nguint\nmono_metadata_generic_context_hash          (const MonoGenericContext *context);\n\ngboolean\nmono_metadata_generic_context_equal         (const MonoGenericContext *g1,\n\t\t\t\t\t     const MonoGenericContext *g2);\n\nMonoGenericInst *\nmono_metadata_parse_generic_inst            (MonoImage             *image,\n\t\t\t\t\t     MonoGenericContainer  *container,\n\t\t\t\t\t     int                    count,\n\t\t\t\t\t     const char            *ptr,\n\t\t\t\t\t     const char           **rptr,\n\t\t\t\t\t\t MonoError *error);\n\nMonoGenericInst *\nmono_metadata_get_generic_inst              (int \t\t    type_argc,\n\t\t\t\t\t     MonoType \t\t  **type_argv);\n\nMonoGenericInst *\nmono_metadata_get_canonical_generic_inst    (MonoGenericInst *candidate);\n\nMonoGenericClass *\nmono_metadata_lookup_generic_class          (MonoClass\t\t   *gclass,\n\t\t\t\t\t     MonoGenericInst\t   *inst,\n\t\t\t\t\t     gboolean\t\t    is_dynamic);\n\nMonoGenericInst * mono_metadata_inflate_generic_inst  (MonoGenericInst *ginst, MonoGenericContext *context, MonoError *error);\n\nguint\nmono_metadata_generic_param_hash (MonoGenericParam *p);\n\ngboolean\nmono_metadata_generic_param_equal (MonoGenericParam *p1, MonoGenericParam *p2);\n\nvoid mono_dynamic_stream_reset  (MonoDynamicStream* stream);\nMONO_API void mono_assembly_addref       (MonoAssembly *assembly);\nvoid mono_assembly_load_friends (MonoAssembly* ass);\ngboolean mono_assembly_has_skip_verification (MonoAssembly* ass);\n\nvoid mono_assembly_release_gc_roots (MonoAssembly *assembly);\ngboolean mono_assembly_close_except_image_pools (MonoAssembly *assembly);\nvoid mono_assembly_close_finish (MonoAssembly *assembly);\n\n\ngboolean mono_public_tokens_are_equal (const unsigned char *pubt1, const unsigned char *pubt2);\n\nvoid mono_config_parse_publisher_policy (const char *filename, MonoAssemblyBindingInfo *binding_info);\nvoid mono_config_parse_assembly_bindings (const char *filename, int major, int minor, void *user_data,\n\t\t\t\t\t  void (*infocb)(MonoAssemblyBindingInfo *info, void *user_data));\n\ngboolean\nmono_assembly_name_parse_full \t\t     (const char\t   *name,\n\t\t\t\t\t      MonoAssemblyName\t   *aname,\n\t\t\t\t\t      gboolean save_public_key,\n\t\t\t\t\t      gboolean *is_version_defined,\n\t\t\t\t\t\t  gboolean *is_token_defined);\n\ngboolean\nmono_assembly_fill_assembly_name_full (MonoImage *image, MonoAssemblyName *aname, gboolean copyBlobs);\n\n\nMONO_API guint32 mono_metadata_get_generic_param_row (MonoImage *image, guint32 token, guint32 *owner);\n\nMonoGenericParam*\nmono_metadata_create_anon_gparam (MonoImage *image, gint32 param_num, gboolean is_mvar);\n\nvoid mono_unload_interface_ids (MonoBitSet *bitset);\n\n\nMonoType *mono_metadata_type_dup (MonoImage *image, const MonoType *original);\nMonoType *mono_metadata_type_dup_with_cmods (MonoImage *image, const MonoType *original, const MonoType *cmods_source);\n\nMonoMethodSignature  *mono_metadata_signature_dup_full (MonoImage *image,MonoMethodSignature *sig);\nMonoMethodSignature  *mono_metadata_signature_dup_mempool (MonoMemPool *mp, MonoMethodSignature *sig);\nMonoMethodSignature  *mono_metadata_signature_dup_add_this (MonoImage *image, MonoMethodSignature *sig, MonoClass *klass);\n\nMonoGenericInst *\nmono_get_shared_generic_inst (MonoGenericContainer *container);\n\nint\nmono_type_stack_size_internal (MonoType *t, int *align, gboolean allow_open);\n\nMONO_API void            mono_type_get_desc (GString *res, MonoType *type, mono_bool include_namespace);\n\ngboolean\nmono_metadata_type_equal_full (MonoType *t1, MonoType *t2, gboolean signature_only);\n\nMonoMarshalSpec *\nmono_metadata_parse_marshal_spec_full (MonoImage *image, MonoImage *parent_image, const char *ptr);\n\nguint\t       mono_metadata_generic_inst_hash (gconstpointer data);\ngboolean       mono_metadata_generic_inst_equal (gconstpointer ka, gconstpointer kb);\n\nMONO_API void\nmono_metadata_field_info_with_mempool (\n\t\t\t\t\t  MonoImage *meta, \n\t\t\t\t      guint32       table_index,\n\t\t\t\t      guint32      *offset,\n\t\t\t\t      guint32      *rva,\n\t\t\t\t      MonoMarshalSpec **marshal_spec);\n\nMonoClassField*\nmono_metadata_get_corresponding_field_from_generic_type_definition (MonoClassField *field);\n\nMonoEvent*\nmono_metadata_get_corresponding_event_from_generic_type_definition (MonoEvent *event);\n\nMonoProperty*\nmono_metadata_get_corresponding_property_from_generic_type_definition (MonoProperty *property);\n\nguint32\nmono_metadata_signature_size (MonoMethodSignature *sig);\n\nguint mono_metadata_str_hash (gconstpointer v1);\n\ngboolean mono_image_load_pe_data (MonoImage *image);\n\ngboolean mono_image_load_cli_data (MonoImage *image);\n\nvoid mono_image_load_names (MonoImage *image);\n\nMonoImage *mono_image_open_raw (MonoAssemblyLoadContext *alc, const char *fname, MonoImageOpenStatus *status);\n\nMonoImage *mono_image_open_metadata_only (MonoAssemblyLoadContext *alc, const char *fname, MonoImageOpenStatus *status);\n\nMonoImage *mono_image_open_from_data_internal (MonoAssemblyLoadContext *alc, char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, gboolean metadata_only, const char *name);\n\nMonoException *mono_get_exception_field_access_msg (const char *msg);\n\nMonoException *mono_get_exception_method_access_msg (const char *msg);\n\nMonoMethod* mono_method_from_method_def_or_ref (MonoImage *m, guint32 tok, MonoGenericContext *context, MonoError *error);\n\nMonoMethod *mono_get_method_constrained_with_method (MonoImage *image, MonoMethod *method, MonoClass *constrained_class, MonoGenericContext *context, MonoError *error);\nMonoMethod *mono_get_method_constrained_checked (MonoImage *image, guint32 token, MonoClass *constrained_class, MonoGenericContext *context, MonoMethod **cil_method, MonoError *error);\n\nvoid mono_type_set_alignment (MonoTypeEnum type, int align);\n\nMonoAotCacheConfig *mono_get_aot_cache_config (void);\nMonoType *\nmono_type_create_from_typespec_checked (MonoImage *image, guint32 type_spec, MonoError *error);\n\nMonoMethodSignature*\nmono_method_get_signature_checked (MonoMethod *method, MonoImage *image, guint32 token, MonoGenericContext *context, MonoError *error);\n\t\nMonoMethod *\nmono_get_method_checked (MonoImage *image, guint32 token, MonoClass *klass, MonoGenericContext *context, MonoError *error);\n\nguint32\nmono_metadata_localscope_from_methoddef (MonoImage *meta, guint32 index);\n\nvoid\nmono_wrapper_caches_free (MonoWrapperCaches *cache);\n\nMonoWrapperCaches*\nmono_method_get_wrapper_cache (MonoMethod *method);\n\nMonoWrapperCaches*\nmono_method_get_wrapper_cache (MonoMethod *method);\n\nMonoType*\nmono_metadata_parse_type_checked (MonoImage *m, MonoGenericContainer *container, short opt_attrs, gboolean transient, const char *ptr, const char **rptr, MonoError *error);\n\nMonoGenericContainer *\nmono_get_anonymous_container_for_image (MonoImage *image, gboolean is_mvar);\n\nchar *\nmono_image_set_description (MonoImageSet *);\n\nMonoImageSet *\nmono_find_image_set_owner (void *ptr);\n\nvoid\nmono_loader_register_module (const char *name, MonoDl *module);\n\ngboolean\nmono_assembly_is_problematic_version (const char *name, guint16 major, guint16 minor, guint16 build, guint16 revision);\n\nvoid\nmono_ginst_get_desc (GString *str, MonoGenericInst *ginst);\n\nvoid\nmono_loader_set_strict_assembly_name_check (gboolean enabled);\n\ngboolean\nmono_loader_get_strict_assembly_name_check (void);\n\ngboolean\nmono_type_in_image (MonoType *type, MonoImage *image);\n\ngboolean\nmono_type_is_valid_generic_argument (MonoType *type);\n\nMonoAssemblyContextKind\nmono_asmctx_get_kind (const MonoAssemblyContext *ctx);\n\n#define MONO_CLASS_IS_INTERFACE_INTERNAL(c) ((mono_class_get_flags (c) & TYPE_ATTRIBUTE_INTERFACE) || mono_type_is_generic_parameter (m_class_get_byval_arg (c)))\n\nstatic inline gboolean\nm_image_is_raw_data_allocated (MonoImage *image)\n{\n\treturn image->storage ? image->storage->raw_data_allocated : FALSE;\n}\n\nstatic inline gboolean\nm_image_is_fileio_used (MonoImage *image)\n{\n\treturn image->storage ? image->storage->fileio_used : FALSE;\n}\n\n#ifdef HOST_WIN32\nstatic inline gboolean\nm_image_is_module_handle (MonoImage *image)\n{\n\treturn image->storage ? image->storage->is_module_handle : FALSE;\n}\n\nstatic inline gboolean\nm_image_has_entry_point (MonoImage *image)\n{\n\treturn image->storage ? image->storage->has_entry_point : FALSE;\n}\n#endif\n\nstatic inline const char *\nm_image_get_name (MonoImage *image)\n{\n\treturn image->name;\n}\n\nstatic inline const char *\nm_image_get_filename (MonoImage *image)\n{\n\treturn image->filename;\n}\n\nstatic inline const char *\nm_image_get_assembly_name (MonoImage *image)\n{\n\treturn image->assembly_name;\n}\n\nstatic inline\nMonoAssemblyLoadContext *\nmono_image_get_alc (MonoImage *image)\n{\n#ifndef ENABLE_NETCORE\n\treturn NULL;\n#else\n\treturn image->alc;\n#endif\n}\n\nstatic inline\nMonoAssemblyLoadContext *\nmono_assembly_get_alc (MonoAssembly *assm)\n{\n\treturn mono_image_get_alc (assm->image);\n}\n\n/**\n * mono_type_get_type_internal:\n * \\param type the \\c MonoType operated on\n * \\returns the IL type value for \\p type. This is one of the \\c MonoTypeEnum\n * enum members like \\c MONO_TYPE_I4 or \\c MONO_TYPE_STRING.\n */\nstatic inline int\nmono_type_get_type_internal (MonoType *type)\n{\n\treturn type->type;\n}\n\n/**\n * mono_type_get_signature:\n * \\param type the \\c MonoType operated on\n * It is only valid to call this function if \\p type is a \\c MONO_TYPE_FNPTR .\n * \\returns the \\c MonoMethodSignature pointer that describes the signature\n * of the function pointer \\p type represents.\n */\nstatic inline MonoMethodSignature*\nmono_type_get_signature_internal (MonoType *type)\n{\n\tg_assert (type->type == MONO_TYPE_FNPTR);\n\treturn type->data.method;\n}\n\n/**\n * mono_type_is_byref_internal:\n * \\param type the \\c MonoType operated on\n * \\returns TRUE if \\p type represents a type passed by reference,\n * FALSE otherwise.\n */\nstatic inline mono_bool\nmono_type_is_byref_internal (MonoType *type)\n{\n\treturn type->byref;\n}\n\n/**\n * mono_type_get_class_internal:\n * \\param type the \\c MonoType operated on\n * It is only valid to call this function if \\p type is a \\c MONO_TYPE_CLASS or a\n * \\c MONO_TYPE_VALUETYPE . For more general functionality, use \\c mono_class_from_mono_type_internal,\n * instead.\n * \\returns the \\c MonoClass pointer that describes the class that \\p type represents.\n */\nstatic inline MonoClass*\nmono_type_get_class_internal (MonoType *type)\n{\n\t/* FIXME: review the runtime users before adding the assert here */\n\treturn type->data.klass;\n}\n\n/**\n * mono_type_get_array_type_internal:\n * \\param type the \\c MonoType operated on\n * It is only valid to call this function if \\p type is a \\c MONO_TYPE_ARRAY .\n * \\returns a \\c MonoArrayType struct describing the array type that \\p type\n * represents. The info includes details such as rank, array element type\n * and the sizes and bounds of multidimensional arrays.\n */\nstatic inline MonoArrayType*\nmono_type_get_array_type_internal (MonoType *type)\n{\n\treturn type->data.array;\n}\n\n#endif /* __MONO_METADATA_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/metadata.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_H__\n#define __MONO_METADATA_H__\n\n#include <mono/utils/mono-publib.h>\n\n#include <mono/utils/mono-forward.h>\n#include <mono/metadata/blob.h>\n#include <mono/metadata/row-indexes.h>\n#include <mono/metadata/image.h>\n#include <mono/metadata/object-forward.h>\n\nMONO_BEGIN_DECLS\n\n#define MONO_TYPE_ISSTRUCT(t) mono_type_is_struct (t)\n#define MONO_TYPE_IS_VOID(t) mono_type_is_void (t)\n#define MONO_TYPE_IS_POINTER(t) mono_type_is_pointer (t)\n#define MONO_TYPE_IS_REFERENCE(t) mono_type_is_reference (t)\n\n#define MONO_CLASS_IS_INTERFACE(c) ((mono_class_get_flags (c) & TYPE_ATTRIBUTE_INTERFACE) || mono_type_is_generic_parameter (mono_class_get_type (c)))\n\n#define MONO_CLASS_IS_IMPORT(c) ((mono_class_get_flags (c) & TYPE_ATTRIBUTE_IMPORT))\n\ntypedef enum {\n\tMONO_EXCEPTION_CLAUSE_NONE,\n\tMONO_EXCEPTION_CLAUSE_FILTER,\n\tMONO_EXCEPTION_CLAUSE_FINALLY,\n\tMONO_EXCEPTION_CLAUSE_FAULT = 4\n} MonoExceptionEnum;\n\ntypedef enum {\n\tMONO_CALL_DEFAULT,\n\tMONO_CALL_C,\n\tMONO_CALL_STDCALL,\n\tMONO_CALL_THISCALL,\n\tMONO_CALL_FASTCALL,\n\tMONO_CALL_VARARG\n} MonoCallConvention;\n\n/* ECMA lamespec: the old spec had more info... */\ntypedef enum {\n\tMONO_NATIVE_BOOLEAN = 0x02, /* 4 bytes, 0 is false, != 0 is true */\n\tMONO_NATIVE_I1 = 0x03,\n\tMONO_NATIVE_U1 = 0x04,\n\tMONO_NATIVE_I2 = 0x05,\n\tMONO_NATIVE_U2 = 0x06,\n\tMONO_NATIVE_I4 = 0x07,\n\tMONO_NATIVE_U4 = 0x08,\n\tMONO_NATIVE_I8 = 0x09,\n\tMONO_NATIVE_U8 = 0x0a,\n\tMONO_NATIVE_R4 = 0x0b,\n\tMONO_NATIVE_R8 = 0x0c,\n\tMONO_NATIVE_CURRENCY = 0x0f,\n\tMONO_NATIVE_BSTR = 0x13, /* prefixed length, Unicode */\n\tMONO_NATIVE_LPSTR = 0x14, /* ANSI, null terminated */\n\tMONO_NATIVE_LPWSTR = 0x15, /* UNICODE, null terminated */\n\tMONO_NATIVE_LPTSTR = 0x16, /* plattform dep., null terminated */\n\tMONO_NATIVE_BYVALTSTR = 0x17,\n\tMONO_NATIVE_IUNKNOWN = 0x19,\n\tMONO_NATIVE_IDISPATCH = 0x1a,\n\tMONO_NATIVE_STRUCT = 0x1b,\n\tMONO_NATIVE_INTERFACE = 0x1c,\n\tMONO_NATIVE_SAFEARRAY = 0x1d,\n\tMONO_NATIVE_BYVALARRAY = 0x1e,\n\tMONO_NATIVE_INT   = 0x1f,\n\tMONO_NATIVE_UINT  = 0x20,\n\tMONO_NATIVE_VBBYREFSTR  = 0x22,\n\tMONO_NATIVE_ANSIBSTR  = 0x23,  /* prefixed length, ANSI */\n\tMONO_NATIVE_TBSTR  = 0x24, /* prefixed length, plattform dep. */\n\tMONO_NATIVE_VARIANTBOOL  = 0x25,\n\tMONO_NATIVE_FUNC  = 0x26,\n\tMONO_NATIVE_ASANY = 0x28,\n\tMONO_NATIVE_LPARRAY = 0x2a,\n\tMONO_NATIVE_LPSTRUCT = 0x2b,\n\tMONO_NATIVE_CUSTOM = 0x2c,\n\tMONO_NATIVE_ERROR = 0x2d,\n\t// TODO: MONO_NATIVE_IINSPECTABLE = 0x2e\n\t// TODO: MONO_NATIVE_HSTRING = 0x2f\n\tMONO_NATIVE_UTF8STR = 0x30,\n\tMONO_NATIVE_MAX = 0x50 /* no info */\n} MonoMarshalNative;\n\n/* Used only in context of SafeArray */\ntypedef enum {\n\tMONO_VARIANT_EMPTY = 0x00,\n\tMONO_VARIANT_NULL = 0x01,\n\tMONO_VARIANT_I2 = 0x02,\n\tMONO_VARIANT_I4 = 0x03,\n\tMONO_VARIANT_R4 = 0x04,\n\tMONO_VARIANT_R8 = 0x05,\n\tMONO_VARIANT_CY = 0x06,\n\tMONO_VARIANT_DATE = 0x07,\n\tMONO_VARIANT_BSTR = 0x08,\n\tMONO_VARIANT_DISPATCH = 0x09,\n\tMONO_VARIANT_ERROR = 0x0a,\n\tMONO_VARIANT_BOOL = 0x0b,\n\tMONO_VARIANT_VARIANT = 0x0c,\n\tMONO_VARIANT_UNKNOWN = 0x0d,\n\tMONO_VARIANT_DECIMAL = 0x0e,\n\tMONO_VARIANT_I1 = 0x10,\n\tMONO_VARIANT_UI1 = 0x11,\n\tMONO_VARIANT_UI2 = 0x12,\n\tMONO_VARIANT_UI4 = 0x13,\n\tMONO_VARIANT_I8 = 0x14,\n\tMONO_VARIANT_UI8 = 0x15,\n\tMONO_VARIANT_INT = 0x16,\n\tMONO_VARIANT_UINT = 0x17,\n\tMONO_VARIANT_VOID = 0x18,\n\tMONO_VARIANT_HRESULT = 0x19,\n\tMONO_VARIANT_PTR = 0x1a,\n\tMONO_VARIANT_SAFEARRAY = 0x1b,\n\tMONO_VARIANT_CARRAY = 0x1c,\n\tMONO_VARIANT_USERDEFINED = 0x1d,\n\tMONO_VARIANT_LPSTR = 0x1e,\n\tMONO_VARIANT_LPWSTR = 0x1f,\n\tMONO_VARIANT_RECORD = 0x24,\n\tMONO_VARIANT_FILETIME = 0x40,\n\tMONO_VARIANT_BLOB = 0x41,\n\tMONO_VARIANT_STREAM = 0x42,\n\tMONO_VARIANT_STORAGE = 0x43,\n\tMONO_VARIANT_STREAMED_OBJECT = 0x44,\n\tMONO_VARIANT_STORED_OBJECT = 0x45,\n\tMONO_VARIANT_BLOB_OBJECT = 0x46,\n\tMONO_VARIANT_CF = 0x47,\n\tMONO_VARIANT_CLSID = 0x48,\n\tMONO_VARIANT_VECTOR = 0x1000,\n\tMONO_VARIANT_ARRAY = 0x2000,\n\tMONO_VARIANT_BYREF = 0x4000\n} MonoMarshalVariant;\n\ntypedef enum {\n\tMONO_MARSHAL_CONV_NONE,\n\tMONO_MARSHAL_CONV_BOOL_VARIANTBOOL,\n\tMONO_MARSHAL_CONV_BOOL_I4,\n\tMONO_MARSHAL_CONV_STR_BSTR,\n\tMONO_MARSHAL_CONV_STR_LPSTR,\n\tMONO_MARSHAL_CONV_LPSTR_STR,\n\tMONO_MARSHAL_CONV_LPTSTR_STR,\n\tMONO_MARSHAL_CONV_STR_LPWSTR,\n\tMONO_MARSHAL_CONV_LPWSTR_STR,\n\tMONO_MARSHAL_CONV_STR_LPTSTR,\n\tMONO_MARSHAL_CONV_STR_ANSIBSTR,\n\tMONO_MARSHAL_CONV_STR_TBSTR,\n\tMONO_MARSHAL_CONV_STR_BYVALSTR,\n\tMONO_MARSHAL_CONV_STR_BYVALWSTR,\n\tMONO_MARSHAL_CONV_SB_LPSTR,\n\tMONO_MARSHAL_CONV_SB_LPTSTR,\n\tMONO_MARSHAL_CONV_SB_LPWSTR,\n\tMONO_MARSHAL_CONV_LPSTR_SB,\n\tMONO_MARSHAL_CONV_LPTSTR_SB,\n\tMONO_MARSHAL_CONV_LPWSTR_SB,\n\tMONO_MARSHAL_CONV_ARRAY_BYVALARRAY,\n\tMONO_MARSHAL_CONV_ARRAY_BYVALCHARARRAY,\n\tMONO_MARSHAL_CONV_ARRAY_SAVEARRAY,\n\tMONO_MARSHAL_CONV_ARRAY_LPARRAY,\n\tMONO_MARSHAL_FREE_LPARRAY,\n\tMONO_MARSHAL_CONV_OBJECT_INTERFACE,\n\tMONO_MARSHAL_CONV_OBJECT_IDISPATCH,\n\tMONO_MARSHAL_CONV_OBJECT_IUNKNOWN,\n\tMONO_MARSHAL_CONV_OBJECT_STRUCT,\n\tMONO_MARSHAL_CONV_DEL_FTN,\n\tMONO_MARSHAL_CONV_FTN_DEL,\n\tMONO_MARSHAL_FREE_ARRAY,\n\tMONO_MARSHAL_CONV_BSTR_STR,\n\tMONO_MARSHAL_CONV_SAFEHANDLE,\n\tMONO_MARSHAL_CONV_HANDLEREF,\n\tMONO_MARSHAL_CONV_STR_UTF8STR,\n\tMONO_MARSHAL_CONV_SB_UTF8STR,\n\tMONO_MARSHAL_CONV_UTF8STR_STR,\n\tMONO_MARSHAL_CONV_UTF8STR_SB,\n\tMONO_MARSHAL_CONV_FIXED_BUFFER\n} MonoMarshalConv;\n\n#define MONO_MARSHAL_CONV_INVALID ((MonoMarshalConv)-1)\n\ntypedef struct {\n\tMonoMarshalNative native;\n\tunion {\n\t\tstruct {\n\t\t\tMonoMarshalNative elem_type;\n\t\t\tint32_t num_elem; /* -1 if not set */\n\t\t\tint16_t param_num; /* -1 if not set */\n\t\t\tint16_t elem_mult; /* -1 if not set */\n\t\t} array_data;\n\t\tstruct {\n\t\t\tchar *custom_name;\n\t\t\tchar *cookie;\n\t\t\tMonoImage *image;\n\t\t} custom_data;\n\t\tstruct {\n\t\t\tMonoMarshalVariant elem_type;\n\t\t\tint32_t num_elem;\n\t\t} safearray_data;\n\t} data;\n} MonoMarshalSpec;\n\nMONO_API void         mono_metadata_init (void);\n\nMONO_API void         mono_metadata_decode_row (const MonoTableInfo   *t,\n\t\t\t\t       int                    idx,\n\t\t\t\t       uint32_t               *res,\n\t\t\t\t       int                    res_size);\n\nMONO_API uint32_t      mono_metadata_decode_row_col (const MonoTableInfo *t, \n\t\t\t\t\t   int            idx, \n\t\t\t\t\t   unsigned int          col);\n\n/*\n * This macro is used to extract the size of the table encoded in\n * the size_bitfield of MonoTableInfo.\n */\n#define mono_metadata_table_size(bitfield,table) ((((bitfield) >> ((table)*2)) & 0x3) + 1)\n#define mono_metadata_table_count(bitfield) ((bitfield) >> 24)\n\nMONO_API int mono_metadata_compute_size (MonoImage   *meta,\n                                int             tableindex,\n                                uint32_t        *result_bitfield);\n\n/*\n *\n */\nMONO_API const char    *mono_metadata_locate        (MonoImage *meta, int table, int idx);\nMONO_API const char    *mono_metadata_locate_token  (MonoImage *meta, uint32_t token);\n\t\t\t\t\t   \nMONO_API const char    *mono_metadata_string_heap   (MonoImage *meta, uint32_t table_index);\nMONO_API const char    *mono_metadata_blob_heap     (MonoImage *meta, uint32_t table_index);\nMONO_API const char    *mono_metadata_user_string   (MonoImage *meta, uint32_t table_index);\nMONO_API const char    *mono_metadata_guid_heap     (MonoImage *meta, uint32_t table_index);\n\nMONO_API uint32_t mono_metadata_typedef_from_field  (MonoImage *meta, uint32_t table_index);\nMONO_API uint32_t mono_metadata_typedef_from_method (MonoImage *meta, uint32_t table_index);\nMONO_API uint32_t mono_metadata_nested_in_typedef   (MonoImage *meta, uint32_t table_index);\nMONO_API uint32_t mono_metadata_nesting_typedef     (MonoImage *meta, uint32_t table_index, uint32_t start_index);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoClass** mono_metadata_interfaces_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *count);\n\nMONO_API uint32_t     mono_metadata_events_from_typedef     (MonoImage *meta, uint32_t table_index, unsigned int *end_idx);\nMONO_API uint32_t     mono_metadata_methods_from_event      (MonoImage *meta, uint32_t table_index, unsigned int *end);\nMONO_API uint32_t     mono_metadata_properties_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *end);\nMONO_API uint32_t     mono_metadata_methods_from_property   (MonoImage *meta, uint32_t table_index, unsigned int *end);\nMONO_API uint32_t     mono_metadata_packing_from_typedef    (MonoImage *meta, uint32_t table_index, uint32_t *packing, uint32_t *size);\nMONO_API const char* mono_metadata_get_marshal_info        (MonoImage *meta, uint32_t idx, mono_bool is_field);\nMONO_API uint32_t     mono_metadata_custom_attrs_from_index (MonoImage *meta, uint32_t cattr_index);\n\nMONO_API MonoMarshalSpec *mono_metadata_parse_marshal_spec (MonoImage *image, const char *ptr);\n\nMONO_API void mono_metadata_free_marshal_spec (MonoMarshalSpec *spec);\n\nMONO_API uint32_t     mono_metadata_implmap_from_method     (MonoImage *meta, uint32_t method_idx);\n\nMONO_API void        mono_metadata_field_info (MonoImage *meta, \n\t\t\t\t      uint32_t       table_index,\n\t\t\t\t      uint32_t      *offset,\n\t\t\t\t      uint32_t      *rva,\n\t\t\t\t      MonoMarshalSpec **marshal_spec);\n\nMONO_API uint32_t     mono_metadata_get_constant_index (MonoImage *meta, uint32_t token, uint32_t hint);\n\n/*\n * Functions to extract information from the Blobs\n */\nMONO_API uint32_t mono_metadata_decode_value     (const char            *ptr,\n                                        const char           **rptr);\nMONO_API int32_t mono_metadata_decode_signed_value (const char *ptr, const char **rptr);\n\nMONO_API uint32_t mono_metadata_decode_blob_size (const char            *ptr,\n                                        const char           **rptr);\n\nMONO_API void mono_metadata_encode_value (uint32_t value, char *bug, char **endbuf);\n\n#define MONO_OFFSET_IN_CLAUSE(clause,offset) \\\n\t((clause)->try_offset <= (offset) && (offset) < ((clause)->try_offset + (clause)->try_len))\n#define MONO_OFFSET_IN_HANDLER(clause,offset) \\\n\t((clause)->handler_offset <= (offset) && (offset) < ((clause)->handler_offset + (clause)->handler_len))\n#define MONO_OFFSET_IN_FILTER(clause,offset) \\\n\t((clause)->flags == MONO_EXCEPTION_CLAUSE_FILTER && (clause)->data.filter_offset <= (offset) && (offset) < ((clause)->handler_offset))\n\ntypedef struct {\n\tuint32_t flags;\n\tuint32_t try_offset;\n\tuint32_t try_len;\n\tuint32_t handler_offset;\n\tuint32_t handler_len;\n\tunion {\n\t\tuint32_t filter_offset;\n\t\tMonoClass *catch_class;\n\t} data;\n} MonoExceptionClause;\n\ntypedef struct _MonoType MonoType;\ntypedef struct _MonoGenericInst MonoGenericInst;\ntypedef struct _MonoGenericClass MonoGenericClass;\ntypedef struct _MonoGenericContext MonoGenericContext;\ntypedef struct _MonoGenericContainer MonoGenericContainer;\ntypedef struct _MonoGenericParam MonoGenericParam;\ntypedef struct _MonoArrayType MonoArrayType;\ntypedef struct _MonoMethodSignature MonoMethodSignature;\n\n/* FIXME: Keeping this name alive for now, since it is part of the exposed API, even though no entrypoint uses it.  */\ntypedef struct invalid_name MonoGenericMethod;\n\ntypedef struct {\n\tunsigned int required : 1;\n\tunsigned int token    : 31;\n} MonoCustomMod;\n\ntypedef struct _MonoCustomModContainer {\n\tuint8_t count; /* max 64 modifiers follow at the end */\n\tMonoImage *image; /* Image containing types in modifiers array */\n\tMonoCustomMod modifiers [1]; /* Actual length is count */\n} MonoCustomModContainer;\n\nstruct _MonoArrayType {\n\tMonoClass *eklass;\n\t// Number of dimensions of the array\n\tuint8_t rank;\n\n\t// Arrays recording known upper and lower index bounds for each dimension\n\tuint8_t numsizes;\n\tuint8_t numlobounds;\n\tint *sizes;\n\tint *lobounds;\n};\n\ntypedef struct _MonoMethodHeader MonoMethodHeader;\n\ntypedef enum {\n\tMONO_PARSE_TYPE,\n\tMONO_PARSE_MOD_TYPE,\n\tMONO_PARSE_LOCAL,\n\tMONO_PARSE_PARAM,\n\tMONO_PARSE_RET,\n\tMONO_PARSE_FIELD\n} MonoParseTypeMode;\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_type_is_byref       (MonoType *type);\n\nMONO_API MONO_RT_EXTERNAL_ONLY int\nmono_type_get_type       (MonoType *type);\n\n/* For MONO_TYPE_FNPTR */\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethodSignature*\nmono_type_get_signature  (MonoType *type);\n\n/* For MONO_TYPE_CLASS, VALUETYPE */\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass*\nmono_type_get_class      (MonoType *type);\n\nMONO_API MonoArrayType*\nmono_type_get_array_type (MonoType *type);\n\n/* For MONO_TYPE_PTR */\nMONO_API MonoType*\nmono_type_get_ptr_type (MonoType *type);\n\nMONO_API MonoClass*\nmono_type_get_modifiers  (MonoType *type, mono_bool *is_required, void **iter);\n\nMONO_API mono_bool mono_type_is_struct    (MonoType *type);\nMONO_API mono_bool mono_type_is_void      (MonoType *type);\nMONO_API mono_bool mono_type_is_pointer   (MonoType *type);\nMONO_API mono_bool mono_type_is_reference (MonoType *type);\nMONO_API mono_bool mono_type_is_generic_parameter (MonoType *type);\n\nMONO_API MonoType*\nmono_signature_get_return_type (MonoMethodSignature *sig);\n\nMONO_API MonoType*\nmono_signature_get_params      (MonoMethodSignature *sig, void **iter);\n\nMONO_API uint32_t\nmono_signature_get_param_count (MonoMethodSignature *sig);\n\nMONO_API uint32_t\nmono_signature_get_call_conv   (MonoMethodSignature *sig);\n\nMONO_API int\nmono_signature_vararg_start    (MonoMethodSignature *sig);\n\nMONO_API mono_bool\nmono_signature_is_instance     (MonoMethodSignature *sig);\n\nMONO_API mono_bool\nmono_signature_explicit_this   (MonoMethodSignature *sig);\n\nMONO_API mono_bool\nmono_signature_param_is_out    (MonoMethodSignature *sig, int param_num);\n\nMONO_API uint32_t     mono_metadata_parse_typedef_or_ref (MonoImage      *m,\n                                                const char      *ptr,\n                                                const char     **rptr);\nMONO_API int            mono_metadata_parse_custom_mod  (MonoImage      *m,\n\t\t\t\t\t\tMonoCustomMod   *dest,\n\t\t\t\t\t\tconst char      *ptr,\n\t\t\t\t\t\tconst char     **rptr);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArrayType *mono_metadata_parse_array       (MonoImage      *m,\n\t\t\t\t\t\tconst char      *ptr,\n\t\t\t\t\t\tconst char     **rptr);\nMONO_API void           mono_metadata_free_array        (MonoArrayType     *array);\nMONO_API MONO_RT_EXTERNAL_ONLY MonoType      *mono_metadata_parse_type        (MonoImage      *m,\n\t\t\t\t\t\tMonoParseTypeMode  mode,\n\t\t\t\t\t\tshort              opt_attrs,\n\t\t\t\t\t\tconst char        *ptr,\n\t\t\t\t\t\tconst char       **rptr);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoType      *mono_metadata_parse_param       (MonoImage      *m,\n\t\t\t\t\t\tconst char      *ptr,\n\t\t\t\t\t\tconst char      **rptr);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoType      *mono_metadata_parse_field_type  (MonoImage      *m,\n\t\t                                short            field_flags,\n\t\t\t\t\t\tconst char      *ptr,\n\t\t\t\t\t\tconst char      **rptr);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoType      *mono_type_create_from_typespec  (MonoImage        *image,\n\t\t\t\t\t        uint32_t           type_spec);\nMONO_API void           mono_metadata_free_type         (MonoType        *type);\nMONO_API int            mono_type_size                  (MonoType        *type, \n\t\t\t\t\t\tint             *alignment);\nMONO_API int            mono_type_stack_size            (MonoType        *type, \n\t\t\t\t\t\tint             *alignment);\n\nMONO_API mono_bool       mono_type_generic_inst_is_valuetype      (MonoType *type);\nMONO_API mono_bool       mono_metadata_generic_class_is_valuetype (MonoGenericClass *gclass);\n\nMONO_API unsigned int          mono_metadata_type_hash         (MonoType *t1);\nMONO_API mono_bool       mono_metadata_type_equal        (MonoType *t1, MonoType *t2);\n\nMONO_API MonoMethodSignature  *mono_metadata_signature_alloc (MonoImage *image, uint32_t nparams);\n\nMONO_API MonoMethodSignature  *mono_metadata_signature_dup (MonoMethodSignature *sig);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMethodSignature  *mono_metadata_parse_signature (MonoImage *image, \n\t\t\t\t\t\t     uint32_t    token);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMethodSignature  *mono_metadata_parse_method_signature (MonoImage            *m,\n                                                            int                    def,\n                                                            const char            *ptr,\n                                                            const char           **rptr);\nMONO_API void                  mono_metadata_free_method_signature  (MonoMethodSignature   *method);\n\nMONO_API mono_bool          mono_metadata_signature_equal (MonoMethodSignature *sig1, \n\t\t\t\t\t\t MonoMethodSignature *sig2);\n\nMONO_API unsigned int             mono_signature_hash (MonoMethodSignature *sig);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMethodHeader *mono_metadata_parse_mh (MonoImage *m, const char *ptr);\nMONO_API void              mono_metadata_free_mh  (MonoMethodHeader *mh);\n\n/* MonoMethodHeader acccessors */\nMONO_API const unsigned char*\nmono_method_header_get_code (MonoMethodHeader *header, uint32_t* code_size, uint32_t* max_stack);\n\nMONO_API MonoType**\nmono_method_header_get_locals (MonoMethodHeader *header, uint32_t* num_locals, mono_bool *init_locals);\n\nMONO_API int\nmono_method_header_get_num_clauses (MonoMethodHeader *header);\n\nMONO_API int\nmono_method_header_get_clauses (MonoMethodHeader *header, MonoMethod *method, void **iter, MonoExceptionClause *clause);\n\nMONO_API uint32_t \nmono_type_to_unmanaged (MonoType *type, MonoMarshalSpec *mspec, \n\t\t\tmono_bool as_field, mono_bool unicode, MonoMarshalConv *conv);\n\n/*\n * Makes a token based on a table and an index\n */\n#define mono_metadata_make_token(table,idx) (((table) << 24)| (idx))\n\n/*\n * Returns the table index that this token encodes.\n */\n#define mono_metadata_token_table(token) ((token) >> 24)\n\n /*\n * Returns the index that a token refers to\n */\n#define mono_metadata_token_index(token) ((token) & 0xffffff)\n\n\n#define mono_metadata_token_code(token) ((token) & 0xff000000)\n\nMONO_API uint32_t mono_metadata_token_from_dor (uint32_t dor_index);\n\nMONO_API char *mono_guid_to_string (const uint8_t *guid);\n\nMONO_API char *mono_guid_to_string_minimal (const uint8_t *guid);\n\nMONO_API uint32_t mono_metadata_declsec_from_index (MonoImage *meta, uint32_t idx);\n\nMONO_API uint32_t mono_metadata_translate_token_index (MonoImage *image, int table, uint32_t idx);\n\nMONO_API void    mono_metadata_decode_table_row (MonoImage *image, int table,\n\t\t\t\t       int                    idx,\n\t\t\t\t       uint32_t               *res,\n\t\t\t\t       int                    res_size);\n\nMONO_API uint32_t      mono_metadata_decode_table_row_col (MonoImage *image, int table,\n\t\t\t\t\t   int            idx, \n\t\t\t\t\t   unsigned int          col);\n\nMONO_END_DECLS\n\n#endif /* __MONO_METADATA_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/method-builder-ilgen-internals.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METHOD_BUILDER_ILGEN_INTERNALS_H__\n#define __MONO_METHOD_BUILDER_ILGEN_INTERNALS_H__\n\n#include \"config.h\"\n#include <mono/metadata/class.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/opcodes.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/method-builder.h>\n\n/* ilgen version */\nstruct _MonoMethodBuilder {\n\tMonoMethod *method;\n\tgchar *name;\n\tgboolean no_dup_name;\n\tGList *locals_list;\n\tgint locals;\n\tgboolean dynamic;\n\tgboolean skip_visibility;\n\tgboolean init_locals;\n\tguint32 code_size;\n\tguint32 pos;\n\tguchar *code;\n\tgint num_clauses;\n\tMonoExceptionClause *clauses;\n\tconst gchar **param_names;\n\tMonoBitSet *volatile_args;\n\tMonoBitSet *volatile_locals;\n};\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/method-builder-ilgen.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METHOD_BUILDER_ILGEN_H__\n#define __MONO_METHOD_BUILDER_ILGEN_H__\n\n#include \"config.h\"\n#include <mono/metadata/class.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/opcodes.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/method-builder.h>\n\nMONO_API void\nmono_method_builder_ilgen_init (void);\n\nvoid\nmono_mb_patch_addr (MonoMethodBuilder *mb, int pos, int value);\n\nvoid\nmono_mb_patch_addr_s (MonoMethodBuilder *mb, int pos, gint8 value);\n\nvoid\nmono_mb_patch_branch (MonoMethodBuilder *mb, guint32 pos);\n\nvoid\nmono_mb_patch_short_branch (MonoMethodBuilder *mb, guint32 pos);\n\nint\nmono_mb_get_label (MonoMethodBuilder *mb);\n\nint\nmono_mb_get_pos (MonoMethodBuilder *mb);\n\nvoid\nmono_mb_emit_ptr (MonoMethodBuilder *mb, gpointer ptr);\n\nvoid\nmono_mb_emit_calli (MonoMethodBuilder *mb, MonoMethodSignature *sig);\n\nvoid\nmono_mb_emit_native_call (MonoMethodBuilder *mb, MonoMethodSignature *sig, gpointer func);\n\n#ifdef __cplusplus\ntemplate <typename T>\ninline void\nmono_mb_emit_native_call (MonoMethodBuilder *mb, MonoMethodSignature *sig, T func)\n{\n\tmono_mb_emit_native_call (mb, sig, (gpointer)func);\n}\n#endif // __cplusplus\n\nvoid\nmono_mb_emit_managed_call (MonoMethodBuilder *mb, MonoMethod *method, MonoMethodSignature *opt_sig);\n\nvoid\nmono_mb_emit_icall_id (MonoMethodBuilder *mb, MonoJitICallId jit_icall_id);\n\n#define mono_mb_emit_icall(mb, name) (mono_mb_emit_icall_id ((mb), MONO_JIT_ICALL_ ## name))\n\nint\nmono_mb_add_local (MonoMethodBuilder *mb, MonoType *type);\n\nvoid\nmono_mb_emit_ldarg (MonoMethodBuilder *mb, guint argnum);\n\nvoid\nmono_mb_emit_ldarg_addr (MonoMethodBuilder *mb, guint argnum);\n\nvoid\nmono_mb_emit_ldloc (MonoMethodBuilder *mb, guint num);\n\nvoid\nmono_mb_emit_ldloc_addr (MonoMethodBuilder *mb, guint locnum);\n\nvoid\nmono_mb_emit_stloc (MonoMethodBuilder *mb, guint num);\n\nvoid\nmono_mb_emit_exception (MonoMethodBuilder *mb, const char *exc_name, const char *msg);\n\nvoid\nmono_mb_emit_exception_full (MonoMethodBuilder *mb, const char *exc_nspace, const char *exc_name, const char *msg);\n\nvoid\nmono_mb_emit_exception_for_error (MonoMethodBuilder *mb, MonoError *error);\n\nvoid\nmono_mb_emit_icon (MonoMethodBuilder *mb, gint32 value);\n\nvoid\nmono_mb_emit_icon8 (MonoMethodBuilder *mb, gint64 value);\n\nguint32\nmono_mb_emit_branch (MonoMethodBuilder *mb, guint8 op);\n\nguint32\nmono_mb_emit_short_branch (MonoMethodBuilder *mb, guint8 op);\n\nvoid\nmono_mb_emit_branch_label (MonoMethodBuilder *mb, guint8 op, guint32 label);\n\nvoid\nmono_mb_emit_add_to_local (MonoMethodBuilder *mb, guint16 local, gint32 incr);\n\nvoid\nmono_mb_emit_ldflda (MonoMethodBuilder *mb, gint32 offset);\n\nvoid\nmono_mb_emit_byte (MonoMethodBuilder *mb, guint8 op);\n\nvoid\nmono_mb_emit_i2 (MonoMethodBuilder *mb, gint16 data);\n\nvoid\nmono_mb_emit_i4 (MonoMethodBuilder *mb, gint32 data);\n\nvoid\nmono_mb_emit_i8 (MonoMethodBuilder *mb, gint64 data);\n\nvoid\nmono_mb_emit_op (MonoMethodBuilder *mb, guint8 op, gpointer data);\n\nvoid\nmono_mb_emit_ldstr (MonoMethodBuilder *mb, char *str);\n\nvoid\nmono_mb_set_clauses (MonoMethodBuilder *mb, int num_clauses, MonoExceptionClause *clauses);\n\nvoid\nmono_mb_set_param_names (MonoMethodBuilder *mb, const char **param_names);\n\nchar*\nmono_mb_strdup (MonoMethodBuilder *mb, const char *s);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/method-builder-internals.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METHOD_BUILDER_INTERNALS_H__\n#define __MONO_METHOD_BUILDER_INTERNALS_H__\n\n#include \"config.h\"\n#include <mono/metadata/class.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/opcodes.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/method-builder.h>\n\n/* noilgen version */\nstruct _MonoMethodBuilder {\n\tMonoMethod *method;\n\tgchar *name;\n\tgboolean no_dup_name;\n};\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/method-builder.h",
    "content": "/**\n * \\file\n * Functions for creating IL methods at runtime.\n * \n * Author:\n *   Paolo Molaro (lupus@ximian.com)\n *\n * (C) 2002 Ximian, Inc.  http://www.ximian.com\n *\n */\n\n#ifndef __MONO_METHOD_BUILDER_H__\n#define __MONO_METHOD_BUILDER_H__\n\n#include \"config.h\"\n#include <mono/metadata/class.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/opcodes.h>\n#include <mono/metadata/reflection.h>\n\ntypedef struct _MonoMethodBuilder MonoMethodBuilder;\n\n#define MONO_METHOD_BUILDER_CALLBACKS_VERSION 1\n\ntypedef struct {\n\tint version;\n\tMonoMethodBuilder* (*new_base) (MonoClass *klass, MonoWrapperType type);\n\tvoid (*free) (MonoMethodBuilder *mb);\n\tMonoMethod* (*create_method) (MonoMethodBuilder *mb, MonoMethodSignature *signature, int max_stack);\n} MonoMethodBuilderCallbacks;\n\nMonoMethodBuilder *\nmono_mb_new (MonoClass *klass, const char *name, MonoWrapperType type);\n\nMonoMethodBuilder *\nmono_mb_new_no_dup_name (MonoClass *klass, const char *name, MonoWrapperType type);\n\nvoid\nmono_mb_free (MonoMethodBuilder *mb);\n\nMonoMethod *\nmono_mb_create_method (MonoMethodBuilder *mb, MonoMethodSignature *signature, int max_stack);\n\nguint32\nmono_mb_add_data (MonoMethodBuilder *mb, gpointer data);\n\nchar*\nmono_mb_strdup (MonoMethodBuilder *mb, const char *s);\n\nvoid\nmono_install_method_builder_callbacks (MonoMethodBuilderCallbacks *cb);\n\n#endif /* __MONO_METHOD_BUILDER_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/monitor.h",
    "content": "/**\n * \\file\n * Monitor locking functions\n *\n * Author:\n *\tDick Porter (dick@ximian.com)\n *\n * (C) 2003 Ximian, Inc\n */\n\n#ifndef _MONO_METADATA_MONITOR_H_\n#define _MONO_METADATA_MONITOR_H_\n\n#include <glib.h>\n#include <mono/metadata/object.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/mono-coop-mutex.h>\n#include <mono/metadata/icalls.h>\n\n#define OWNER_MASK\t\t0x0000ffff\n#define ENTRY_COUNT_MASK\t0xffff0000\n#define ENTRY_COUNT_WAITERS\t0x80000000\n#define ENTRY_COUNT_ZERO\t0x7fff0000\n#define ENTRY_COUNT_SHIFT\t16\n\nstruct _MonoThreadsSync\n{\n\t/*\n\t * The entry count field can be negative, which would mean that the entry_sem is\n\t * signaled and nobody is waiting to acquire it. This can happen when the thread\n\t * that was waiting is either interrupted or timeouts, and the owner releases\n\t * the lock before the forementioned thread updates the entry count.\n\t *\n\t * The 0 entry_count value is encoded as ENTRY_COUNT_ZERO, positive numbers being\n\t * greater than it and negative numbers smaller than it.\n\t */\n\tguint32 status;\t\t\t/* entry_count (16) | owner_id (16) */\n\tguint32 nest;\n#ifdef HAVE_MOVING_COLLECTOR\n\tgint32 hash_code;\n#endif\n\tGSList *wait_list;\n\tvoid *data;\n\tMonoCoopMutex *entry_mutex;\n\tMonoCoopCond *entry_cond;\n};\n\n/*\n * Lock word format:\n *\n * The least significant bit stores whether a hash for the object is computed\n * which is stored either in the lock word or in the MonoThreadsSync structure\n * that the lock word points to.\n *\n * The second bit stores whether the lock word is inflated, containing an\n * address to the MonoThreadsSync structure.\n *\n * If both bits are 0, either the lock word is free (entire lock word is 0)\n * or it is a thin/flat lock.\n *\n * 32-bit\n *            LOCK_WORD_FLAT:    [owner:22 | nest:8 | status:2]\n *       LOCK_WORD_THIN_HASH:    [hash:30 | status:2]\n *        LOCK_WORD_INFLATED:    [sync:30 | status:2]\n *        LOCK_WORD_FAT_HASH:    [sync:30 | status:2]\n *\n * 64-bit\n *            LOCK_WORD_FLAT:    [unused:22 | owner:32 | nest:8 | status:2]\n *       LOCK_WORD_THIN_HASH:    [hash:62 | status:2]\n *        LOCK_WORD_INFLATED:    [sync:62 | status:2]\n *        LOCK_WORD_FAT_HASH:    [sync:62 | status:2]\n *\n * In order to save processing time and to have one additional value, the nest\n * count starts from 0 for the lock word (just valid thread ID in the lock word\n * means that the thread holds the lock once, although nest is 0).\n * FIXME Have the same convention on inflated locks\n */\n\ntypedef union {\n\tgsize lock_word;\n\tMonoThreadsSync *sync;\n} LockWord;\n\nenum {\n\tLOCK_WORD_FLAT = 0,\n\tLOCK_WORD_HAS_HASH = 1,\n\tLOCK_WORD_INFLATED = 2,\n\n\tLOCK_WORD_STATUS_BITS = 2,\n\tLOCK_WORD_NEST_BITS = 8,\n\n\tLOCK_WORD_STATUS_MASK = (1 << LOCK_WORD_STATUS_BITS) - 1,\n\tLOCK_WORD_NEST_MASK = ((1 << LOCK_WORD_NEST_BITS) - 1) << LOCK_WORD_STATUS_BITS,\n\n\tLOCK_WORD_HASH_SHIFT = LOCK_WORD_STATUS_BITS,\n\tLOCK_WORD_NEST_SHIFT = LOCK_WORD_STATUS_BITS,\n\tLOCK_WORD_OWNER_SHIFT = LOCK_WORD_STATUS_BITS + LOCK_WORD_NEST_BITS\n};\n\nMONO_API void\nmono_locks_dump (gboolean include_untaken);\n\nvoid\nmono_monitor_init (void);\n\nvoid\nmono_monitor_cleanup (void);\n\nICALL_EXTERN_C\nMonoBoolean\nmono_monitor_enter_internal (MonoObject *obj);\n\nICALL_EXTERN_C\nvoid\nmono_monitor_enter_v4_internal (MonoObject *obj, MonoBoolean *lock_taken);\n\nICALL_EXTERN_C\nguint32\nmono_monitor_enter_fast (MonoObject *obj);\n\nICALL_EXTERN_C\nguint32\nmono_monitor_enter_v4_fast (MonoObject *obj, MonoBoolean *lock_taken);\n\nguint32\nmono_monitor_get_object_monitor_gchandle (MonoObject *object);\n\nvoid\nmono_monitor_threads_sync_members_offset (int *status_offset, int *nest_offset);\n#define MONO_THREADS_SYNC_MEMBER_OFFSET(o)\t((o)>>8)\n#define MONO_THREADS_SYNC_MEMBER_SIZE(o)\t((o)&0xff)\n\n#if ENABLE_NETCORE\nICALL_EXPORT\ngint64\nves_icall_System_Threading_Monitor_Monitor_LockContentionCount (void);\n#endif\n\n#endif /* _MONO_METADATA_MONITOR_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-basic-block.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_BASIC_BLOCK_H__\n#define __MONO_METADATA_BASIC_BLOCK_H__\n\n#include <glib.h>\n#include <mono/metadata/metadata.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/mono-error.h>\n#include <mono/metadata/opcodes.h>\n\ntypedef struct _MonoSimpleBasicBlock MonoSimpleBasicBlock;\n\nstruct _MonoSimpleBasicBlock {\n\tMonoSimpleBasicBlock *next, *left, *right, *parent;\n\tGSList *out_bb;\n\tint start, end;\n\tunsigned colour   : 1;\n\tunsigned dead     : 1;\n};\n\nMonoSimpleBasicBlock*\nmono_basic_block_split (MonoMethod *method, MonoError *error, MonoMethodHeader *header);\n\nvoid\nmono_basic_block_free (MonoSimpleBasicBlock *bb);\n\n/*This function is here because opcodes.h is a public header*/\nint\nmono_opcode_value_and_size (const unsigned char **ip, const unsigned char *end, MonoOpcodeEnum *value);\n\nint\nmono_opcode_size (const unsigned char *ip, const unsigned char *end);\n\n#endif  /* __MONO_METADATA_BASIC_BLOCK_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-conc-hash.h",
    "content": "/**\n * \\file\n * GC-aware concurrent hashtable, based on utils/mono-conc-hashtable\n */\n\n#ifndef __MONO_CONC_G_HASH_H__\n#define __MONO_CONC_G_HASH_H__\n\n#include <mono/metadata/mono-hash.h>\n\n\ntypedef struct _MonoConcGHashTable MonoConcGHashTable;\n\nMonoConcGHashTable * mono_conc_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);\ngpointer mono_conc_g_hash_table_lookup (MonoConcGHashTable *hash, gconstpointer key);\ngboolean mono_conc_g_hash_table_lookup_extended (MonoConcGHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value);\nvoid mono_conc_g_hash_table_foreach (MonoConcGHashTable *hash, GHFunc func, gpointer user_data);\nvoid mono_conc_g_hash_table_destroy (MonoConcGHashTable *hash);\ngpointer mono_conc_g_hash_table_insert (MonoConcGHashTable *h, gpointer k, gpointer v);\ngpointer mono_conc_g_hash_table_remove (MonoConcGHashTable *hash, gconstpointer key);\n\n#endif /* __MONO_CONC_G_HASH_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-config-dirs.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_CONFIG_INTERNAL_H__\n#define __MONO_CONFIG_INTERNAL_H__\n\n#include <config.h>\n#include <glib.h>\n\nconst char*\nmono_config_get_assemblies_dir (void);\n\nconst char*\nmono_config_get_cfg_dir (void);\n\nconst char*\nmono_config_get_bin_dir (void);\n\nconst char*\nmono_config_get_reloc_lib_dir (void);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-config-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_CONFIG_INTERNALS_H__\n#define __MONO_METADATA_CONFIG_INTERNALS_H__\n\n#include \"mono/metadata/mono-config.h\"\n\nvoid \nmono_config_for_assembly_internal (MonoImage *assembly);\n\n#endif /* __MONO_METADATA_CONFIG_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-config.h",
    "content": "/**\n * \\file\n *\n * Author: Paolo Molaro (lupus@ximian.com)\n *\n * (C) 2002 Ximian, Inc.\n */\n#ifndef __MONO_METADATA_CONFIG_H__\n#define __MONO_METADATA_CONFIG_H__\n\n#include <mono/utils/mono-publib.h>\n#include <mono/metadata/image.h>\n\nMONO_BEGIN_DECLS\n\nMONO_API const char *mono_config_get_os (void);\nMONO_API const char *mono_config_get_cpu (void);\nMONO_API const char *mono_config_get_wordsize (void);\n\nMONO_API const char* mono_get_config_dir (void);\nMONO_API void        mono_set_config_dir (const char *dir);\n\nMONO_API const char* mono_get_machine_config (void);\n\nMONO_API void mono_config_cleanup      (void);\nMONO_API void mono_config_parse        (const char *filename);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_config_for_assembly (MonoImage *assembly);\nMONO_API void mono_config_parse_memory (const char *buffer);\n\nMONO_API const char* mono_config_string_for_assembly_file (const char *filename);\n\nMONO_API void mono_config_set_server_mode (mono_bool server_mode);\nMONO_API mono_bool mono_config_is_server_mode (void);\n\nMONO_END_DECLS\n\n#endif /* __MONO_METADATA_CONFIG_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-debug.h",
    "content": "/**\n * \\file\n * This header is only installed for use by the debugger:\n * the structures and the API declared here are not supported.\n */\n\n#ifndef __MONO_DEBUG_H__\n#define __MONO_DEBUG_H__\n\n#include <mono/utils/mono-publib.h>\n#include <mono/metadata/image.h>\n#include <mono/metadata/appdomain.h>\n\nMONO_BEGIN_DECLS\n\ntypedef struct _MonoSymbolTable\t\t\tMonoSymbolTable;\ntypedef struct _MonoDebugDataTable\t\tMonoDebugDataTable;\n\ntypedef struct _MonoSymbolFile\t\t\tMonoSymbolFile;\ntypedef struct _MonoPPDBFile\t\t\tMonoPPDBFile;\n\ntypedef struct _MonoDebugHandle\t\t\tMonoDebugHandle;\n\ntypedef struct _MonoDebugLineNumberEntry\tMonoDebugLineNumberEntry;\n\ntypedef struct _MonoDebugVarInfo\t\tMonoDebugVarInfo;\ntypedef struct _MonoDebugMethodJitInfo\t\tMonoDebugMethodJitInfo;\ntypedef struct _MonoDebugMethodAddress\t\tMonoDebugMethodAddress;\ntypedef struct _MonoDebugMethodAddressList\tMonoDebugMethodAddressList;\ntypedef struct _MonoDebugClassEntry\t\tMonoDebugClassEntry;\n\ntypedef struct _MonoDebugMethodInfo\t\tMonoDebugMethodInfo;\ntypedef struct _MonoDebugLocalsInfo\t\tMonoDebugLocalsInfo;\ntypedef struct _MonoDebugMethodAsyncInfo\tMonoDebugMethodAsyncInfo;\ntypedef struct _MonoDebugSourceLocation\t\tMonoDebugSourceLocation;\n\ntypedef struct _MonoDebugList\t\t\tMonoDebugList;\n\ntypedef enum {\n\tMONO_DEBUG_FORMAT_NONE,\n\tMONO_DEBUG_FORMAT_MONO,\n\t/* Deprecated, the mdb debugger is not longer supported. */\n\tMONO_DEBUG_FORMAT_DEBUGGER\n} MonoDebugFormat;\n\n/*\n * NOTE:\n * We intentionally do not use GList here since the debugger needs to know about\n * the layout of the fields.\n*/\nstruct _MonoDebugList {\n\tMonoDebugList *next;\n\tconst void* data;\n};\n\nstruct _MonoSymbolTable {\n\tuint64_t magic;\n\tuint32_t version;\n\tuint32_t total_size;\n\n\t/*\n\t * Corlib and metadata info.\n\t */\n\tMonoDebugHandle *corlib;\n\tMonoDebugDataTable *global_data_table;\n\tMonoDebugList *data_tables;\n\n\t/*\n\t * The symbol files.\n\t */\n\tMonoDebugList *symbol_files;\n};\n\nstruct _MonoDebugHandle {\n\tuint32_t index;\n\tchar *image_file;\n\tMonoImage *image;\n\tMonoDebugDataTable *type_table;\n\tMonoSymbolFile *symfile;\n\tMonoPPDBFile *ppdb;\n};\n\nstruct _MonoDebugMethodJitInfo {\n\tconst mono_byte *code_start;\n\tuint32_t code_size;\n\tuint32_t prologue_end;\n\tuint32_t epilogue_begin;\n\tconst mono_byte *wrapper_addr;\n\tuint32_t num_line_numbers;\n\tMonoDebugLineNumberEntry *line_numbers;\n\tuint32_t has_var_info;\n\tuint32_t num_params;\n\tMonoDebugVarInfo *this_var;\n\tMonoDebugVarInfo *params;\n\tuint32_t num_locals;\n\tMonoDebugVarInfo *locals;\n\tMonoDebugVarInfo *gsharedvt_info_var;\n\tMonoDebugVarInfo *gsharedvt_locals_var;\n};\n\nstruct _MonoDebugMethodAddressList {\n\tuint32_t size;\n\tuint32_t count;\n\tmono_byte data [MONO_ZERO_LEN_ARRAY];\n};\n\nstruct _MonoDebugSourceLocation {\n\tchar *source_file;\n\tuint32_t row, column;\n\tuint32_t il_offset;\n};\n\nMONO_API mono_bool mono_debug_enabled (void);\n\n/*\n * These bits of the MonoDebugLocalInfo's \"index\" field are flags specifying\n * where the variable is actually stored.\n *\n * See relocate_variable() in debug-symfile.c for more info.\n */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_FLAGS\t\t0xf0000000\n\n/* The variable is in register \"index\". */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_REGISTER\t\t0\n\n/* The variable is at offset \"offset\" from register \"index\". */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_REGOFFSET\t\t0x10000000\n\n/* The variable is in the two registers \"offset\" and \"index\". */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_TWO_REGISTERS\t0x20000000\n\n/* The variable is dead. */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_DEAD\t\t0x30000000\n\n/* Same as REGOFFSET, but do an indirection */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_REGOFFSET_INDIR\t\t0x40000000\n\n/* gsharedvt local */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_GSHAREDVT_LOCAL\t\t0x50000000\n\n/* variable is a vt address */\n#define MONO_DEBUG_VAR_ADDRESS_MODE_VTADDR\t\t0x60000000\n\nstruct _MonoDebugVarInfo {\n\tuint32_t index;\n\tuint32_t offset;\n\tuint32_t size;\n\tuint32_t begin_scope;\n\tuint32_t end_scope;\n\tMonoType *type;\n};\n\n#define MONO_DEBUGGER_MAJOR_VERSION\t\t\t81\n#define MONO_DEBUGGER_MINOR_VERSION\t\t\t6\n#define MONO_DEBUGGER_MAGIC\t\t\t\t0x7aff65af4253d427ULL\n\nMONO_API void mono_debug_init (MonoDebugFormat format);\nMONO_API void mono_debug_open_image_from_memory (MonoImage *image, const mono_byte *raw_contents, int size);\nMONO_API void mono_debug_cleanup (void);\n\nMONO_API void mono_debug_close_image (MonoImage *image);\n\nMONO_API void mono_debug_domain_unload (MonoDomain *domain);\nMONO_API void mono_debug_domain_create (MonoDomain *domain);\n\nMONO_API MonoDebugMethodAddress *\nmono_debug_add_method (MonoMethod *method, MonoDebugMethodJitInfo *jit, MonoDomain *domain);\n\nMONO_API void\nmono_debug_remove_method (MonoMethod *method, MonoDomain *domain);\n\nMONO_API MonoDebugMethodInfo *\nmono_debug_lookup_method (MonoMethod *method);\n\nMONO_API MonoDebugMethodAddressList *\nmono_debug_lookup_method_addresses (MonoMethod *method);\n\nMONO_API MonoDebugMethodJitInfo*\nmono_debug_find_method (MonoMethod *method, MonoDomain *domain);\n\nMONO_API MonoDebugHandle *\nmono_debug_get_handle (MonoImage *image);\n\nMONO_API void\nmono_debug_free_method_jit_info (MonoDebugMethodJitInfo *jit);\n\n\nMONO_API void\nmono_debug_add_delegate_trampoline (void* code, int size);\n\nMONO_API MonoDebugLocalsInfo*\nmono_debug_lookup_locals (MonoMethod *method);\n\nMonoDebugMethodAsyncInfo*\nmono_debug_lookup_method_async_debug_info (MonoMethod *method);\n\n// The intent here is really MONO_LLVM_INTERNAL but that is not necessarily available.\nMONO_API\nMonoDebugSourceLocation *\nmono_debug_method_lookup_location (MonoDebugMethodInfo *minfo, int il_offset);\n\n/*\n * Line number support.\n */\n\nMONO_API MonoDebugSourceLocation *\nmono_debug_lookup_source_location (MonoMethod *method, uint32_t address, MonoDomain *domain);\n\nMONO_API int32_t\nmono_debug_il_offset_from_address (MonoMethod *method, MonoDomain *domain, uint32_t native_offset);\n\nMONO_API void\nmono_debug_free_source_location (MonoDebugSourceLocation *location);\n\nMONO_API char *\nmono_debug_print_stack_frame (MonoMethod *method, uint32_t native_offset, MonoDomain *domain);\n\n/*\n * Mono Debugger support functions\n *\n * These methods are used by the JIT while running inside the Mono Debugger.\n */\n\nMONO_API int             mono_debugger_method_has_breakpoint       (MonoMethod *method);\nMONO_API int             mono_debugger_insert_breakpoint           (const char *method_name, mono_bool include_namespace);\n\nMONO_API void mono_set_is_debugger_attached (mono_bool attached);\nMONO_API mono_bool mono_is_debugger_attached (void);\n\nMONO_END_DECLS\n\n#endif /* __MONO_DEBUG_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-endian.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_ENDIAN_H_\n#define _MONO_METADATA_ENDIAN_H_ 1\n\n#include <glib.h>\n\ntypedef union {\n\tguint32 ival;\n\tfloat fval;\n} mono_rfloat;\n\ntypedef union {\n\tguint64 ival;\n\tdouble fval;\n\tunsigned char cval [8];\n} mono_rdouble;\n\n#if defined(__s390x__)\n\n#define read16(x)\t__builtin_bswap16(*((guint16 *)(x)))\n#define read32(x)\t__builtin_bswap32(*((guint32 *)(x)))\n#define read64(x)\t__builtin_bswap64(*((guint64 *)(x)))\n\n#else\n\n# if NO_UNALIGNED_ACCESS\n\nguint16 mono_read16 (const unsigned char *x);\nguint32 mono_read32 (const unsigned char *x);\nguint64 mono_read64 (const unsigned char *x);\n\n#define read16(x) (mono_read16 ((const unsigned char *)(x)))\n#define read32(x) (mono_read32 ((const unsigned char *)(x)))\n#define read64(x) (mono_read64 ((const unsigned char *)(x)))\n\n# else\n\n#define read16(x) GUINT16_FROM_LE (*((const guint16 *) (x)))\n#define read32(x) GUINT32_FROM_LE (*((const guint32 *) (x)))\n#define read64(x) GUINT64_FROM_LE (*((const guint64 *) (x)))\n\n# endif\n\n#endif\n\n#define readr4(x,dest)\t\\\n\tdo {\t\\\n\t\tmono_rfloat mf;\t\\\n\t\tmf.ival = read32 ((x));\t\\\n\t\t*(dest) = mf.fval;\t\\\n\t} while (0)\n\n#define readr8(x,dest)\t\\\n\tdo {\t\\\n\t\tmono_rdouble mf;\t\\\n\t\tmf.ival = read64 ((x));\t\\\n\t\t*(dest) = mf.fval;\t\\\n\t} while (0)\n\n#endif /* _MONO_METADATA_ENDIAN_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-gc.h",
    "content": "/**\n * \\file\n * GC related public interface\n *\n */\n#ifndef __METADATA_MONO_GC_H__\n#define __METADATA_MONO_GC_H__\n\n#include <mono/metadata/object.h>\n\nMONO_BEGIN_DECLS\n\ntypedef int (*MonoGCReferences) (MonoObject *obj, MonoClass *klass, uintptr_t size, uintptr_t num, MonoObject **refs, uintptr_t *offsets, void *data);\n\n/**\n * This enum is used by the profiler API when reporting root registration.\n */\ntypedef enum {\n\t/**\n\t * Roots external to Mono. Embedders may only use this value.\n\t */\n\tMONO_ROOT_SOURCE_EXTERNAL = 0,\n\t/**\n\t * Thread call stack.\n\t *\n\t * The \\c key parameter is a thread ID as a \\c uintptr_t.\n\t */\n\tMONO_ROOT_SOURCE_STACK = 1,\n\t/**\n\t * Roots in the finalizer queue. This is a pseudo-root.\n\t */\n\tMONO_ROOT_SOURCE_FINALIZER_QUEUE = 2,\n\t/**\n\t * Managed \\c static variables.\n\t *\n\t * The \\c key parameter is a \\c MonoVTable pointer.\n\t */\n\tMONO_ROOT_SOURCE_STATIC = 3,\n\t/**\n\t * Managed \\c static variables with \\c ThreadStaticAttribute.\n\t *\n\t * The \\c key parameter is a thread ID as a \\c uintptr_t.\n\t */\n\tMONO_ROOT_SOURCE_THREAD_STATIC = 4,\n\t/**\n\t * Managed \\c static variables with \\c ContextStaticAttribute.\n\t *\n\t * The \\c key parameter is a \\c MonoAppContext pointer.\n\t */\n\tMONO_ROOT_SOURCE_CONTEXT_STATIC = 5,\n\t/**\n\t * \\c GCHandle structures.\n\t */\n\tMONO_ROOT_SOURCE_GC_HANDLE = 6,\n\t/**\n\t * Roots in the just-in-time compiler.\n\t */\n\tMONO_ROOT_SOURCE_JIT = 7,\n\t/**\n\t * Roots in the threading subsystem.\n\t *\n\t * The \\c key parameter, if not \\c NULL, is a thread ID as a \\c uintptr_t.\n\t */\n\tMONO_ROOT_SOURCE_THREADING = 8,\n\t/**\n\t * Roots in application domains.\n\t *\n\t * The \\c key parameter, if not \\c NULL, is a \\c MonoDomain pointer.\n\t */\n\tMONO_ROOT_SOURCE_DOMAIN = 9,\n\t/**\n\t * Roots in reflection code.\n\t *\n\t * The \\c key parameter, if not \\c NULL, is a \\c MonoVTable pointer.\n\t */\n\tMONO_ROOT_SOURCE_REFLECTION = 10,\n\t/**\n\t * Roots from P/Invoke or other marshaling infrastructure.\n\t */\n\tMONO_ROOT_SOURCE_MARSHAL = 11,\n\t/**\n\t * Roots in the thread pool data structures.\n\t */\n\tMONO_ROOT_SOURCE_THREAD_POOL = 12,\n\t/**\n\t * Roots in the debugger agent.\n\t */\n\tMONO_ROOT_SOURCE_DEBUGGER = 13,\n\t/**\n\t * Roots in the runtime handle stack. This is a pseudo-root.\n\t *\n\t * The \\c key parameter is a thread ID as a \\c uintptr_t.\n\t */\n\tMONO_ROOT_SOURCE_HANDLE = 14,\n\t/**\n\t * Roots in the ephemeron arrays. This is a pseudo-root.\n\t */\n\tMONO_ROOT_SOURCE_EPHEMERON = 15,\n\t/**\n\t * Roots in the toggleref arrays. This is a pseudo-root.\n\t */\n\tMONO_ROOT_SOURCE_TOGGLEREF = 16,\n} MonoGCRootSource;\n\ntypedef enum {\n\tMONO_GC_HANDLE_TYPE_MIN = 0,\n\tMONO_GC_HANDLE_WEAK = MONO_GC_HANDLE_TYPE_MIN,\n\tMONO_GC_HANDLE_WEAK_TRACK_RESURRECTION,\n\tMONO_GC_HANDLE_NORMAL,\n\tMONO_GC_HANDLE_PINNED,\n\tMONO_GC_HANDLE_TYPE_MAX,\n} MonoGCHandleType;\n\nMONO_API void   mono_gc_collect         (int generation);\nMONO_API int    mono_gc_max_generation  (void);\nMONO_API int    mono_gc_get_generation  (MonoObject *object);\nMONO_API int    mono_gc_collection_count (int generation);\nMONO_API int64_t mono_gc_get_used_size   (void);\nMONO_API int64_t mono_gc_get_heap_size   (void);\nMONO_API MonoBoolean mono_gc_pending_finalizers (void);\nMONO_API void     mono_gc_finalize_notify    (void);\nMONO_API int    mono_gc_invoke_finalizers (void);\n/* heap walking is only valid in the pre-stop-world event callback */\nMONO_API int    mono_gc_walk_heap        (int flags, MonoGCReferences callback, void *data);\n\nMONO_END_DECLS\n\n#endif /* __METADATA_MONO_GC_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-hash-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_G_HASH_INTERNALS_H__\n#define __MONO_G_HASH_INTERNALS_H__\n\n#include \"mono/metadata/mono-hash.h\"\n#include \"mono/metadata/mono-gc.h\"\n\nMonoGHashTable *\nmono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);\n\nvoid \nmono_g_hash_table_insert_internal (MonoGHashTable *h, gpointer k, gpointer v);\n\n#endif /* __MONO_G_HASH_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-hash.h",
    "content": "/**\n * \\file\n * GC-aware hashtable, based on Eglib's Hashtable\n *\n * Authors:\n *   Paolo Molaro (lupus@xamarin.com)\n *\n * Copyright 2013 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_G_HASH_H__\n#define __MONO_G_HASH_H__\n\n#include <mono/metadata/mono-gc.h>\n\n/* do not change the values of this enum */\ntypedef enum {\n\tMONO_HASH_KEY_GC = 1,\n\tMONO_HASH_VALUE_GC = 2,\n\tMONO_HASH_KEY_VALUE_GC = MONO_HASH_KEY_GC | MONO_HASH_VALUE_GC,\n} MonoGHashGCType;\n\nextern gint32 mono_g_hash_table_max_chain_length;\n\ntypedef struct _MonoGHashTable MonoGHashTable;\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoGHashTable *\nmono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);\nMONO_API guint    mono_g_hash_table_size            (MonoGHashTable *hash);\nMONO_API gpointer mono_g_hash_table_lookup          (MonoGHashTable *hash, gconstpointer key);\nMONO_API gboolean mono_g_hash_table_lookup_extended (MonoGHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value);\nMONO_API void     mono_g_hash_table_foreach         (MonoGHashTable *hash, GHFunc func, gpointer user_data);\nMONO_API gpointer mono_g_hash_table_find            (MonoGHashTable *hash, GHRFunc predicate, gpointer user_data);\nMONO_API gboolean mono_g_hash_table_remove          (MonoGHashTable *hash, gconstpointer key);\nMONO_API guint    mono_g_hash_table_foreach_remove  (MonoGHashTable *hash, GHRFunc func, gpointer user_data);\nMONO_API void     mono_g_hash_table_destroy         (MonoGHashTable *hash);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v);\nMONO_API void     mono_g_hash_table_replace         (MonoGHashTable *h, gpointer k, gpointer v);\nMONO_API void     mono_g_hash_table_print_stats     (MonoGHashTable *table);\n\n#endif /* __MONO_G_HASH_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-mlist.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_MONO_MLIST_H__\n#define __MONO_METADATA_MONO_MLIST_H__\n\n/*\n * mono-mlist.h: Managed object list implementation\n */\n\n#include <mono/metadata/object.h>\n\ntypedef struct _MonoMList MonoMList;\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMList*  mono_mlist_alloc       (MonoObject *data);\nMONO_API MonoObject* mono_mlist_get_data    (MonoMList* list);\nMONO_API void        mono_mlist_set_data    (MonoMList* list, MonoObject *data);\nMONO_API MonoMList*  mono_mlist_set_next    (MonoMList* list, MonoMList *next);\nMONO_API int         mono_mlist_length      (MonoMList* list);\nMONO_API MonoMList*  mono_mlist_next        (MonoMList* list);\nMONO_API MonoMList*  mono_mlist_last        (MonoMList* list);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMList*  mono_mlist_prepend     (MonoMList* list, MonoObject *data);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoMList*  mono_mlist_append      (MonoMList* list, MonoObject *data);\n\nMonoMList*  mono_mlist_prepend_checked      (MonoMList* list, MonoObject *data, MonoError *error);\nMonoMList*  mono_mlist_append_checked       (MonoMList* list, MonoObject *data, MonoError *error);\n\nMONO_API MonoMList*  mono_mlist_remove_item (MonoMList* list, MonoMList *item);\n\n#endif /* __MONO_METADATA_MONO_MLIST_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-perfcounters-def.h",
    "content": "/**\n * \\file\n * Define the system and runtime performance counters.\n * Each category is defined with the macro:\n * \tPERFCTR_CAT(catid, name, help, type, instances, first_counter_id)\n * and after that follows the counters inside the category, defined by the macro:\n * \tPERFCTR_COUNTER(counter_id, name, help, type, field)\n * field is the field inside MonoPerfCounters per predefined counters.\n * Note we set it to unused for unrelated counters: it is unused\n * in those cases.\n */\nPERFCTR_CAT(CPU, \"Processor\", \"\", MultiInstance, CPU, CPU_USER_TIME)\nPERFCTR_COUNTER(CPU_USER_TIME, \"% User Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(CPU_PRIV_TIME, \"% Privileged Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(CPU_INTR_TIME, \"% Interrupt Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(CPU_DCP_TIME,  \"% DCP Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(CPU_PROC_TIME, \"% Processor Time\", \"\", Timer100NsInverse, unused)\n\nPERFCTR_CAT(PROC, \"Process\", \"\", MultiInstance, Process, PROC_USER_TIME)\nPERFCTR_COUNTER(PROC_USER_TIME, \"% User Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(PROC_PRIV_TIME, \"% Privileged Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(PROC_PROC_TIME, \"% Processor Time\", \"\", Timer100Ns, unused)\nPERFCTR_COUNTER(PROC_THREADS,   \"Thread Count\", \"\", NumberOfItems64, unused)\nPERFCTR_COUNTER(PROC_VBYTES,    \"Virtual Bytes\", \"\", NumberOfItems64, unused)\nPERFCTR_COUNTER(PROC_WSET,      \"Working Set\", \"\", NumberOfItems64, unused)\nPERFCTR_COUNTER(PROC_PBYTES,    \"Private Bytes\", \"\", NumberOfItems64, unused)\n\n/* sample runtime counter */\nPERFCTR_CAT(MONO_MEM, \"Mono Memory\", \"\", SingleInstance, Mono, MEM_NUM_OBJECTS)\nPERFCTR_COUNTER(MEM_NUM_OBJECTS, \"Allocated Objects\", \"\", NumberOfItems64, unused)\nPERFCTR_COUNTER(MEM_PHYS_TOTAL, \"Total Physical Memory\", \"Physical memory installed in the machine, in bytes\", NumberOfItems64, unused)\nPERFCTR_COUNTER(MEM_PHYS_AVAILABLE, \"Available Physical Memory\", \"Physical memory available in the machine, in bytes\", NumberOfItems64, unused)\n\nPERFCTR_CAT(ASPNET, \"ASP.NET\", \"\", MultiInstance, Mono, ASPNET_REQ_Q)\nPERFCTR_COUNTER(ASPNET_REQ_Q, \"Requests Queued\", \"\", NumberOfItems64, aspnet_requests_queued)\nPERFCTR_COUNTER(ASPNET_REQ_TOTAL, \"Requests Total\", \"\", NumberOfItems32, aspnet_requests)\nPERFCTR_COUNTER(ASPNET_REQ_PSEC, \"Requests/Sec\", \"\", RateOfCountsPerSecond32, aspnet_requests)\n\nPERFCTR_CAT(JIT, \".NET CLR JIT\", \"\", MultiInstance, Mono, JIT_BYTES)\nPERFCTR_COUNTER(JIT_BYTES, \"# of IL Bytes JITted\", \"\", NumberOfItems32, jit_bytes)\nPERFCTR_COUNTER(JIT_METHODS, \"# of IL Methods JITted\", \"\", NumberOfItems32, jit_methods)\nPERFCTR_COUNTER(JIT_TIME, \"% Time in JIT\", \"\", RawFraction, jit_time)\nPERFCTR_COUNTER(JIT_BYTES_PSEC, \"IL Bytes Jitted/Sec\", \"\", RateOfCountsPerSecond32, jit_bytes)\nPERFCTR_COUNTER(JIT_FAILURES, \"Standard Jit Failures\", \"\", NumberOfItems32, jit_failures)\n\nPERFCTR_CAT(EXC, \".NET CLR Exceptions\", \"\", MultiInstance, Mono, EXC_THROWN)\nPERFCTR_COUNTER(EXC_THROWN, \"# of Exceps Thrown\", \"\", NumberOfItems32, exceptions_thrown)\nPERFCTR_COUNTER(EXC_THROWN_PSEC, \"# of Exceps Thrown/Sec\", \"\", RateOfCountsPerSecond32, exceptions_thrown)\nPERFCTR_COUNTER(EXC_FILTERS_PSEC, \"# of Filters/Sec\", \"\", RateOfCountsPerSecond32, exceptions_filters)\nPERFCTR_COUNTER(EXC_FINALLYS_PSEC, \"# of Finallys/Sec\", \"\", RateOfCountsPerSecond32, exceptions_finallys)\nPERFCTR_COUNTER(EXC_CATCH_DEPTH, \"Throw to Catch Depth/Sec\", \"\", NumberOfItems32, exceptions_depth)\n\nPERFCTR_CAT(GC, \".NET CLR Memory\", \"\", MultiInstance, Mono, GC_GEN0)\nPERFCTR_COUNTER(GC_GEN0, \"# Gen 0 Collections\", \"\", NumberOfItems32, gc_collections0)\nPERFCTR_COUNTER(GC_GEN1, \"# Gen 1 Collections\", \"\", NumberOfItems32, gc_collections1)\nPERFCTR_COUNTER(GC_GEN2, \"# Gen 2 Collections\", \"\", NumberOfItems32, gc_collections2)\nPERFCTR_COUNTER(GC_PROM0, \"Promoted Memory from Gen 0\", \"\", NumberOfItems32, gc_promotions0)\nPERFCTR_COUNTER(GC_PROM1, \"Promoted Memory from Gen 1\", \"\", NumberOfItems32, gc_promotions1)\nPERFCTR_COUNTER(GC_PROM0SEC, \"Gen 0 Promoted Bytes/Sec\", \"\", RateOfCountsPerSecond32, gc_promotions0)\nPERFCTR_COUNTER(GC_PROM1SEC, \"Gen 1 Promoted Bytes/Sec\", \"\", RateOfCountsPerSecond32, gc_promotions1)\nPERFCTR_COUNTER(GC_PROMFIN, \"Promoted Finalization-Memory from Gen 0\", \"\", NumberOfItems32, gc_promotion_finalizers)\nPERFCTR_COUNTER(GC_GEN0SIZE, \"Gen 0 heap size\", \"\", NumberOfItems64, gc_gen0size)\nPERFCTR_COUNTER(GC_GEN1SIZE, \"Gen 1 heap size\", \"\", NumberOfItems64, gc_gen1size)\nPERFCTR_COUNTER(GC_GEN2SIZE, \"Gen 2 heap size\", \"\", NumberOfItems64, gc_gen2size)\nPERFCTR_COUNTER(GC_LOSIZE, \"Large Object Heap size\", \"\", NumberOfItems32, gc_lossize)\nPERFCTR_COUNTER(GC_FINSURV, \"Finalization Survivors\", \"\", NumberOfItems32, gc_fin_survivors)\nPERFCTR_COUNTER(GC_NHANDLES, \"# GC Handles\", \"\", NumberOfItems32, gc_num_handles)\nPERFCTR_COUNTER(GC_BYTESSEC, \"Allocated Bytes/sec\", \"\", RateOfCountsPerSecond32, gc_allocated)\nPERFCTR_COUNTER(GC_INDGC, \"# Induced GC\", \"\", NumberOfItems32, gc_induced)\nPERFCTR_COUNTER(GC_PERCTIME, \"% Time in GC\", \"\", RawFraction, gc_time)\nPERFCTR_COUNTER(GC_BYTES, \"# Bytes in all Heaps\", \"\", NumberOfItems64, gc_total_bytes)\nPERFCTR_COUNTER(GC_COMMBYTES, \"# Total committed Bytes\", \"\", NumberOfItems64, gc_committed_bytes)\nPERFCTR_COUNTER(GC_RESBYTES, \"# Total reserved Bytes\", \"\", NumberOfItems64, gc_reserved_bytes)\nPERFCTR_COUNTER(GC_PINNED, \"# of Pinned Objects\", \"\", NumberOfItems32, gc_num_pinned)\nPERFCTR_COUNTER(GC_SYNKB, \"# of Sink Blocks in use\", \"\", NumberOfItems32, gc_sync_blocks)\n\nPERFCTR_CAT(REMOTING, \".NET CLR Remoting\", \"\", MultiInstance, Mono, REMOTING_CALLSEC)\nPERFCTR_COUNTER(REMOTING_CALLSEC, \"Remote Calls/sec\", \"\", RateOfCountsPerSecond32, remoting_calls)\nPERFCTR_COUNTER(REMOTING_CALLS, \"Total Remote Calls\", \"\", NumberOfItems32, remoting_calls)\nPERFCTR_COUNTER(REMOTING_CHANNELS, \"Channels\", \"\", NumberOfItems32, remoting_channels)\nPERFCTR_COUNTER(REMOTING_CPROXIES, \"Context Proxies\", \"\", NumberOfItems32, remoting_proxies)\nPERFCTR_COUNTER(REMOTING_CBLOADED, \"Context-Bound Classes Loaded\", \"\", NumberOfItems32, remoting_classes)\nPERFCTR_COUNTER(REMOTING_CBALLOCSEC, \"Context-Bound Objects Alloc / sec\", \"\", RateOfCountsPerSecond32, remoting_objects)\nPERFCTR_COUNTER(REMOTING_CONTEXTS, \"Contexts\", \"\", NumberOfItems32, remoting_contexts)\n\nPERFCTR_CAT(LOADING, \".NET CLR Loading\", \"\", MultiInstance, Mono, LOADING_CLASSES)\nPERFCTR_COUNTER(LOADING_CLASSES, \"Current Classes Loaded\", \"\", NumberOfItems32, loader_classes)\nPERFCTR_COUNTER(LOADING_TOTCLASSES, \"Total Classes Loaded\", \"\", NumberOfItems32, loader_total_classes)\nPERFCTR_COUNTER(LOADING_CLASSESSEC, \"Rate of Classes Loaded\", \"\", RateOfCountsPerSecond32, loader_total_classes)\nPERFCTR_COUNTER(LOADING_APPDOMAINS, \"Current appdomains\", \"\", NumberOfItems32, loader_appdomains)\nPERFCTR_COUNTER(LOADING_TOTAPPDOMAINS, \"Total Appdomains\", \"\", NumberOfItems32, loader_total_appdomains)\nPERFCTR_COUNTER(LOADING_APPDOMAINSEC, \"Rate of appdomains\", \"\", RateOfCountsPerSecond32, loader_total_appdomains)\nPERFCTR_COUNTER(LOADING_ASSEMBLIES, \"Current Assemblies\", \"\", NumberOfItems32, loader_assemblies)\nPERFCTR_COUNTER(LOADING_TOTASSEMBLIES, \"Total Assemblies\", \"\", NumberOfItems32, loader_total_assemblies)\nPERFCTR_COUNTER(LOADING_ASSEMBLIESEC, \"Rate of Assemblies\", \"\", RateOfCountsPerSecond32, loader_total_assemblies)\nPERFCTR_COUNTER(LOADING_FAILURES, \"Total # of Load Failures\", \"\", NumberOfItems32, loader_failures)\nPERFCTR_COUNTER(LOADING_FAILURESSEC, \"Rate of Load Failures\", \"\", RateOfCountsPerSecond32, loader_failures)\nPERFCTR_COUNTER(LOADING_BYTES, \"Bytes in Loader Heap\", \"\", NumberOfItems32, loader_bytes)\nPERFCTR_COUNTER(LOADING_APPUNLOADED, \"Total appdomains unloaded\", \"\", NumberOfItems32, loader_appdomains_uloaded)\nPERFCTR_COUNTER(LOADING_APPUNLOADEDSEC, \"Rate of appdomains unloaded\", \"\", RateOfCountsPerSecond32, loader_appdomains_uloaded)\n\nPERFCTR_CAT(THREAD, \".NET CLR LocksAndThreads\", \"\", MultiInstance, Mono, THREAD_CONTENTIONS)\nPERFCTR_COUNTER(THREAD_CONTENTIONS, \"Total # of Contentions\", \"\", NumberOfItems32, thread_contentions)\nPERFCTR_COUNTER(THREAD_CONTENTIONSSEC, \"Contention Rate / sec\", \"\", RateOfCountsPerSecond32, thread_contentions)\nPERFCTR_COUNTER(THREAD_QUEUELEN, \"Current Queue Length\", \"\", NumberOfItems32, thread_queue_len)\nPERFCTR_COUNTER(THREAD_QUEUELENP, \"Queue Length Peak\", \"\", NumberOfItems32, thread_queue_max)\nPERFCTR_COUNTER(THREAD_QUEUELENSEC, \"Queue Length / sec\", \"\", RateOfCountsPerSecond32, thread_queue_max)\nPERFCTR_COUNTER(THREAD_NUMLOG, \"# of current logical Threads\", \"\", NumberOfItems32, thread_num_logical)\nPERFCTR_COUNTER(THREAD_NUMPHYS, \"# of current physical Threads\", \"\", NumberOfItems32, thread_num_physical)\nPERFCTR_COUNTER(THREAD_NUMREC, \"# of current recognized threads\", \"\", NumberOfItems32, thread_cur_recognized)\nPERFCTR_COUNTER(THREAD_TOTREC, \"# of total recognized threads\", \"\", NumberOfItems32, thread_num_recognized)\nPERFCTR_COUNTER(THREAD_TOTRECSEC, \"rate of recognized threads / sec\", \"\", RateOfCountsPerSecond32, thread_num_recognized)\n\nPERFCTR_CAT(INTEROP, \".NET CLR Interop\", \"\", MultiInstance, Mono, INTEROP_NUMCCW)\nPERFCTR_COUNTER(INTEROP_NUMCCW, \"# of CCWs\", \"\", NumberOfItems32, interop_num_ccw)\nPERFCTR_COUNTER(INTEROP_STUBS, \"# of Stubs\", \"\", NumberOfItems32, interop_num_stubs)\nPERFCTR_COUNTER(INTEROP_MARSH, \"# of marshalling\", \"\", NumberOfItems32, interop_num_marshals)\n\nPERFCTR_CAT(SECURITY, \".NET CLR Security\", \"\", MultiInstance, Mono, SECURITY_CHECKS)\nPERFCTR_COUNTER(SECURITY_CHECKS, \"Total Runtime Checks\", \"\", NumberOfItems32, security_num_checks)\nPERFCTR_COUNTER(SECURITY_LCHECKS, \"# Link Time Checks\", \"\", NumberOfItems32, security_num_link_checks)\nPERFCTR_COUNTER(SECURITY_PERCTIME, \"% Time in RT checks\", \"\", RawFraction, security_time)\nPERFCTR_COUNTER(SECURITY_SWDEPTH, \"Stack Walk Depth\", \"\", NumberOfItems32, security_depth)\n\nPERFCTR_CAT(THREADPOOL, \"Mono Threadpool\", \"\", MultiInstance, Mono, THREADPOOL_WORKITEMS)\nPERFCTR_COUNTER(THREADPOOL_WORKITEMS, \"Work Items Added\", \"\", NumberOfItems64, threadpool_workitems)\nPERFCTR_COUNTER(THREADPOOL_WORKITEMS_PSEC, \"Work Items Added/Sec\", \"\", RateOfCountsPerSecond32, threadpool_workitems)\nPERFCTR_COUNTER(THREADPOOL_IOWORKITEMS, \"IO Work Items Added\", \"\", NumberOfItems64, threadpool_ioworkitems)\nPERFCTR_COUNTER(THREADPOOL_IOWORKITEMS_PSEC, \"IO Work Items Added/Sec\", \"\", RateOfCountsPerSecond32, threadpool_ioworkitems)\nPERFCTR_COUNTER(THREADPOOL_THREADS, \"# of Threads\", \"\", NumberOfItems32, threadpool_threads)\nPERFCTR_COUNTER(THREADPOOL_IOTHREADS, \"# of IO Threads\", \"\", NumberOfItems32, threadpool_iothreads)\n\nPERFCTR_CAT(NETWORK, \"Network Interface\", \"\", MultiInstance, NetworkInterface, NETWORK_BYTESRECSEC)\nPERFCTR_COUNTER(NETWORK_BYTESRECSEC, \"Bytes Received/sec\", \"\", RateOfCountsPerSecond64, unused)\nPERFCTR_COUNTER(NETWORK_BYTESSENTSEC, \"Bytes Sent/sec\", \"\", RateOfCountsPerSecond64, unused)\nPERFCTR_COUNTER(NETWORK_BYTESTOTALSEC, \"Bytes Total/sec\", \"\", RateOfCountsPerSecond64, unused)\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-perfcounters.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_PERFCOUNTERS_H__\n#define __MONO_PERFCOUNTERS_H__\n\n#include <glib.h>\n#include <mono/metadata/object.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/metadata/icalls.h>\n\ntypedef struct _MonoCounterSample MonoCounterSample;\n\nICALL_EXPORT\nMonoBoolean mono_perfcounter_get_sample (void *impl, MonoBoolean only_value, MonoCounterSample *sample);\n\nICALL_EXPORT\ngint64 mono_perfcounter_update_value    (void *impl, MonoBoolean do_incr, gint64 value);\n\nICALL_EXPORT\nvoid   mono_perfcounter_free_data       (void *impl);\n\ntypedef gboolean (*PerfCounterEnumCallback) (char *category_name, char *name, unsigned char type, gint64 value, gpointer user_data);\nMONO_API void mono_perfcounter_foreach (PerfCounterEnumCallback cb, gpointer user_data);\n\n#endif /* __MONO_PERFCOUNTERS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-ptr-array.h",
    "content": "/**\n * \\file\n * GC aware equivalente of g_ptr_array\n *\n * Author:\n *\tRodrigo Kumpera  <rkumpera@novell.com>\n *\n * (C) 2010 Novell, Inc\n */\n\n#ifndef __MONO_PTR_ARRAY_H__\n#define __MONO_PTR_ARRAY_H__\n\n\n#include <glib.h>\n\n#include \"mono/metadata/gc-internals.h\"\n\n/* This is an implementation of a growable pointer array that avoids doing memory allocations for small sizes.\n * It works by allocating an initial small array on stack and only going to gc tracked memory if needed.\n * The array elements are assumed to be object references.\n */\ntypedef struct {\n\tvoid **data;\n\tint size;\n\tint capacity;\n\tMonoGCRootSource source;\n\tvoid *key;\n\tconst char *msg;\n} MonoPtrArray;\n\n#define MONO_PTR_ARRAY_MAX_ON_STACK (16)\n\n#define mono_ptr_array_init(ARRAY, INITIAL_SIZE, SOURCE, KEY, MSG) do {\\\n\t(ARRAY).size = 0; \\\n\t(ARRAY).capacity = MAX (INITIAL_SIZE, MONO_PTR_ARRAY_MAX_ON_STACK); \\\n\t(ARRAY).source = SOURCE; \\\n\t(ARRAY).key = KEY; \\\n\t(ARRAY).msg = MSG; \\\n\t(ARRAY).data = INITIAL_SIZE > MONO_PTR_ARRAY_MAX_ON_STACK \\\n\t\t? (void **)mono_gc_alloc_fixed (sizeof (void*) * INITIAL_SIZE, mono_gc_make_root_descr_all_refs (INITIAL_SIZE), SOURCE, NULL, MSG) \\\n\t\t: g_newa (void*, MONO_PTR_ARRAY_MAX_ON_STACK); \\\n} while (0)\n\n#define mono_ptr_array_destroy(ARRAY) do {\\\n\tif ((ARRAY).capacity > MONO_PTR_ARRAY_MAX_ON_STACK) \\\n\t\tmono_gc_free_fixed ((ARRAY).data); \\\n} while (0)\n\n#define mono_ptr_array_append(ARRAY, VALUE) do { \\\n\tif ((ARRAY).size >= (ARRAY).capacity) {\\\n\tvoid **__tmp = (void **)mono_gc_alloc_fixed (sizeof (void*) * (ARRAY).capacity * 2, mono_gc_make_root_descr_all_refs ((ARRAY).capacity * 2), (ARRAY).source, (ARRAY).key, (ARRAY).msg); \\\n\t\tmono_gc_memmove_aligned ((void *)__tmp, (ARRAY).data, (ARRAY).capacity * sizeof (void*)); \\\n\t\tif ((ARRAY).capacity > MONO_PTR_ARRAY_MAX_ON_STACK)\t\\\n\t\t\tmono_gc_free_fixed ((ARRAY).data);\t\\\n\t\t(ARRAY).data = __tmp;\t\\\n\t\t(ARRAY).capacity *= 2;\\\n\t}\\\n\t((ARRAY).data [(ARRAY).size++] = VALUE); \\\n} while (0)\n\n#define mono_ptr_array_sort(ARRAY, COMPARE_FUNC) do { \\\n\tmono_qsort ((ARRAY).data, (ARRAY).size, sizeof (gpointer), (COMPARE_FUNC)); \\\n} while (0)\n\n#define mono_ptr_array_set(ARRAY, IDX, VALUE) do { \\\n\t((ARRAY).data [(IDX)] = VALUE); \\\n} while (0)\n\n#define mono_ptr_array_get(ARRAY, IDX) ((ARRAY).data [(IDX)])\n\n#define mono_ptr_array_size(ARRAY) ((ARRAY).size)\n\n#define mono_ptr_array_reset(ARRAY) do { \\\n\t(ARRAY).size = 0; \\\n} while (0)\n\n#define mono_ptr_array_clear(ARRAY) do { \\\n\t(ARRAY).size = 0; \\\n\tmono_gc_bzero_aligned ((ARRAY).data, (ARRAY).capacity * sizeof (void*)); \\\n} while (0)\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/mono-security-windows-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_MONO_SECURITY_WINDOWS_INTERNALS_H__\n#define __MONO_METADATA_MONO_SECURITY_WINDOWS_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n#include \"mono/metadata/security.h\"\n#include \"mono/metadata/object.h\"\n#include \"mono/metadata/object-internals.h\"\n#include \"mono/metadata/metadata.h\"\n#include \"mono/metadata/metadata-internals.h\"\n\ngint32\nmono_security_win_get_token_name (gpointer token, gunichar2 ** uniname, MonoError *error);\n\ngboolean\nmono_security_win_is_machine_protected (const gunichar2 *path, MonoError *error);\n\ngboolean\nmono_security_win_is_user_protected (const gunichar2 *path, MonoError *error);\n\ngboolean\nmono_security_win_protect_machine (const gunichar2 *path, MonoError *error);\n\ngboolean\nmono_security_win_protect_user (const gunichar2 *path, MonoError *error);\n\n#endif /* HOST_WIN32 */\n\n#endif /* __MONO_METADATA_MONO_SECURITY_WINDOWS_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/normalization-tables.h",
    "content": "static const guint8 props [] = {\n0,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,\n0,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,128,128,128,128,0,\n0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,\n128,0,128,128,128,128,128,128,128,128,128,0,0,0,0,0,\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,\n128,0,128,128,128,128,128,128,128,128,128,0,0,0,0,0,\n0,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,\n18,0,0,0,0,0,0,0,146,0,18,0,0,0,0,18,\n0,0,18,18,146,18,0,128,18,18,18,0,18,18,18,0,\n3,3,131,3,131,131,128,131,3,3,131,3,3,3,3,131,\n0,3,3,3,131,131,131,0,128,3,3,3,131,3,0,0,\n3,3,131,3,131,131,128,131,3,3,131,3,3,3,3,131,\n0,3,3,3,131,131,131,0,128,3,3,3,131,3,0,3,\n3,3,131,131,3,3,3,3,3,3,3,3,3,3,3,3,\n0,0,131,131,3,3,3,3,3,3,3,3,3,3,3,3,\n3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,\n3,0,18,18,3,3,3,3,0,3,3,3,3,3,3,18,\n18,0,0,3,3,3,3,3,3,18,0,0,131,131,3,3,\n3,3,0,0,3,3,3,3,3,3,131,131,3,3,3,3,\n131,131,3,3,3,3,0,0,131,131,131,131,3,3,3,3,\n3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,146,\n0,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,\n131,131,0,0,0,0,0,0,0,0,0,0,0,0,0,131,\n131,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,\n0,0,0,0,18,18,18,18,18,18,18,18,18,3,3,3,\n3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,\n3,3,3,3,0,0,3,3,3,3,131,131,3,3,3,3,\n3,18,18,18,3,3,0,0,3,3,3,3,3,3,3,3,\n3,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,0,0,3,3,\n0,0,0,0,0,0,131,131,131,131,3,3,3,3,131,131,\n3,3,3,3,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,\n0,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,\n0,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,\n0,0,128,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,\n18,18,18,18,18,18,18,18,18,128,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,18,18,18,18,18,18,0,0,\n18,18,18,18,18,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,\n168,168,168,168,168,0,168,168,168,168,168,168,168,0,0,168,\n0,168,0,168,168,0,0,0,0,0,0,168,0,0,0,0,\n0,0,0,168,168,168,168,168,168,0,0,0,0,168,168,0,\n168,168,0,0,0,0,0,0,168,0,0,0,0,0,0,0,\n87,87,168,87,87,168,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,87,0,0,0,0,0,18,0,0,0,87,0,\n0,0,0,0,18,147,131,87,131,131,131,0,131,0,131,131,\n131,128,0,0,0,128,0,128,0,128,0,0,0,0,0,128,\n0,128,0,0,0,128,0,0,0,128,3,3,131,131,131,131,\n131,128,0,0,0,128,0,128,0,128,0,0,0,0,0,128,\n0,128,0,0,0,128,0,0,0,128,131,131,131,131,131,0,\n18,18,146,19,19,18,18,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,\n18,18,18,0,18,18,0,0,0,18,0,0,0,0,0,0,\n3,3,0,3,0,0,128,3,0,0,0,0,3,3,3,0,\n128,0,0,128,0,128,128,128,128,3,128,0,0,0,128,0,\n0,0,0,128,0,0,0,128,0,0,0,128,0,128,0,0,\n128,0,0,128,0,128,128,128,128,3,128,0,0,0,128,0,\n0,0,0,128,0,0,0,128,0,0,0,128,0,128,0,0,\n3,3,0,3,0,0,128,3,0,0,0,0,3,3,3,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,128,128,3,3,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,\n3,3,3,3,0,0,3,3,128,128,3,3,3,3,3,3,\n0,0,3,3,3,3,3,3,128,128,3,3,3,3,3,3,\n3,3,3,3,3,3,0,0,3,3,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,\n0,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,\n0,0,0,0,128,0,0,128,128,128,0,0,128,0,0,128,\n0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,\n128,128,128,128,128,128,128,0,128,128,128,128,128,0,128,0,\n128,128,0,128,128,0,128,128,128,128,128,0,0,0,0,0,\n0,0,128,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,3,3,3,3,3,128,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,128,0,128,0,0,0,0,0,\n0,0,0,168,168,168,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,\n0,0,0,0,0,18,18,18,18,0,0,0,0,0,0,0,\n0,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,\n0,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,\n3,128,3,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,128,3,0,128,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,128,128,128,0,0,0,0,128,0,0,0,\n0,128,128,0,0,0,0,0,128,3,0,128,0,0,0,128,\n128,3,0,128,3,0,0,0,0,0,0,0,168,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,87,87,87,87,87,87,87,87,\n0,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,\n0,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,\n0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,128,\n0,0,0,0,0,0,0,0,0,0,0,0,128,0,168,0,\n0,0,0,0,0,0,0,128,0,0,0,3,3,0,0,0,\n0,0,0,0,0,0,0,168,0,0,0,0,87,87,0,87,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,128,128,0,0,0,0,128,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,\n0,0,128,87,0,0,87,0,128,0,0,0,128,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,87,87,87,0,0,87,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,128,128,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,128,0,168,0,\n0,0,0,0,0,0,0,128,3,0,0,3,3,0,0,0,\n0,0,0,0,0,0,168,168,0,0,0,0,87,87,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,128,0,3,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,0,\n0,0,0,0,0,0,128,128,0,0,3,3,3,0,0,0,\n0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,128,0,3,0,0,0,0,0,0,0,\n0,0,0,0,0,0,168,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,\n3,0,168,0,0,0,128,3,3,0,131,3,0,0,0,0,\n0,0,0,0,0,168,168,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,0,\n0,0,0,0,0,0,128,128,0,0,3,3,3,0,0,0,\n0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,168,\n0,0,0,0,0,0,0,0,0,128,3,0,131,3,3,168,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,18,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,\n0,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,\n0,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,\n0,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,\n0,0,0,18,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,\n0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n128,0,128,87,0,0,0,0,0,0,0,0,128,87,0,0,\n0,128,87,0,0,0,128,87,0,0,0,128,87,0,0,0,\n0,0,0,0,0,0,0,0,0,87,0,0,0,0,0,0,\n0,128,128,87,128,87,87,18,87,18,0,0,0,0,0,0,\n128,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n128,0,128,87,0,0,0,0,0,0,0,0,128,87,0,0,\n0,128,87,0,0,0,128,87,0,0,0,128,87,0,0,0,\n0,0,128,128,0,128,0,128,0,87,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,128,3,0,0,0,0,0,0,0,168,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,\n0,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,\n0,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,\n0,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,\n0,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,\n40,40,40,40,40,40,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,40,40,40,40,40,40,40,40,\n40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,\n40,40,40,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,\n0,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,\n0,0,0,0,0,128,3,128,3,128,3,128,3,128,3,0,\n0,128,3,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,\n0,0,0,0,0,168,0,0,0,0,128,3,128,3,128,128,\n3,3,128,3,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,0,\n18,18,18,18,18,18,18,18,18,18,18,0,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,\n0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,\n0,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,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n0,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,\n0,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,\n3,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,\n3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,\n3,3,3,3,3,3,131,131,3,3,3,3,3,3,3,3,\n3,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,131,131,3,3,3,3,\n3,3,131,131,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,\n3,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,18,19,0,0,0,0,\n131,131,3,3,3,3,3,3,3,3,3,3,3,3,3,3,\n3,3,3,3,3,3,3,3,131,131,3,3,3,3,3,3,\n3,3,3,3,3,3,3,3,3,3,3,3,131,131,3,3,\n3,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,\n3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,\n131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,\n131,131,3,3,3,3,0,0,131,131,3,3,3,3,0,0,\n131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,\n131,131,3,3,3,3,3,3,131,131,3,3,3,3,3,3,\n131,131,3,3,3,3,0,0,131,131,3,3,3,3,0,0,\n131,131,3,3,3,3,3,3,0,131,0,3,0,3,0,3,\n131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,\n131,87,3,87,131,87,3,87,3,87,3,87,131,87,0,0,\n3,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,\n3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,\n3,3,3,3,3,0,131,3,3,3,3,87,3,18,87,146,\n18,19,3,3,3,0,131,3,3,87,3,87,3,19,19,19,\n3,3,3,87,0,0,3,3,3,3,3,87,0,19,19,19,\n3,3,3,87,3,3,3,3,3,3,3,87,3,19,87,87,\n0,0,3,3,3,0,131,3,3,87,3,87,3,87,146,0,\n87,87,146,146,18,18,18,18,18,18,18,0,0,0,0,0,\n0,18,0,0,0,0,0,18,0,0,0,0,0,0,0,0,\n0,0,0,0,18,18,18,0,0,0,0,0,0,0,0,18,\n0,0,0,18,18,0,18,18,0,0,0,0,18,0,18,0,\n0,0,0,0,0,0,0,18,18,18,0,0,0,0,0,0,\n0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,18,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,0,0,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,\n18,18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,18,18,0,18,18,18,0,18,18,18,18,18,18,18,\n18,18,18,18,0,18,18,0,0,18,18,18,18,18,0,0,\n18,18,18,0,18,0,87,0,18,0,87,87,18,18,0,18,\n18,18,0,18,18,18,18,18,18,18,0,18,18,18,18,18,\n18,0,0,0,0,18,18,18,18,18,0,0,0,0,0,0,\n0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n128,0,128,0,128,0,0,0,0,0,3,3,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,\n0,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,3,3,3,\n128,0,128,0,128,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,128,3,0,0,0,128,3,0,128,3,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,128,3,128,3,0,0,0,0,0,18,18,0,18,\n18,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,\n0,3,0,128,3,128,0,3,128,3,0,0,0,128,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n3,128,3,0,128,128,0,0,0,0,0,0,0,3,3,3,\n3,3,128,128,3,3,128,128,3,3,128,128,128,128,0,0,\n3,3,128,128,3,3,128,128,3,3,0,0,0,0,0,0,\n0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,128,0,0,0,0,0,128,128,0,128,3,3,3,3,\n0,0,128,128,128,128,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n3,3,3,3,0,0,0,0,0,0,3,3,3,3,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,87,87,0,0,0,0,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,18,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,18,18,18,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,87,128,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,18,18,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18,0,0,0,0,0,0,0,128,128,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,18,0,18,18,18,0,0,0,0,0,\n0,0,0,0,0,0,128,0,0,0,0,128,3,128,3,128,\n3,128,3,128,3,128,3,128,3,128,3,128,3,128,3,128,\n3,128,3,0,128,3,128,3,128,3,0,0,0,0,0,128,\n3,3,128,3,3,128,3,3,128,3,3,128,3,3,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,3,0,0,0,0,168,168,18,18,128,3,18,\n0,0,0,0,0,0,128,0,0,0,0,128,3,128,3,128,\n3,128,3,128,3,128,3,128,3,128,3,128,3,128,3,128,\n3,128,3,0,128,3,128,3,128,3,0,0,0,0,0,128,\n3,3,128,3,3,128,3,3,128,3,3,128,3,3,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,\n128,128,128,0,3,0,0,3,3,3,3,0,0,128,3,18,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,\n0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n0,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,\n0,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,\n0,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,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,0,0,\n87,0,87,0,0,87,87,87,87,87,87,87,87,87,87,0,\n87,0,87,0,0,87,87,0,0,0,87,87,87,87,0,0,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,0,0,0,0,0,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,\n87,87,87,87,87,87,87,87,87,87,0,0,0,0,0,0,\n0,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,\n18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,0,\n0,0,0,18,18,18,18,18,0,0,0,0,0,87,0,87,\n18,18,18,18,18,18,18,18,18,18,87,87,87,87,87,87,\n87,87,87,87,87,87,87,0,87,87,87,87,87,0,87,0,\n87,87,0,87,87,0,87,87,87,215,87,87,87,87,87,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,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,\n0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,\n0,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,\n18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,18,18,18,18,18,18,18,18,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,0,0,18,18,18,18,18,18,18,18,18,\n18,18,18,0,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,0,18,18,18,18,0,0,0,0,\n18,18,18,0,18,0,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,0,0,0,\n0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0,\n0,0,18,18,18,18,18,18,0,0,18,18,18,18,18,18,\n0,0,18,18,18,18,18,18,0,0,18,18,18,0,0,0,\n18,18,18,18,18,18,18,0,18,18,18,18,18,18,18,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0};\nstatic const guint32 mappedChars [] = {\n0,32,0,32,769,0,32,771,0,32,772,0,32,773,0,32,\n774,0,32,775,0,32,776,0,32,778,0,32,779,0,32,787,\n0,32,788,0,32,807,0,32,808,0,32,819,0,32,834,0,\n32,837,0,32,1611,0,32,1612,0,32,1612,1617,0,32,1613,0,\n32,1613,1617,0,32,1614,0,32,1614,1617,0,32,1615,0,32,1615,\n1617,0,32,1616,0,32,1616,1617,0,32,1617,0,32,1617,1648,0,\n32,1618,0,32,12441,0,32,12442,0,33,0,33,33,0,33,63,\n0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,40,\n49,41,0,40,49,48,41,0,40,49,49,41,0,40,49,50,\n41,0,40,49,51,41,0,40,49,52,41,0,40,49,53,41,\n0,40,49,54,41,0,40,49,55,41,0,40,49,56,41,0,\n40,49,57,41,0,40,50,41,0,40,50,48,41,0,40,51,\n41,0,40,52,41,0,40,53,41,0,40,54,41,0,40,55,\n41,0,40,56,41,0,40,57,41,0,40,97,41,0,40,98,\n41,0,40,99,41,0,40,100,41,0,40,101,41,0,40,102,\n41,0,40,103,41,0,40,104,41,0,40,105,41,0,40,106,\n41,0,40,107,41,0,40,108,41,0,40,109,41,0,40,110,\n41,0,40,111,41,0,40,112,41,0,40,113,41,0,40,114,\n41,0,40,115,41,0,40,116,41,0,40,117,41,0,40,118,\n41,0,40,119,41,0,40,120,41,0,40,121,41,0,40,122,\n41,0,40,4352,41,0,40,4352,4449,41,0,40,4354,41,0,40,\n4354,4449,41,0,40,4355,41,0,40,4355,4449,41,0,40,4357,41,\n0,40,4357,4449,41,0,40,4358,41,0,40,4358,4449,41,0,40,\n4359,41,0,40,4359,4449,41,0,40,4361,41,0,40,4361,4449,41,\n0,40,4363,41,0,40,4363,4449,41,0,40,4363,4457,4364,4453,4523,\n41,0,40,4363,4457,4370,4462,41,0,40,4364,41,0,40,4364,4449,\n41,0,40,4364,4462,41,0,40,4366,41,0,40,4366,4449,41,0,\n40,4367,41,0,40,4367,4449,41,0,40,4368,41,0,40,4368,4449,\n41,0,40,4369,41,0,40,4369,4449,41,0,40,4370,41,0,40,\n4370,4449,41,0,40,19968,41,0,40,19971,41,0,40,19977,41,0,\n40,20061,41,0,40,20108,41,0,40,20116,41,0,40,20195,41,0,\n40,20225,41,0,40,20241,41,0,40,20843,41,0,40,20845,41,0,\n40,21172,41,0,40,21313,41,0,40,21332,41,0,40,21517,41,0,\n40,21628,41,0,40,22235,41,0,40,22303,41,0,40,23398,41,0,\n40,26085,41,0,40,26376,41,0,40,26377,41,0,40,26408,41,0,\n40,26666,41,0,40,27700,41,0,40,28779,41,0,40,29305,41,0,\n40,30435,41,0,40,31038,41,0,40,31069,41,0,40,31085,41,0,\n40,33258,41,0,40,33267,41,0,40,36001,41,0,40,36039,41,0,\n40,37329,41,0,41,0,42,0,43,0,44,0,45,0,46,0,\n46,46,0,46,46,46,0,47,0,48,0,48,28857,0,49,0,\n49,46,0,49,48,0,49,48,46,0,49,48,26085,0,49,48,\n26376,0,49,48,28857,0,49,49,0,49,49,46,0,49,49,26085,\n0,49,49,26376,0,49,49,28857,0,49,50,0,49,50,46,0,\n49,50,26085,0,49,50,26376,0,49,50,28857,0,49,51,0,49,\n51,46,0,49,51,26085,0,49,51,28857,0,49,52,0,49,52,\n46,0,49,52,26085,0,49,52,28857,0,49,53,0,49,53,46,\n0,49,53,26085,0,49,53,28857,0,49,54,0,49,54,46,0,\n49,54,26085,0,49,54,28857,0,49,55,0,49,55,46,0,49,\n55,26085,0,49,55,28857,0,49,56,0,49,56,46,0,49,56,\n26085,0,49,56,28857,0,49,57,0,49,57,46,0,49,57,26085,\n0,49,57,28857,0,49,8260,0,49,8260,50,0,49,8260,51,0,\n49,8260,52,0,49,8260,53,0,49,8260,54,0,49,8260,56,0,\n49,26085,0,49,26376,0,49,28857,0,50,0,50,46,0,50,48,\n0,50,48,46,0,50,48,26085,0,50,48,28857,0,50,49,0,\n50,49,26085,0,50,49,28857,0,50,50,0,50,50,26085,0,50,\n50,28857,0,50,51,0,50,51,26085,0,50,51,28857,0,50,52,\n0,50,52,26085,0,50,52,28857,0,50,53,0,50,53,26085,0,\n50,54,0,50,54,26085,0,50,55,0,50,55,26085,0,50,56,\n0,50,56,26085,0,50,57,0,50,57,26085,0,50,8260,51,0,\n50,8260,53,0,50,26085,0,50,26376,0,50,28857,0,51,0,51,\n46,0,51,48,0,51,48,26085,0,51,49,0,51,49,26085,0,\n51,50,0,51,51,0,51,52,0,51,53,0,51,54,0,51,\n55,0,51,56,0,51,57,0,51,8260,52,0,51,8260,53,0,\n51,8260,56,0,51,26085,0,51,26376,0,51,28857,0,52,0,52,\n46,0,52,48,0,52,49,0,52,50,0,52,51,0,52,52,\n0,52,53,0,52,54,0,52,55,0,52,56,0,52,57,0,\n52,8260,53,0,52,26085,0,52,26376,0,52,28857,0,53,0,53,\n46,0,53,48,0,53,8260,54,0,53,8260,56,0,53,26085,0,\n53,26376,0,53,28857,0,54,0,54,46,0,54,26085,0,54,26376,\n0,54,28857,0,55,0,55,46,0,55,8260,56,0,55,26085,0,\n55,26376,0,55,28857,0,56,0,56,46,0,56,26085,0,56,26376,\n0,56,28857,0,57,0,57,46,0,57,26085,0,57,26376,0,57,\n28857,0,58,0,58,58,61,0,59,0,60,0,60,824,0,61,\n0,61,61,0,61,61,61,0,61,824,0,62,0,62,824,0,\n63,0,63,33,0,63,63,0,64,0,65,0,65,85,0,65,\n768,0,65,769,0,65,770,0,65,771,0,65,772,0,65,774,\n0,65,775,0,65,776,0,65,777,0,65,778,0,65,780,0,\n65,783,0,65,785,0,65,803,0,65,805,0,65,808,0,65,\n8725,109,0,66,0,66,113,0,66,775,0,66,803,0,66,817,\n0,67,0,67,111,46,0,67,769,0,67,770,0,67,775,0,\n67,780,0,67,807,0,67,8725,107,103,0,68,0,68,90,0,\n68,122,0,68,381,0,68,382,0,68,775,0,68,780,0,68,\n803,0,68,807,0,68,813,0,68,817,0,69,0,69,768,0,\n69,769,0,69,770,0,69,771,0,69,772,0,69,774,0,69,\n775,0,69,776,0,69,777,0,69,780,0,69,783,0,69,785,\n0,69,803,0,69,807,0,69,808,0,69,813,0,69,816,0,\n70,0,70,65,88,0,70,775,0,71,0,71,66,0,71,72,\n122,0,71,80,97,0,71,121,0,71,769,0,71,770,0,71,\n772,0,71,774,0,71,775,0,71,780,0,71,807,0,72,0,\n72,80,0,72,103,0,72,122,0,72,770,0,72,775,0,72,\n776,0,72,780,0,72,803,0,72,807,0,72,814,0,73,0,\n73,73,0,73,73,73,0,73,74,0,73,85,0,73,86,0,\n73,88,0,73,768,0,73,769,0,73,770,0,73,771,0,73,\n772,0,73,774,0,73,775,0,73,776,0,73,777,0,73,780,\n0,73,783,0,73,785,0,73,803,0,73,808,0,73,816,0,\n74,0,74,770,0,75,0,75,66,0,75,75,0,75,77,0,\n75,769,0,75,780,0,75,803,0,75,807,0,75,817,0,76,\n0,76,74,0,76,84,68,0,76,106,0,76,183,0,76,769,\n0,76,780,0,76,803,0,76,807,0,76,813,0,76,817,0,\n77,0,77,66,0,77,72,122,0,77,80,97,0,77,86,0,\n77,87,0,77,769,0,77,775,0,77,803,0,77,937,0,78,\n0,78,74,0,78,106,0,78,111,0,78,768,0,78,769,0,\n78,771,0,78,775,0,78,780,0,78,803,0,78,807,0,78,\n813,0,78,817,0,79,0,79,768,0,79,769,0,79,770,0,\n79,771,0,79,772,0,79,774,0,79,775,0,79,776,0,79,\n777,0,79,779,0,79,780,0,79,783,0,79,785,0,79,795,\n0,79,803,0,79,808,0,80,0,80,72,0,80,80,77,0,\n80,82,0,80,84,69,0,80,97,0,80,769,0,80,775,0,\n81,0,82,0,82,115,0,82,769,0,82,775,0,82,780,0,\n82,783,0,82,785,0,82,803,0,82,807,0,82,817,0,83,\n0,83,77,0,83,118,0,83,769,0,83,770,0,83,775,0,\n83,780,0,83,803,0,83,806,0,83,807,0,84,0,84,69,\n76,0,84,72,122,0,84,77,0,84,775,0,84,780,0,84,\n803,0,84,806,0,84,807,0,84,813,0,84,817,0,85,0,\n85,768,0,85,769,0,85,770,0,85,771,0,85,772,0,85,\n774,0,85,776,0,85,777,0,85,778,0,85,779,0,85,780,\n0,85,783,0,85,785,0,85,795,0,85,803,0,85,804,0,\n85,808,0,85,813,0,85,816,0,86,0,86,73,0,86,73,\n73,0,86,73,73,73,0,86,771,0,86,803,0,86,8725,109,\n0,87,0,87,98,0,87,768,0,87,769,0,87,770,0,87,\n775,0,87,776,0,87,803,0,88,0,88,73,0,88,73,73,\n0,88,775,0,88,776,0,89,0,89,768,0,89,769,0,89,\n770,0,89,771,0,89,772,0,89,775,0,89,776,0,89,777,\n0,89,803,0,90,0,90,769,0,90,770,0,90,775,0,90,\n780,0,90,803,0,90,817,0,91,0,92,0,93,0,94,0,\n95,0,96,0,97,0,97,46,109,46,0,97,47,99,0,97,\n47,115,0,97,702,0,97,768,0,97,769,0,97,770,0,97,\n771,0,97,772,0,97,774,0,97,775,0,97,776,0,97,777,\n0,97,778,0,97,780,0,97,783,0,97,785,0,97,803,0,\n97,805,0,97,808,0,98,0,98,97,114,0,98,775,0,98,\n803,0,98,817,0,99,0,99,47,111,0,99,47,117,0,99,\n97,108,0,99,99,0,99,100,0,99,109,0,99,109,178,0,\n99,109,179,0,99,769,0,99,770,0,99,775,0,99,780,0,\n99,807,0,100,0,100,66,0,100,97,0,100,109,0,100,109,\n178,0,100,109,179,0,100,122,0,100,382,0,100,775,0,100,\n780,0,100,803,0,100,807,0,100,813,0,100,817,0,100,8467,\n0,101,0,101,86,0,101,114,103,0,101,768,0,101,769,0,\n101,770,0,101,771,0,101,772,0,101,774,0,101,775,0,101,\n776,0,101,777,0,101,780,0,101,783,0,101,785,0,101,803,\n0,101,807,0,101,808,0,101,813,0,101,816,0,102,0,102,\n102,0,102,102,105,0,102,102,108,0,102,105,0,102,108,0,\n102,109,0,102,775,0,103,0,103,97,108,0,103,769,0,103,\n770,0,103,772,0,103,774,0,103,775,0,103,780,0,103,807,\n0,104,0,104,80,97,0,104,97,0,104,770,0,104,775,0,\n104,776,0,104,780,0,104,803,0,104,807,0,104,814,0,104,\n817,0,105,0,105,105,0,105,105,105,0,105,106,0,105,110,\n0,105,118,0,105,120,0,105,768,0,105,769,0,105,770,0,\n105,771,0,105,772,0,105,774,0,105,776,0,105,777,0,105,\n780,0,105,783,0,105,785,0,105,803,0,105,808,0,105,816,\n0,106,0,106,770,0,106,780,0,107,0,107,65,0,107,72,\n122,0,107,80,97,0,107,86,0,107,87,0,107,99,97,108,\n0,107,103,0,107,109,0,107,109,178,0,107,109,179,0,107,\n116,0,107,769,0,107,780,0,107,803,0,107,807,0,107,817,\n0,107,937,0,107,8467,0,108,0,108,106,0,108,109,0,108,\n110,0,108,111,103,0,108,120,0,108,183,0,108,769,0,108,\n780,0,108,803,0,108,807,0,108,813,0,108,817,0,109,0,\n109,65,0,109,86,0,109,87,0,109,98,0,109,103,0,109,\n105,108,0,109,109,0,109,109,178,0,109,109,179,0,109,111,\n108,0,109,115,0,109,178,0,109,179,0,109,769,0,109,775,\n0,109,803,0,109,8467,0,109,8725,115,0,109,8725,115,178,0,\n110,0,110,65,0,110,70,0,110,86,0,110,87,0,110,106,\n0,110,109,0,110,115,0,110,768,0,110,769,0,110,771,0,\n110,775,0,110,780,0,110,803,0,110,807,0,110,813,0,110,\n817,0,111,0,111,86,0,111,768,0,111,769,0,111,770,0,\n111,771,0,111,772,0,111,774,0,111,775,0,111,776,0,111,\n777,0,111,779,0,111,780,0,111,783,0,111,785,0,111,795,\n0,111,803,0,111,808,0,112,0,112,46,109,46,0,112,65,\n0,112,70,0,112,86,0,112,87,0,112,99,0,112,115,0,\n112,769,0,112,775,0,113,0,114,0,114,97,100,0,114,97,\n100,8725,115,0,114,97,100,8725,115,178,0,114,769,0,114,775,\n0,114,780,0,114,783,0,114,785,0,114,803,0,114,807,0,\n114,817,0,115,0,115,114,0,115,116,0,115,769,0,115,770,\n0,115,775,0,115,780,0,115,803,0,115,806,0,115,807,0,\n116,0,116,775,0,116,776,0,116,780,0,116,803,0,116,806,\n0,116,807,0,116,813,0,116,817,0,117,0,117,768,0,117,\n769,0,117,770,0,117,771,0,117,772,0,117,774,0,117,776,\n0,117,777,0,117,778,0,117,779,0,117,780,0,117,783,0,\n117,785,0,117,795,0,117,803,0,117,804,0,117,808,0,117,\n813,0,117,816,0,118,0,118,105,0,118,105,105,0,118,105,\n105,105,0,118,771,0,118,803,0,119,0,119,768,0,119,769,\n0,119,770,0,119,775,0,119,776,0,119,778,0,119,803,0,\n120,0,120,105,0,120,105,105,0,120,775,0,120,776,0,121,\n0,121,768,0,121,769,0,121,770,0,121,771,0,121,772,0,\n121,775,0,121,776,0,121,777,0,121,778,0,121,803,0,122,\n0,122,769,0,122,770,0,122,775,0,122,780,0,122,803,0,\n122,817,0,123,0,124,0,125,0,126,0,162,0,163,0,165,\n0,166,0,168,768,0,168,769,0,168,834,0,172,0,175,0,\n176,67,0,176,70,0,180,0,183,0,194,768,0,194,769,0,\n194,771,0,194,777,0,196,772,0,197,0,197,769,0,198,0,\n198,769,0,198,772,0,199,769,0,202,768,0,202,769,0,202,\n771,0,202,777,0,207,769,0,212,768,0,212,769,0,212,771,\n0,212,777,0,213,769,0,213,772,0,213,776,0,214,772,0,\n216,769,0,220,768,0,220,769,0,220,772,0,220,780,0,226,\n768,0,226,769,0,226,771,0,226,777,0,228,772,0,229,769,\n0,230,769,0,230,772,0,231,769,0,234,768,0,234,769,0,\n234,771,0,234,777,0,239,769,0,240,0,244,768,0,244,769,\n0,244,771,0,244,777,0,245,769,0,245,772,0,245,776,0,\n246,772,0,248,769,0,252,768,0,252,769,0,252,772,0,252,\n780,0,258,768,0,258,769,0,258,771,0,258,777,0,259,768,\n0,259,769,0,259,771,0,259,777,0,274,768,0,274,769,0,\n275,768,0,275,769,0,295,0,331,0,332,768,0,332,769,0,\n333,768,0,333,769,0,346,775,0,347,775,0,352,775,0,353,\n775,0,360,769,0,361,769,0,362,776,0,363,776,0,383,116,\n0,383,775,0,398,0,400,0,416,768,0,416,769,0,416,771,\n0,416,777,0,416,803,0,417,768,0,417,769,0,417,771,0,\n417,777,0,417,803,0,427,0,431,768,0,431,769,0,431,771,\n0,431,777,0,431,803,0,432,768,0,432,769,0,432,771,0,\n432,777,0,432,803,0,439,780,0,490,772,0,491,772,0,546,\n0,550,772,0,551,772,0,552,774,0,553,774,0,558,772,0,\n559,772,0,592,0,593,0,594,0,596,0,597,0,601,0,603,\n0,604,0,607,0,609,0,611,0,613,0,614,0,616,0,617,\n0,618,0,621,0,623,0,624,0,625,0,626,0,627,0,628,\n0,629,0,632,0,633,0,635,0,641,0,642,0,643,0,649,\n0,650,0,651,0,652,0,656,0,657,0,658,0,658,780,0,\n661,0,669,0,671,0,697,0,700,110,0,768,0,769,0,776,\n769,0,787,0,901,0,902,0,904,0,905,0,906,0,908,0,\n910,0,911,0,912,0,913,768,0,913,769,0,913,772,0,913,\n774,0,913,787,0,913,788,0,913,837,0,915,0,917,768,0,\n917,769,0,917,787,0,917,788,0,919,768,0,919,769,0,919,\n787,0,919,788,0,919,837,0,920,0,921,768,0,921,769,0,\n921,772,0,921,774,0,921,776,0,921,787,0,921,788,0,927,\n768,0,927,769,0,927,787,0,927,788,0,928,0,929,788,0,\n931,0,933,0,933,768,0,933,769,0,933,772,0,933,774,0,\n933,776,0,933,788,0,937,0,937,768,0,937,769,0,937,787,\n0,937,788,0,937,837,0,940,0,940,837,0,941,0,942,0,\n942,837,0,943,0,944,0,945,768,0,945,769,0,945,772,0,\n945,774,0,945,787,0,945,788,0,945,834,0,945,837,0,946,\n0,947,0,948,0,949,0,949,768,0,949,769,0,949,787,0,\n949,788,0,951,768,0,951,769,0,951,787,0,951,788,0,951,\n834,0,951,837,0,952,0,953,0,953,768,0,953,769,0,953,\n772,0,953,774,0,953,776,0,953,787,0,953,788,0,953,834,\n0,954,0,956,0,956,65,0,956,70,0,956,86,0,956,87,\n0,956,103,0,956,109,0,956,115,0,956,8467,0,959,768,0,\n959,769,0,959,787,0,959,788,0,960,0,961,0,961,787,0,\n961,788,0,962,0,965,768,0,965,769,0,965,772,0,965,774,\n0,965,776,0,965,787,0,965,788,0,965,834,0,966,0,967,\n0,969,768,0,969,769,0,969,787,0,969,788,0,969,834,0,\n969,837,0,970,768,0,970,769,0,970,834,0,971,768,0,971,\n769,0,971,834,0,972,0,973,0,974,0,974,837,0,978,769,\n0,978,776,0,1030,776,0,1040,774,0,1040,776,0,1043,769,0,\n1045,768,0,1045,774,0,1045,776,0,1046,774,0,1046,776,0,1047,\n776,0,1048,768,0,1048,772,0,1048,774,0,1048,776,0,1050,769,\n0,1054,776,0,1059,772,0,1059,774,0,1059,776,0,1059,779,0,\n1063,776,0,1067,776,0,1069,776,0,1072,774,0,1072,776,0,1075,\n769,0,1077,768,0,1077,774,0,1077,776,0,1078,774,0,1078,776,\n0,1079,776,0,1080,768,0,1080,772,0,1080,774,0,1080,776,0,\n1082,769,0,1085,0,1086,776,0,1091,772,0,1091,774,0,1091,776,\n0,1091,779,0,1095,776,0,1099,776,0,1101,776,0,1110,776,0,\n1140,783,0,1141,783,0,1240,776,0,1241,776,0,1256,776,0,1257,\n776,0,1381,1410,0,1396,1381,0,1396,1387,0,1396,1389,0,1396,1398,\n0,1406,1398,0,1488,0,1488,1463,0,1488,1464,0,1488,1468,0,1488,\n1500,0,1489,0,1489,1468,0,1489,1471,0,1490,0,1490,1468,0,1491,\n0,1491,1468,0,1492,0,1492,1468,0,1493,1465,0,1493,1468,0,1494,\n1468,0,1496,1468,0,1497,1460,0,1497,1468,0,1498,1468,0,1499,0,\n1499,1468,0,1499,1471,0,1500,0,1500,1468,0,1501,0,1502,1468,0,\n1504,1468,0,1505,1468,0,1506,0,1507,1468,0,1508,1468,0,1508,1471,\n0,1510,1468,0,1511,1468,0,1512,0,1512,1468,0,1513,1468,0,1513,\n1473,0,1513,1474,0,1514,0,1514,1468,0,1522,1463,0,1569,0,1570,\n0,1571,0,1572,0,1573,0,1574,0,1574,1575,0,1574,1580,0,1574,\n1581,0,1574,1582,0,1574,1585,0,1574,1586,0,1574,1605,0,1574,1606,\n0,1574,1607,0,1574,1608,0,1574,1609,0,1574,1610,0,1574,1734,0,\n1574,1735,0,1574,1736,0,1574,1744,0,1574,1749,0,1575,0,1575,1603,\n1576,1585,0,1575,1604,1604,1607,0,1575,1611,0,1575,1619,0,1575,1620,\n0,1575,1621,0,1575,1652,0,1576,0,1576,1580,0,1576,1581,0,1576,\n1581,1610,0,1576,1582,0,1576,1582,1610,0,1576,1585,0,1576,1586,0,\n1576,1605,0,1576,1606,0,1576,1607,0,1576,1609,0,1576,1610,0,1577,\n0,1578,0,1578,1580,0,1578,1580,1605,0,1578,1580,1609,0,1578,1580,\n1610,0,1578,1581,0,1578,1581,1580,0,1578,1581,1605,0,1578,1582,0,\n1578,1582,1605,0,1578,1582,1609,0,1578,1582,1610,0,1578,1585,0,1578,\n1586,0,1578,1605,0,1578,1605,1580,0,1578,1605,1581,0,1578,1605,1582,\n0,1578,1605,1609,0,1578,1605,1610,0,1578,1606,0,1578,1607,0,1578,\n1609,0,1578,1610,0,1579,0,1579,1580,0,1579,1585,0,1579,1586,0,\n1579,1605,0,1579,1606,0,1579,1607,0,1579,1609,0,1579,1610,0,1580,\n0,1580,1581,0,1580,1581,1609,0,1580,1581,1610,0,1580,1604,32,1580,\n1604,1575,1604,1607,0,1580,1605,0,1580,1605,1581,0,1580,1605,1609,0,\n1580,1605,1610,0,1580,1609,0,1580,1610,0,1581,0,1581,1580,0,1581,\n1580,1610,0,1581,1605,0,1581,1605,1609,0,1581,1605,1610,0,1581,1609,\n0,1581,1610,0,1582,0,1582,1580,0,1582,1581,0,1582,1605,0,1582,\n1609,0,1582,1610,0,1583,0,1584,0,1584,1648,0,1585,0,1585,1587,\n1608,1604,0,1585,1648,0,1585,1740,1575,1604,0,1586,0,1587,0,1587,\n1580,0,1587,1580,1581,0,1587,1580,1609,0,1587,1581,0,1587,1581,1580,\n0,1587,1582,0,1587,1582,1609,0,1587,1582,1610,0,1587,1585,0,1587,\n1605,0,1587,1605,1580,0,1587,1605,1581,0,1587,1605,1605,0,1587,1607,\n0,1587,1609,0,1587,1610,0,1588,0,1588,1580,0,1588,1580,1610,0,\n1588,1581,0,1588,1581,1605,0,1588,1581,1610,0,1588,1582,0,1588,1585,\n0,1588,1605,0,1588,1605,1582,0,1588,1605,1605,0,1588,1607,0,1588,\n1609,0,1588,1610,0,1589,0,1589,1581,0,1589,1581,1581,0,1589,1581,\n1610,0,1589,1582,0,1589,1585,0,1589,1604,1593,1605,0,1589,1604,1609,\n0,1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,\n1587,1604,1605,0,1589,1604,1746,0,1589,1605,0,1589,1605,1605,0,1589,\n1609,0,1589,1610,0,1590,0,1590,1580,0,1590,1581,0,1590,1581,1609,\n0,1590,1581,1610,0,1590,1582,0,1590,1582,1605,0,1590,1585,0,1590,\n1605,0,1590,1609,0,1590,1610,0,1591,0,1591,1581,0,1591,1605,0,\n1591,1605,1581,0,1591,1605,1605,0,1591,1605,1610,0,1591,1609,0,1591,\n1610,0,1592,0,1592,1605,0,1593,0,1593,1580,0,1593,1580,1605,0,\n1593,1604,1610,1607,0,1593,1605,0,1593,1605,1605,0,1593,1605,1609,0,\n1593,1605,1610,0,1593,1609,0,1593,1610,0,1594,0,1594,1580,0,1594,\n1605,0,1594,1605,1605,0,1594,1605,1609,0,1594,1605,1610,0,1594,1609,\n0,1594,1610,0,1600,1611,0,1600,1614,0,1600,1614,1617,0,1600,1615,\n0,1600,1615,1617,0,1600,1616,0,1600,1616,1617,0,1600,1617,0,1600,\n1618,0,1601,0,1601,1580,0,1601,1581,0,1601,1582,0,1601,1582,1605,\n0,1601,1605,0,1601,1605,1610,0,1601,1609,0,1601,1610,0,1602,0,\n1602,1581,0,1602,1604,1746,0,1602,1605,0,1602,1605,1581,0,1602,1605,\n1605,0,1602,1605,1610,0,1602,1609,0,1602,1610,0,1603,0,1603,1575,\n0,1603,1580,0,1603,1581,0,1603,1582,0,1603,1604,0,1603,1605,0,\n1603,1605,1605,0,1603,1605,1610,0,1603,1609,0,1603,1610,0,1604,0,\n1604,1570,0,1604,1571,0,1604,1573,0,1604,1575,0,1604,1580,0,1604,\n1580,1580,0,1604,1580,1605,0,1604,1580,1610,0,1604,1581,0,1604,1581,\n1605,0,1604,1581,1609,0,1604,1581,1610,0,1604,1582,0,1604,1582,1605,\n0,1604,1605,0,1604,1605,1581,0,1604,1605,1610,0,1604,1607,0,1604,\n1609,0,1604,1610,0,1605,0,1605,1575,0,1605,1580,0,1605,1580,1581,\n0,1605,1580,1582,0,1605,1580,1605,0,1605,1580,1610,0,1605,1581,0,\n1605,1581,1580,0,1605,1581,1605,0,1605,1581,1605,1583,0,1605,1581,1610,\n0,1605,1582,0,1605,1582,1580,0,1605,1582,1605,0,1605,1582,1610,0,\n1605,1605,0,1605,1605,1610,0,1605,1609,0,1605,1610,0,1606,0,1606,\n1580,0,1606,1580,1581,0,1606,1580,1605,0,1606,1580,1609,0,1606,1580,\n1610,0,1606,1581,0,1606,1581,1605,0,1606,1581,1609,0,1606,1581,1610,\n0,1606,1582,0,1606,1585,0,1606,1586,0,1606,1605,0,1606,1605,1609,\n0,1606,1605,1610,0,1606,1606,0,1606,1607,0,1606,1609,0,1606,1610,\n0,1607,0,1607,1580,0,1607,1605,0,1607,1605,1580,0,1607,1605,1605,\n0,1607,1609,0,1607,1610,0,1607,1648,0,1608,0,1608,1587,1604,1605,\n0,1608,1620,0,1608,1652,0,1609,0,1609,1648,0,1610,0,1610,1580,\n0,1610,1580,1610,0,1610,1581,0,1610,1581,1610,0,1610,1582,0,1610,\n1585,0,1610,1586,0,1610,1605,0,1610,1605,1605,0,1610,1605,1610,0,\n1610,1606,0,1610,1607,0,1610,1609,0,1610,1610,0,1610,1620,0,1610,\n1652,0,1649,0,1655,0,1657,0,1658,0,1659,0,1662,0,1663,0,\n1664,0,1667,0,1668,0,1670,0,1671,0,1672,0,1676,0,1677,0,\n1678,0,1681,0,1688,0,1700,0,1702,0,1705,0,1709,0,1711,0,\n1713,0,1715,0,1722,0,1723,0,1726,0,1728,0,1729,0,1729,1620,\n0,1733,0,1734,0,1735,0,1735,1652,0,1736,0,1737,0,1739,0,\n1740,0,1744,0,1746,0,1746,1620,0,1747,0,1749,1620,0,2325,2364,\n0,2326,2364,0,2327,2364,0,2332,2364,0,2337,2364,0,2338,2364,0,\n2344,2364,0,2347,2364,0,2351,2364,0,2352,2364,0,2355,2364,0,2465,\n2492,0,2466,2492,0,2479,2492,0,2503,2494,0,2503,2519,0,2582,2620,\n0,2583,2620,0,2588,2620,0,2603,2620,0,2610,2620,0,2616,2620,0,\n2849,2876,0,2850,2876,0,2887,2878,0,2887,2902,0,2887,2903,0,2962,\n3031,0,3014,3006,0,3014,3031,0,3015,3006,0,3142,3158,0,3263,3285,\n0,3270,3266,0,3270,3285,0,3270,3286,0,3274,3285,0,3398,3390,0,\n3398,3415,0,3399,3390,0,3545,3530,0,3545,3535,0,3545,3551,0,3548,\n3530,0,3661,3634,0,3755,3737,0,3755,3745,0,3789,3762,0,3851,0,\n3904,4021,0,3906,4023,0,3916,4023,0,3921,4023,0,3926,4023,0,3931,\n4023,0,3953,3954,0,3953,3956,0,3953,3968,0,3984,4021,0,3986,4023,\n0,3996,4023,0,4001,4023,0,4006,4023,0,4011,4023,0,4018,3968,0,\n4018,3969,0,4019,3968,0,4019,3969,0,4133,4142,0,4316,0,4352,0,\n4352,4449,0,4353,0,4354,0,4354,4449,0,4355,0,4355,4449,0,4356,\n0,4357,0,4357,4449,0,4358,0,4358,4449,0,4359,0,4359,4449,0,\n4360,0,4361,0,4361,4449,0,4362,0,4363,0,4363,4449,0,4363,4462,\n0,4364,0,4364,4449,0,4364,4462,4363,4468,0,4365,0,4366,0,4366,\n4449,0,4366,4449,4535,4352,4457,0,4367,0,4367,4449,0,4368,0,4368,\n4449,0,4369,0,4369,4449,0,4370,0,4370,4449,0,4372,0,4373,0,\n4378,0,4380,0,4381,0,4382,0,4384,0,4385,0,4386,0,4387,0,\n4391,0,4393,0,4395,0,4396,0,4397,0,4398,0,4399,0,4402,0,\n4406,0,4416,0,4423,0,4428,0,4439,0,4440,0,4441,0,4448,0,\n4449,0,4450,0,4451,0,4452,0,4453,0,4454,0,4455,0,4456,0,\n4457,0,4458,0,4459,0,4460,0,4461,0,4462,0,4463,0,4464,0,\n4465,0,4466,0,4467,0,4468,0,4469,0,4484,0,4485,0,4488,0,\n4497,0,4498,0,4500,0,4510,0,4513,0,4522,0,4524,0,4525,0,\n4528,0,4529,0,4530,0,4531,0,4532,0,4533,0,4551,0,4552,0,\n4556,0,4558,0,4563,0,4567,0,4569,0,4573,0,4575,0,4593,0,\n4594,0,6917,6965,0,6919,6965,0,6921,6965,0,6923,6965,0,6925,6965,\n0,6929,6965,0,6970,6965,0,6972,6965,0,6974,6965,0,6975,6965,0,\n6978,6965,0,7426,0,7446,0,7447,0,7452,0,7453,0,7461,0,7547,\n0,7557,0,7734,772,0,7735,772,0,7770,772,0,7771,772,0,7778,\n775,0,7779,775,0,7840,770,0,7840,774,0,7841,770,0,7841,774,\n0,7864,770,0,7865,770,0,7884,770,0,7885,770,0,7936,768,0,\n7936,769,0,7936,834,0,7936,837,0,7937,768,0,7937,769,0,7937,\n834,0,7937,837,0,7938,837,0,7939,837,0,7940,837,0,7941,837,\n0,7942,837,0,7943,837,0,7944,768,0,7944,769,0,7944,834,0,\n7944,837,0,7945,768,0,7945,769,0,7945,834,0,7945,837,0,7946,\n837,0,7947,837,0,7948,837,0,7949,837,0,7950,837,0,7951,837,\n0,7952,768,0,7952,769,0,7953,768,0,7953,769,0,7960,768,0,\n7960,769,0,7961,768,0,7961,769,0,7968,768,0,7968,769,0,7968,\n834,0,7968,837,0,7969,768,0,7969,769,0,7969,834,0,7969,837,\n0,7970,837,0,7971,837,0,7972,837,0,7973,837,0,7974,837,0,\n7975,837,0,7976,768,0,7976,769,0,7976,834,0,7976,837,0,7977,\n768,0,7977,769,0,7977,834,0,7977,837,0,7978,837,0,7979,837,\n0,7980,837,0,7981,837,0,7982,837,0,7983,837,0,7984,768,0,\n7984,769,0,7984,834,0,7985,768,0,7985,769,0,7985,834,0,7992,\n768,0,7992,769,0,7992,834,0,7993,768,0,7993,769,0,7993,834,\n0,8000,768,0,8000,769,0,8001,768,0,8001,769,0,8008,768,0,\n8008,769,0,8009,768,0,8009,769,0,8016,768,0,8016,769,0,8016,\n834,0,8017,768,0,8017,769,0,8017,834,0,8025,768,0,8025,769,\n0,8025,834,0,8032,768,0,8032,769,0,8032,834,0,8032,837,0,\n8033,768,0,8033,769,0,8033,834,0,8033,837,0,8034,837,0,8035,\n837,0,8036,837,0,8037,837,0,8038,837,0,8039,837,0,8040,768,\n0,8040,769,0,8040,834,0,8040,837,0,8041,768,0,8041,769,0,\n8041,834,0,8041,837,0,8042,837,0,8043,837,0,8044,837,0,8045,\n837,0,8046,837,0,8047,837,0,8048,837,0,8052,837,0,8060,837,\n0,8118,837,0,8127,768,0,8127,769,0,8127,834,0,8134,837,0,\n8182,837,0,8190,768,0,8190,769,0,8190,834,0,8194,0,8195,0,\n8208,0,8211,0,8212,0,8229,0,8230,0,8242,8242,0,8242,8242,8242,\n0,8242,8242,8242,8242,0,8245,8245,0,8245,8245,8245,0,8254,0,8361,\n0,8592,0,8592,824,0,8593,0,8594,0,8594,824,0,8595,0,8596,\n824,0,8656,824,0,8658,824,0,8660,824,0,8707,824,0,8712,824,\n0,8715,824,0,8721,0,8722,0,8739,824,0,8741,824,0,8747,8747,\n0,8747,8747,8747,0,8747,8747,8747,8747,0,8750,8750,0,8750,8750,8750,\n0,8764,824,0,8771,824,0,8773,824,0,8776,824,0,8781,824,0,\n8801,824,0,8804,824,0,8805,824,0,8818,824,0,8819,824,0,8822,\n824,0,8823,824,0,8826,824,0,8827,824,0,8828,824,0,8829,824,\n0,8834,824,0,8835,824,0,8838,824,0,8839,824,0,8849,824,0,\n8850,824,0,8866,824,0,8872,824,0,8873,824,0,8875,824,0,8882,\n824,0,8883,824,0,8884,824,0,8885,824,0,9474,0,9632,0,9675,\n0,10629,0,10630,0,10973,824,0,11617,0,12289,0,12290,0,12296,0,\n12297,0,12298,0,12299,0,12300,0,12301,0,12302,0,12303,0,12304,0,\n12305,0,12306,0,12308,0,12309,0,12310,0,12311,0,12358,12441,0,12363,\n12441,0,12365,12441,0,12367,12441,0,12369,12441,0,12371,12441,0,12373,12441,\n0,12375,12441,0,12377,12441,0,12379,12441,0,12381,12441,0,12383,12441,0,\n12385,12441,0,12388,12441,0,12390,12441,0,12392,12441,0,12399,12441,0,12399,\n12442,0,12402,12441,0,12402,12442,0,12405,12441,0,12405,12442,0,12408,12441,\n0,12408,12442,0,12411,12441,0,12411,12442,0,12424,12426,0,12441,0,12442,\n0,12445,12441,0,12449,0,12450,0,12450,12497,12540,12488,0,12450,12523,12501,\n12449,0,12450,12531,12506,12450,0,12450,12540,12523,0,12451,0,12452,0,12452,\n12491,12531,12464,0,12452,12531,12481,0,12453,0,12454,0,12454,12441,0,12454,\n12457,12531,0,12455,0,12456,0,12456,12473,12463,12540,12489,0,12456,12540,12459,\n12540,0,12457,0,12458,0,12458,12531,12473,0,12458,12540,12512,0,12459,0,\n12459,12441,0,12459,12452,12522,0,12459,12521,12483,12488,0,12459,12525,12522,12540,\n0,12460,12525,12531,0,12460,12531,12510,0,12461,0,12461,12441,0,12461,12517,\n12522,12540,0,12461,12525,0,12461,12525,12464,12521,12512,0,12461,12525,12513,12540,\n12488,12523,0,12461,12525,12527,12483,12488,0,12462,12460,0,12462,12491,12540,0,\n12462,12523,12480,12540,0,12463,0,12463,12441,0,12463,12523,12476,12452,12525,0,\n12463,12525,12540,12493,0,12464,12521,12512,0,12464,12521,12512,12488,12531,0,12465,\n0,12465,12441,0,12465,12540,12473,0,12467,0,12467,12441,0,12467,12488,0,\n12467,12523,12490,0,12467,12540,12509,0,12469,0,12469,12441,0,12469,12452,12463,\n12523,0,12469,12531,12481,12540,12512,0,12471,0,12471,12441,0,12471,12522,12531,\n12464,0,12473,0,12473,12441,0,12475,0,12475,12441,0,12475,12531,12481,0,\n12475,12531,12488,0,12477,0,12477,12441,0,12479,0,12479,12441,0,12480,12540,\n12473,0,12481,0,12481,12441,0,12483,0,12484,0,12484,12441,0,12486,0,\n12486,12441,0,12487,12471,0,12488,0,12488,12441,0,12488,12531,0,12489,12523,\n0,12490,0,12490,12494,0,12491,0,12492,0,12493,0,12494,0,12494,12483,\n12488,0,12495,0,12495,12441,0,12495,12442,0,12495,12452,12484,0,12496,12540,\n12524,12523,0,12497,12540,12475,12531,12488,0,12497,12540,12484,0,12498,0,12498,\n12441,0,12498,12442,0,12499,12523,0,12500,12450,12473,12488,12523,0,12500,12463,\n12523,0,12500,12467,0,12501,0,12501,12441,0,12501,12442,0,12501,12449,12521,\n12483,12489,0,12501,12451,12540,12488,0,12501,12521,12531,0,12502,12483,12471,12455,\n12523,0,12504,0,12504,12441,0,12504,12442,0,12504,12463,12479,12540,12523,0,\n12504,12523,12484,0,12505,12540,12479,0,12506,12477,0,12506,12491,12498,0,12506,\n12531,12473,0,12506,12540,12472,0,12507,0,12507,12441,0,12507,12442,0,12507,\n12531,0,12507,12540,12523,0,12507,12540,12531,0,12508,12523,12488,0,12509,12452,\n12531,12488,0,12509,12531,12489,0,12510,0,12510,12452,12463,12525,0,12510,12452,\n12523,0,12510,12483,12495,0,12510,12523,12463,0,12510,12531,12471,12519,12531,0,\n12511,0,12511,12463,12525,12531,0,12511,12522,0,12511,12522,12496,12540,12523,0,\n12512,0,12513,0,12513,12460,0,12513,12460,12488,12531,0,12513,12540,12488,12523,\n0,12514,0,12515,0,12516,0,12516,12540,12489,0,12516,12540,12523,0,12517,\n0,12518,0,12518,12450,12531,0,12519,0,12520,0,12521,0,12522,0,12522,\n12483,12488,12523,0,12522,12521,0,12523,0,12523,12500,12540,0,12523,12540,12502,\n12523,0,12524,0,12524,12512,0,12524,12531,12488,12466,12531,0,12525,0,12527,\n0,12527,12441,0,12527,12483,12488,0,12528,0,12528,12441,0,12529,0,12529,\n12441,0,12530,0,12530,12441,0,12531,0,12539,0,12540,0,12541,12441,0,\n12593,0,12594,0,12595,0,12596,0,12597,0,12598,0,12599,0,12600,0,\n12601,0,12602,0,12603,0,12604,0,12605,0,12606,0,12607,0,12608,0,\n12609,0,12610,0,12611,0,12612,0,12613,0,12614,0,12615,0,12616,0,\n12617,0,12618,0,12619,0,12620,0,12621,0,12622,0,12623,0,12624,0,\n12625,0,12626,0,12627,0,12628,0,12629,0,12630,0,12631,0,12632,0,\n12633,0,12634,0,12635,0,12636,0,12637,0,12638,0,12639,0,12640,0,\n12641,0,12642,0,12643,0,12644,0,15261,0,16408,0,16441,0,19968,0,\n19969,0,19971,0,19977,0,19978,0,19979,0,19981,0,19993,0,20006,0,\n20008,0,20013,0,20018,0,20022,0,20025,0,20031,0,20057,0,20061,0,\n20098,0,20101,0,20102,0,20108,0,20116,0,20128,0,20142,0,20154,0,\n20160,0,20196,0,20225,0,20241,0,20352,0,20358,0,20363,0,20398,0,\n20415,0,20523,0,20698,0,20711,0,20778,0,20799,0,20800,0,20805,0,\n20813,0,20837,0,20840,0,20841,0,20843,0,20845,0,20864,0,20866,0,\n20886,0,20889,0,20907,0,20917,0,20919,0,20937,0,20940,0,20956,0,\n20958,0,20960,0,20981,0,20992,0,20999,0,21015,0,21033,0,21050,0,\n21129,0,21147,0,21155,0,21172,0,21191,0,21193,0,21202,0,21214,0,\n21220,0,21237,0,21241,0,21242,0,21269,0,21271,0,21274,0,21304,0,\n21307,0,21311,0,21313,0,21316,0,21317,0,21329,0,21332,0,21340,0,\n21353,0,21360,0,21365,0,21378,0,21430,0,21443,0,21448,0,21475,0,\n21477,0,21491,0,21517,0,21519,0,21533,0,21570,0,21693,0,21845,0,\n21895,0,21913,0,21917,0,21952,0,21986,0,22022,0,22120,0,22231,0,\n22235,0,22265,0,22303,0,22320,0,22592,0,22618,0,22622,0,22696,0,\n22707,0,22744,0,22751,0,22763,0,22786,0,22794,0,22805,0,22812,0,\n22823,0,22823,27491,0,22825,0,22852,0,22856,0,22865,0,22868,0,22899,\n0,23138,0,23336,0,23376,0,23398,0,23424,0,23429,0,23447,0,23527,\n0,23534,0,23544,0,23567,0,23586,0,23608,0,23615,0,23650,0,23652,\n0,23653,0,23662,0,23665,0,23833,0,23888,0,23994,0,24027,0,24037,\n0,24038,0,24049,0,24062,0,24178,0,24179,25104,0,24180,0,24186,0,\n24191,0,24230,0,24265,0,24266,0,24274,0,24275,0,24281,0,24300,0,\n24308,0,24318,0,24324,0,24331,0,24339,0,24400,0,24417,0,24425,0,\n24435,0,24459,0,24489,0,24493,0,24515,0,24565,0,24594,0,24604,0,\n24724,0,24792,0,24801,0,24840,0,24900,0,24910,0,24928,0,24936,0,\n24974,0,24976,0,25074,0,25078,0,25088,0,25096,0,25134,0,25140,0,\n25142,0,25163,0,25289,0,25295,0,25299,0,25342,0,25467,0,25504,0,\n25540,0,25628,0,25682,0,25754,0,25796,0,25903,0,25908,0,25935,0,\n25942,0,25976,0,25991,0,26007,0,26009,0,26020,0,26041,0,26053,0,\n26080,0,26082,0,26085,0,26126,27835,0,26131,0,26157,21644,0,26228,0,\n26248,0,26257,0,26292,0,26310,0,26352,0,26356,0,26376,0,26377,0,\n26391,0,26395,0,26408,0,26446,0,26454,0,26491,0,26519,0,26611,0,\n26647,0,26666,0,26666,24335,20250,31038,0,26753,0,26757,0,26792,0,27138,\n0,27155,0,27347,0,27396,0,27424,0,27490,0,27491,0,27511,0,27513,\n0,27566,0,27571,0,27578,0,27595,0,27597,0,27604,0,27611,0,27663,\n0,27668,0,27700,0,27784,0,27852,0,27877,0,27880,0,27931,0,27934,\n0,27969,0,28010,0,28023,0,28107,0,28122,0,28138,0,28186,0,28316,\n0,28346,0,28363,0,28369,0,28379,0,28431,0,28450,0,28451,0,28651,\n0,28670,0,28702,0,28779,0,28825,0,28872,0,28889,0,29001,0,29038,\n0,29134,0,29136,0,29200,0,29211,0,29226,0,29227,0,29237,0,29238,\n0,29243,0,29247,0,29255,0,29273,0,29275,0,29282,0,29305,0,29356,\n0,29359,0,29376,0,29436,0,29482,0,29557,0,29572,0,29575,0,29577,\n0,29618,0,29662,0,29702,0,29705,0,29730,0,29801,0,29809,0,29833,\n0,29848,0,29916,0,29926,0,29958,0,29976,0,29983,0,29992,0,30000,\n0,30002,0,30007,0,30011,0,30041,0,30053,0,30064,0,30091,0,30098,\n0,30178,0,30237,0,30239,0,30274,0,30313,0,30326,0,30333,0,30382,\n0,30399,0,30410,0,30427,0,30435,0,30439,0,30446,0,30452,0,30465,\n0,30528,0,30538,0,30631,0,30683,0,30690,0,30707,0,30827,0,30860,\n0,30865,0,30922,0,30924,0,30971,0,31018,0,31034,0,31036,0,31038,\n0,31048,0,31049,0,31056,0,31062,0,31069,0,31070,0,31077,0,31103,\n0,31117,0,31118,0,31119,0,31150,0,31160,0,31166,0,31178,0,31192,\n0,31260,0,31296,0,31348,0,31361,0,31409,0,31435,0,31481,0,31520,\n0,31680,0,31806,0,31840,0,31859,0,31867,0,31890,0,31934,0,31958,\n0,31975,0,31992,0,32016,0,32034,0,32047,0,32091,0,32160,0,32190,\n0,32244,0,32265,0,32311,0,32321,0,32566,0,32574,0,32593,0,32626,\n0,32633,0,32645,0,32650,0,32666,0,32701,0,32769,0,32773,0,32780,\n0,32786,0,32819,0,32838,0,32879,0,32894,0,32895,0,32905,0,32907,\n0,33240,0,33251,0,33256,0,33258,0,33261,0,33267,0,33276,0,33292,\n0,33307,0,33311,0,33390,0,33391,0,33394,0,33400,0,33401,0,33509,\n0,33590,0,33618,0,33737,0,33775,0,33777,0,33853,0,33865,0,33879,\n0,34030,0,34044,0,34253,0,34298,0,34310,0,34322,0,34349,0,34367,\n0,34381,0,34396,0,34411,0,34681,0,34746,0,34847,0,34880,0,34892,\n0,34915,0,35010,0,35023,0,35041,0,35064,0,35088,0,35137,0,35172,\n0,35198,0,35206,0,35211,0,35222,0,35282,0,35328,0,35498,0,35519,\n0,35531,0,35538,0,35542,0,35565,0,35576,0,35582,0,35585,0,35641,\n0,35672,0,35712,0,35722,0,35895,0,35910,0,35912,0,35925,0,35960,\n0,35997,0,36001,0,36034,0,36039,0,36040,0,36051,0,36104,0,36196,\n0,36208,0,36275,0,36335,0,36523,0,36554,0,36646,0,36650,0,36664,\n0,36667,0,36706,0,36763,0,36784,0,36789,0,36790,0,36899,0,36920,\n0,36969,0,36978,0,36988,0,37007,0,37009,0,37070,0,37117,0,37193,\n0,37226,0,37273,0,37300,0,37318,0,37324,0,37327,0,37329,0,37428,\n0,37494,0,37636,0,37706,0,38263,0,38272,0,38317,0,38428,0,38446,\n0,38475,0,38477,0,38517,0,38520,0,38524,0,38534,0,38563,0,38582,\n0,38584,0,38585,0,38626,0,38627,0,38632,0,38646,0,38647,0,38706,\n0,38728,0,38737,0,38742,0,38750,0,38754,0,38761,0,38859,0,38875,\n0,38893,0,38899,0,38911,0,38913,0,38917,0,38923,0,38936,0,38971,\n0,39006,0,39080,0,39131,0,39135,0,39151,0,39164,0,39208,0,39318,\n0,39321,0,39340,0,39409,0,39530,0,39592,0,39640,0,39647,0,39698,\n0,39717,0,39727,0,39730,0,39740,0,39770,0,39791,0,40023,0,40165,\n0,40372,0,40442,0,40478,0,40565,0,40575,0,40599,0,40607,0,40613,\n0,40635,0,40643,0,40653,0,40654,0,40657,0,40697,0,40701,0,40718,\n0,40723,0,40736,0,40763,0,40771,0,40778,0,40786,0,40845,0,40846,\n0,40860,0,40863,0,40864,0,42863,0,64329,1473,0,64329,1474,0,141380,\n0,141386,0,144341,0,152137,0,154832,0,163539,0,0};\nstatic const guint16 charMapIndex [] = {\n8599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1,0,0,0,0,0,0,0,21,0,2004,0,0,0,0,9,\n0,0,841,957,3,3699,0,0,36,638,2610,0,816,808,1000,0,\n1199,1202,1205,1208,1220,1226,0,1283,1325,1328,1331,1346,1475,1478,1481,1496,\n0,1632,1655,1658,1661,1664,1676,0,0,1824,1827,1830,1842,1948,0,0,\n2022,2025,2028,2031,2043,2049,0,2128,2186,2189,2192,2207,2343,2346,2349,2361,\n0,2589,2615,2618,2621,2624,2636,0,0,2796,2799,2802,2814,2916,0,2931,\n1211,2034,1214,2037,1244,2067,1271,2116,1274,2119,1277,2122,1280,2125,1308,2159,\n0,0,1337,2198,1340,2201,1343,2204,1367,2228,1352,2213,1404,2271,1410,2277,\n1413,2280,1419,2286,1433,2298,0,0,1484,2352,1487,2355,1490,2358,1514,2379,\n1493,0,1463,2331,1522,2387,1545,2443,0,1566,2476,1575,2485,1569,2479,1563,\n2473,0,0,1629,2586,1644,2601,1638,2595,3432,0,0,1667,2627,1670,2630,\n1682,2642,0,0,1735,2715,1753,2733,1741,2721,1767,2747,1770,2750,1785,2765,\n1776,2756,1813,2785,1804,2776,0,0,1833,2805,1836,2808,1839,2811,1848,2820,\n1851,2823,1872,2844,1916,2881,1951,2919,1963,1974,2945,1980,2951,1983,2954,2739,\n0,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,\n1694,2654,0,0,0,0,0,0,0,0,0,0,0,0,0,1863,\n2835,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1299,1302,2153,1553,1560,2457,1617,1620,2574,1229,2052,1502,\n2367,1685,2645,1854,2826,3081,3164,3078,3161,3084,3167,3075,3158,0,3014,3099,\n3329,3332,3027,3108,0,0,1416,2283,1539,2437,1700,2660,3321,3324,3318,3421,\n2390,1293,1296,2150,1401,2268,0,0,1626,2583,3019,3102,3024,3105,3072,3155,\n1232,2055,1235,2058,1355,2216,1358,2219,1505,2370,1508,2373,1688,2648,1691,2651,\n1744,2724,1747,2727,1857,2829,1860,2832,1782,2762,1810,2782,0,0,1442,2307,\n0,0,0,0,0,0,1217,2040,1364,2225,3069,3152,3063,3146,1673,2633,\n3341,3344,1957,2925,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,\n0,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,\n0,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,\n0,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,\n2289,3371,2385,2696,3397,3399,3401,2873,2911,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,15,18,24,39,6,27,0,0,\n3367,2455,2739,2896,3424,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,\n0,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,\n0,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,\n3435,3437,0,3442,3439,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,3430,0,0,0,0,0,48,0,0,0,1160,0,\n0,0,0,0,3,2982,3465,3000,3488,3500,3517,0,3538,0,3559,3579,\n3798,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,3526,3568,3610,3642,3654,3676,\n3807,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,3685,3761,3728,3752,3780,0,\n3631,3669,3554,3822,3825,3773,3737,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,\n3697,3739,3747,0,3512,3637,0,0,0,3552,0,0,0,0,0,0,\n3840,3846,0,3837,0,0,0,3828,0,0,0,0,3870,3858,3879,0,\n0,0,0,0,0,0,0,0,0,3864,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,3930,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n3906,3912,0,3903,0,0,0,3965,0,0,0,0,3936,3924,3947,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,3968,3971,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,3849,3915,0,0,0,0,0,0,0,0,0,0,0,0,0,\n3831,3897,3834,3900,0,0,3843,3909,0,0,3974,3977,3852,3918,3855,3921,\n0,0,3861,3927,3867,3933,3873,3941,0,0,3980,3983,3894,3962,3876,3944,\n3882,3950,3885,3953,3888,3956,0,0,3891,3959,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,3986,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,4203,4206,5137,4209,5196,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,4212,5140,5271,5199,0,0,0,0,0,0,0,\n0,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,\n0,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,\n5291,0,5262,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5286,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,5312,0,0,0,0,0,0,\n0,5321,0,0,5324,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,\n0,0,0,0,0,0,0,0,5294,5297,5300,5303,5306,5309,5315,5318,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,5336,5339,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5327,5330,0,5333,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5354,0,0,5357,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,\n0,0,0,0,0,0,0,0,0,5342,5345,5348,0,0,5351,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,5369,0,0,5366,5372,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5360,5363,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,5375,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,\n0,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,5378,5384,5381,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,5387,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n5390,0,0,0,0,0,0,5396,5399,0,5393,5402,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,5405,5411,5408,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,5414,0,5417,5423,5420,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5426,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,\n0,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,\n0,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,\n0,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,\n0,0,0,5435,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,\n0,0,0,0,0,0,0,0,0,0,0,0,5429,5432,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,5438,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5443,0,0,0,0,0,0,0,0,0,5446,0,0,\n0,0,5449,0,0,0,0,5452,0,0,0,0,5455,0,0,0,\n0,0,0,0,0,0,0,0,0,5440,0,0,0,0,0,0,\n0,0,0,5458,0,5461,5485,5488,5491,5494,0,0,0,0,0,0,\n0,5464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5470,0,0,0,0,0,0,0,0,0,5473,0,0,\n0,0,5476,0,0,0,0,5479,0,0,0,0,5482,0,0,0,\n0,0,0,0,0,0,0,0,0,5467,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,5497,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,5500,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,1194,3022,1251,0,\n1291,1323,3252,1385,1422,1454,1520,1525,1551,1584,1615,0,1653,3327,1703,1730,\n1788,1822,1905,2004,3347,3349,5779,2070,2131,2177,3357,3359,3361,2262,0,2393,\n2494,3208,2610,3353,5781,5783,2663,2768,2794,5787,3381,2853,5789,3631,3633,3635,\n3773,3775,2322,2696,2794,2853,3631,3633,3739,3773,3775,0,0,0,0,0,\n0,0,0,0,0,0,0,0,3939,0,0,0,0,0,0,0,\n0,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,3351,2085,3355,3129,3361,\n2237,3363,3365,3369,3373,3375,3377,5791,3426,3379,5793,3428,3385,3383,3387,3389,\n3391,3393,3395,3403,3405,3286,3407,3409,5785,3411,3413,2943,3415,3417,3419,3669,\n0,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,\n0,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,\n1241,2064,1256,2076,1259,2079,1262,2082,3030,3111,1305,2156,1311,2162,1320,2171,\n1314,2165,1317,2168,3194,3200,3197,3203,1370,2231,1373,2234,3335,3338,1382,2259,\n1407,2274,1436,2301,1445,2310,1439,2304,1448,2313,1451,2316,1517,2382,3045,3126,\n1536,2434,1542,2440,1548,2446,1572,2482,5795,5798,1581,2491,1578,2488,1603,2539,\n1606,2542,1609,2545,1635,2592,1641,2598,1650,2607,1647,2604,3060,3143,3066,3149,\n3210,3216,3213,3219,1722,2688,1725,2691,1738,2718,1750,2730,5801,5804,1756,2736,\n1773,2753,1779,2759,3222,3225,3228,3231,5807,5810,1801,2770,1807,2779,1819,2791,\n1816,2788,1869,2841,1878,2850,1875,2847,3234,3237,3240,3243,1895,2867,1898,2870,\n1910,2875,1913,2878,1922,2887,1919,2884,1925,2893,1937,2905,1940,2908,1960,2928,\n1977,2948,1986,2957,1989,2960,2319,2773,2890,2937,2019,3249,0,0,0,0,\n1238,2061,1223,2046,3005,3090,3002,3087,3011,3096,3008,3093,5813,5819,3173,3185,\n3170,3182,3179,3191,3176,3188,5816,5822,1361,2222,1349,2210,1334,2195,3036,3117,\n3033,3114,3042,3123,3039,3120,5825,5828,1499,2364,1511,2376,1697,2657,1679,2639,\n3051,3134,3048,3131,3057,3140,3054,3137,5831,5834,3259,3274,3256,3271,3265,3280,\n3262,3277,3268,3283,1866,2838,1845,2817,3291,3306,3288,3303,3297,3312,3294,3309,\n3300,3315,1945,2913,1969,2940,1966,2934,1954,2922,0,0,0,0,0,0,\n3619,3622,5837,5849,5840,5852,5843,5855,3474,3477,5879,5891,5882,5894,5885,5897,\n3645,3648,5921,5927,5924,5930,0,0,3491,3494,5933,5939,5936,5942,0,0,\n3657,3660,5945,5957,5948,5960,5951,5963,3503,3506,5987,5999,5990,6002,5993,6005,\n3688,3691,6029,6038,6032,6041,6035,6044,3529,3532,6047,6056,6050,6059,6053,6062,\n3731,3734,6065,6071,6068,6074,0,0,3541,3544,6077,6083,6080,6086,0,0,\n3764,3767,6089,6098,6092,6101,6095,6104,0,3571,0,6107,0,6110,0,6113,\n3783,3786,6116,6128,6119,6131,6122,6134,3582,3585,6158,6170,6161,6173,6164,6176,\n3607,3591,3639,3596,3651,3598,3673,3603,3725,3813,3749,3815,3777,3817,0,0,\n5846,5858,5861,5864,5867,5870,5873,5876,5888,5900,5903,5906,5909,5912,5915,5918,\n5954,5966,5969,5972,5975,5978,5981,5984,5996,6008,6011,6014,6017,6020,6023,6026,\n6125,6137,6140,6143,6146,6149,6152,6155,6167,6179,6182,6185,6188,6191,6194,6197,\n3616,3613,6200,3628,3593,0,3625,6209,3471,3468,3462,3446,3480,30,3671,30,\n45,2985,6203,3666,3600,0,3663,6221,3485,3448,3497,3450,3509,6212,6215,6218,\n3682,3679,3795,3460,0,0,3694,3801,3523,3520,3514,3452,0,6227,6230,6233,\n3758,3755,3804,3605,3741,3744,3770,3810,3565,3562,3556,3456,3549,2979,3444,2002,\n0,0,6206,3792,3819,0,3789,6224,3535,3454,3576,3458,3588,2998,33,0,\n6236,6238,1,1,1,1,1,1,1,1,1,0,0,0,0,0,\n0,6240,0,0,0,0,0,42,0,0,0,0,0,0,0,0,\n0,0,0,0,622,624,627,0,0,0,0,0,0,0,0,1,\n0,0,0,6250,6253,0,6262,6265,0,0,0,0,107,0,12,0,\n0,0,0,0,0,0,0,1189,1186,110,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6257,0,0,0,0,0,0,0,1,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n633,2322,0,0,1021,1069,1094,1108,1126,1140,616,6310,1167,125,612,2560,\n633,638,841,957,1021,1069,1094,1108,1126,1140,616,6310,1167,125,612,0,\n2004,2177,2610,2896,3357,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1732,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n2011,2015,1265,2992,0,2087,2091,3254,0,2995,2262,1422,1422,1422,2289,3206,\n1454,1454,1551,2455,0,1615,1623,0,0,1703,1728,1730,1730,1730,0,0,\n1761,1790,1798,0,1972,0,3574,0,1972,0,1525,3017,1251,1265,0,2177,\n1323,1376,0,1584,2610,4004,4018,4026,4031,2322,0,1378,3737,3633,3483,3547,\n6308,0,0,0,0,1291,2131,2177,2322,2385,0,0,0,0,0,0,\n0,0,0,812,940,820,944,1004,1056,824,1077,828,1008,1081,1113,805,\n1454,1456,1459,1469,1881,1883,1886,1890,1472,1928,1930,1933,1551,1265,1291,1584,\n2322,2324,2327,2337,2853,2855,2858,2862,2340,2896,2898,2901,2455,2085,2131,2494,\n0,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,6275,6282,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,6287,0,\n0,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,6290,6296,6293,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6299,0,0,0,0,6302,0,0,6305,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6312,0,6315,0,0,0,0,0,6318,6321,0,6330,\n6333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6337,0,0,6340,0,0,6343,0,6346,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1176,0,6352,0,0,0,0,0,0,0,0,0,0,6349,1164,1181,\n6355,6358,0,0,6361,6364,0,0,6367,6370,0,0,0,0,0,0,\n6373,6376,0,0,6385,6388,0,0,6391,6394,0,0,0,0,0,0,\n0,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,6403,6406,6409,6412,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6379,6382,6397,6400,0,0,0,0,0,0,6415,6418,6421,6424,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,6446,6448,0,0,0,0,0,\n638,841,957,1021,1069,1094,1108,1126,1140,643,662,681,700,715,730,745,\n760,775,790,846,127,181,190,194,198,202,206,210,214,131,136,141,\n146,151,156,161,166,171,176,185,640,843,959,1023,1071,1096,1110,1128,\n1142,646,665,684,703,718,733,748,763,778,793,849,218,222,226,230,\n234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294,\n298,302,306,310,314,318,1194,1251,1265,1291,1323,1376,1385,1422,1454,1520,\n1525,1551,1584,1615,1653,1703,1728,1730,1759,1788,1822,1881,1905,1928,1943,1972,\n2004,2070,2085,2131,2177,2237,2262,2289,2322,2385,2393,2455,2494,2560,2610,2663,\n2694,2696,2739,2768,2794,2853,2873,2896,2911,2943,633,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6325,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,1156,1169,1172,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,6437,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6440,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7833,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,8595,0,0,0,0,0,0,0,0,0,0,0,0,\n7278,7296,7302,7306,7308,7314,7318,7322,7326,7354,7362,7368,7374,7376,7380,7394,\n7396,7398,7410,7428,7432,7436,7438,7444,7454,7456,7462,7464,7468,7470,7502,7508,\n7526,7528,7530,7532,7536,7551,7557,7561,7571,7573,7575,7577,7587,7589,7597,7599,\n7603,7605,7607,7614,7616,7632,7634,7638,7640,7642,7644,7648,7656,7690,7696,7698,\n7722,7724,7732,7734,7738,7740,7744,7748,7768,7772,7780,7815,7817,7823,7827,7831,\n7835,7837,7839,7841,7843,7893,7913,7919,7921,7923,7925,7927,7929,7935,7947,7951,\n7971,7973,7977,7979,7981,7983,7997,7999,8011,8013,8015,8017,8027,8039,8041,8043,\n8059,8089,8091,8101,8107,8109,8119,8131,8153,8157,8165,8169,8171,8175,8177,8179,\n8187,8189,8195,8199,8203,8205,8207,8209,8211,8213,8217,8219,8257,8261,8269,8271,\n8273,8289,8293,8297,8299,8327,8329,8333,8335,8337,8351,8353,8355,8359,8361,8373,\n8375,8377,8393,8399,8407,8409,8413,8423,8425,8429,8447,8451,8457,8467,8471,8473,\n8475,8477,8481,8483,8487,8499,8501,8503,8511,8513,8515,8521,8523,8525,8529,8531,\n8533,8535,8537,8543,8551,8553,8559,8561,8563,8565,8569,8571,8573,8575,8577,8579,\n8581,8585,8587,8589,8593,8597,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6466,0,7444,7446,7448,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6479,0,6482,0,\n6485,0,6488,0,6491,0,6494,0,6497,0,6500,0,6503,0,6506,0,\n6509,0,6512,0,0,6515,0,6518,0,6521,0,0,0,0,0,0,\n6524,6527,0,6530,6533,0,6536,6539,0,6542,6545,0,6548,6551,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6476,0,0,0,0,0,0,99,102,0,6561,6554,\n0,0,0,0,0,0,0,0,0,0,0,0,6640,0,6667,0,\n6711,0,6737,0,6746,0,6762,0,6778,0,6788,0,6793,0,6806,0,\n6811,0,6820,0,0,6827,0,6832,0,6840,0,0,0,0,0,0,\n6868,6871,0,6895,6898,0,6919,6922,0,6948,6951,0,6985,6988,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6604,0,0,7137,7146,7151,7156,0,0,0,7165,6749,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,5502,5507,5706,5509,5708,5710,5514,5519,5521,5712,5714,5716,5718,5720,5722,\n5600,5526,5531,5536,5610,5538,5543,5545,5553,5563,5565,5576,5581,5586,5591,5648,\n5650,5652,5654,5656,5658,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678,5680,\n5682,5684,5686,5688,5646,5596,5598,5724,5726,5728,5730,5732,5734,5736,5602,5738,\n5740,5604,5606,5608,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632,5634,\n5636,5638,5742,5744,5640,5642,5644,5690,5692,5694,5696,5698,5700,5702,5704,0,\n0,0,7278,7318,7284,7504,7286,7298,7288,7985,7308,7292,7280,7541,7510,7326,\n0,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,\n0,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,\n0,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,\n322,331,340,349,358,367,376,385,409,423,432,441,450,459,326,335,\n344,353,362,371,380,389,413,427,436,445,454,463,418,394,402,0,\n468,484,476,532,488,508,472,504,480,516,548,568,564,556,608,536,\n544,560,552,580,524,572,600,584,512,492,528,540,576,496,604,520,\n588,500,592,596,0,0,0,0,0,0,0,0,0,0,0,0,\n1715,861,872,883,894,905,912,919,926,933,962,969,976,979,982,985,\n5502,5509,5514,5521,5526,5531,5538,5545,5553,5565,5576,5581,5586,5591,5504,5511,\n5516,5523,5528,5533,5540,5547,5555,5567,5578,5583,5588,5593,5570,5558,5550,0,\n7278,7318,7284,7504,7320,7370,7282,7368,7310,7444,7772,7893,7843,7780,8413,7508,\n7748,7794,7774,8063,7476,7933,8339,8073,7414,8095,7987,7551,8385,7352,7458,7851,\n8489,7334,7378,7819,7286,7298,7288,7601,7474,7440,7565,7559,8023,7332,8343,7452,\n7534,988,991,994,997,1026,1029,1032,1035,1038,1041,1044,1047,1050,1053,1074,\n835,951,1015,1063,1088,1102,1120,1134,1148,654,673,692,1427,2182,2179,1556,\n6566,6589,6602,6613,6628,6638,6665,6709,6735,6744,6760,6776,6786,6791,6804,6809,\n6818,6825,6830,6838,6849,6854,6856,6858,6860,6866,6893,6917,6946,6983,7015,7040,\n7056,7058,7073,7077,7089,7097,7099,7101,7111,7122,7133,7135,7144,7149,7154,0,\n6568,6573,6578,6583,6591,6596,6607,6615,6621,6630,6634,6643,6647,6652,6657,6661,\n6697,6700,6670,6704,6675,6678,6684,6691,6725,6729,6714,6720,6740,6752,6756,6765,\n6770,6781,6796,6800,6814,6835,6846,6843,6851,6862,6874,6883,6889,6878,6904,6910,\n6914,6901,6925,6931,6940,6936,6954,6968,6971,6960,6975,6979,6964,7006,7002,6991,\n7011,6994,6998,7017,7022,7026,7030,7034,7042,7047,7050,7060,7063,7068,7079,7083,\n7091,7103,7108,7113,7117,7124,7127,7140,635,838,954,1018,1066,1091,1105,1123,\n1137,1151,658,677,696,711,726,741,756,771,786,801,857,868,879,890,\n901,2291,2136,1196,2072,2612,2682,2139,2142,2146,1466,7609,7755,7538,7750,7796,\n2670,2562,3701,2496,2395,1527,1586,1387,2095,2412,2673,2565,3704,3713,2508,2417,\n1430,2398,1589,1390,1794,3722,2548,2174,2452,2256,2577,3716,2515,2105,2420,2518,\n2108,2533,2423,2522,2112,2536,2427,2551,2555,1719,2402,1593,1394,2698,2702,2708,\n2685,2580,3719,2530,2676,2568,3707,2499,2406,1597,2679,2571,3710,2502,2409,1600,\n2449,1612,2006,1253,2099,2102,1286,1267,2133,1398,2295,1424,2334,1530,1533,2431,\n2460,2463,2466,2470,2505,2511,2526,1705,2665,1708,1712,2741,1764,1907,1901,1247,\n832,948,1012,1060,1085,1099,1117,1131,1145,650,669,688,707,722,737,752,\n767,782,797,853,864,875,886,897,908,915,922,929,936,965,972,2264,\n8331,7770,8361,8345,7877,7300,7472,8593,8593,7547,8413,7488,7545,7686,8009,8163,\n8255,8265,8281,8391,7807,7853,7899,7955,8235,8401,8517,7312,7460,7813,7911,8253,\n8549,7593,7887,8245,8287,7700,8193,8267,7622,7776,7859,7941,8395,7338,7384,7422,\n7720,7811,7909,8025,8171,8249,8259,8357,8463,8539,8547,8047,8079,8141,8229,8419,\n8553,8309,7524,7636,8117,8185,7931,8051,8341,8461,7522,7581,7809,7865,7881,8137,\n8149,8433,7420,8191,7390,7388,8097,8143,8233,8437,8323,7702,7807,8315,7304,7567,\n7660,7949,7995,7434,8055,7344,7652,7290,7847,7730,8135,7466,7516,8031,8237,8301,\n7829,8375,7845,7706,8223,7710,7993,7324,7366,7386,7801,8129,8215,8307,8411,7426,\n7482,7551,7630,7742,7889,8057,8427,8519,8555,8567,7410,7766,7821,8371,7612,7682,\n7688,7718,7885,7901,7967,8093,8145,8183,8363,8241,8381,8421,7402,7412,7484,7897,\n8275,8301,7620,7658,7708,7825,8115,7945,7330,7506,7567,7595,7662,7953,7963,8167,\n8181,8415,8459,8465,8493,7340,8087,8405,8449,7668,7316,7348,7569,7579,7736,7807,\n7905,8007,8243,8389,8589,7760,8431,7408,7786,7790,7857,7871,7959,7991,8045,8133,\n8497,7370,7692,8439,7346,7591,7867,8365,7650,7672,7792,7949,8443,7404,7478,7585,\n7753,7782,7805,7849,7957,8001,8161,8277,8279,8409,8453,7442,7873,7480,7907,7969,\n8247,8445,8541,8557,7788,7863,8197,8107,8111,8123,7939,7895,8321,7328,8225,7406,\n7400,7618,7704,8127,7563,7855,7764,8369,8271,8435,8293,7626,7356,7494,0,0,\n7514,0,7758,0,0,7392,7943,8019,8061,8075,8077,8085,8469,8125,8169,0,\n8251,0,8313,0,0,8383,8397,0,0,0,8505,8507,8509,8545,0,0,\n7342,7350,7360,7418,7424,7450,7492,7498,7500,7512,7518,7583,7587,7664,7678,7680,\n7684,7726,7746,7762,7803,7861,7869,7883,7903,7915,7961,8049,8063,8067,8065,8069,\n8071,8073,8081,8083,8099,8103,8113,8145,8147,8151,8159,8173,8201,8221,8221,8239,\n8283,8295,8317,8319,8347,8349,8379,8383,8455,8485,8495,0,0,0,0,0,\n7294,7382,7364,7336,7358,7372,7416,7430,7492,7486,7490,7496,7514,7520,7543,7549,\n7553,7555,7624,7628,7646,7654,7666,7674,7670,7680,7676,7684,7694,7712,7714,7716,\n7728,7758,7776,7778,7784,7823,7829,7857,7879,7875,7883,7891,7903,8037,7917,7937,\n7943,7965,7975,7989,8003,8005,8019,8021,8029,8035,8033,8053,8105,8113,8121,8139,\n8145,8155,8173,8227,8231,8263,8285,8291,8295,8303,8313,8305,8317,8315,8311,8319,\n8325,8349,8367,8387,8403,8417,8441,8455,8469,8479,8485,8491,8495,8527,8593,8609,\n8607,8611,7272,7274,7276,8613,8615,8617,8583,8591,0,0,0,0,0,0,\n0,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,\n2239,2250,2253,2242,2246,3246,2744,0,0,0,0,0,0,0,0,0,\n0,0,0,3998,3989,3992,4001,3995,0,0,0,0,0,4053,0,4122,\n4086,4004,4031,4036,4062,4070,4075,4103,4117,616,4111,4114,8601,8604,4006,4009,\n4012,4020,4028,4033,4038,4044,4047,0,4050,4056,4059,4064,4072,0,4077,0,\n4080,4083,0,4088,4091,0,4097,4100,4105,4108,4119,4041,4023,4067,4094,4015,\n5202,5202,5210,5210,5210,5210,5212,5212,5212,5212,5216,5216,5216,5216,5208,5208,\n5208,5208,5214,5214,5214,5214,5206,5206,5206,5206,5238,5238,5238,5238,5240,5240,\n5240,5240,5220,5220,5220,5220,5218,5218,5218,5218,5222,5222,5222,5222,5224,5224,\n5224,5224,5230,5230,5228,5228,5232,5232,5226,5226,5236,5236,5234,5234,5242,5242,\n5242,5242,5246,5246,5246,5246,5250,5250,5250,5250,5248,5248,5248,5248,5252,5252,\n5254,5254,5254,5254,5258,5258,5260,5260,5260,5260,5256,5256,5256,5256,5284,5284,\n5289,5289,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,\n0,0,0,5244,5244,5244,5244,5269,5269,5267,5267,5274,5274,5204,5278,5278,\n5265,5265,5276,5276,5282,5282,5282,5282,5143,5143,4137,4137,4185,4185,4164,4164,\n4176,4176,4173,4173,4179,4179,4182,4182,4182,4167,4167,4167,5280,5280,5280,5280,\n4140,4143,4155,4167,4170,4217,4220,4227,4240,4249,4252,4259,4274,4285,4306,4335,\n4338,4343,4352,4361,4364,4369,4389,4412,4419,4438,4441,4444,4479,4490,4497,4511,\n4583,4632,4647,4650,4661,4671,4682,4685,4708,4713,4725,4748,4751,4804,4807,4810,\n4817,4824,4827,4832,4839,4854,4857,4862,4865,4868,4871,4874,4877,4888,4891,4908,\n4923,4938,4945,4959,4962,4970,4989,5009,5024,5031,5034,5039,5058,5073,5082,5099,\n5102,5107,5110,5121,5124,5150,5157,5164,5173,5190,5193,4457,4467,5145,57,64,\n71,78,85,92,4149,4152,4155,4158,4167,4170,4234,4237,4240,4243,4249,4252,\n4300,4303,4306,4329,4335,4338,4346,4349,4352,4355,4361,4364,4824,4827,4854,4857,\n4862,4874,4877,4888,4891,4945,4959,4962,4967,5024,5076,5079,5082,5093,5099,5102,\n5145,5167,5170,5173,5184,5190,5193,4140,4143,4146,4155,4161,4217,4220,4227,4240,\n4246,4259,4274,4285,4306,4332,4352,4369,4389,4412,4419,4438,4444,4479,4490,4497,\n4511,4583,4594,4632,4647,4650,4661,4671,4682,4708,4713,4725,4748,4751,4804,4807,\n4810,4817,4832,4839,4865,4868,4871,4874,4877,4908,4923,4938,4945,4956,4970,4989,\n5009,5024,5039,5058,5073,5082,5096,5107,5110,5127,5150,5157,5164,5173,5187,4155,\n4161,4240,4246,4306,4332,4352,4358,4511,4526,4561,4572,4874,4877,4945,5082,5096,\n5173,5187,4778,4785,4792,4700,4703,4740,4743,4766,4769,4529,4532,4575,4578,4430,\n4433,4404,4407,4447,4450,4639,4642,4674,4677,4537,4544,4555,4561,4558,4508,4597,\n4668,4700,4703,4740,4743,4766,4769,4529,4532,4575,4578,4430,4433,4404,4407,4447,\n4450,4639,4642,4674,4677,4537,4544,4555,4561,4558,4508,4597,4668,4537,4544,4555,\n4561,4526,4572,4685,4479,4490,4497,4537,4544,4555,4685,4708,4200,4200,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4262,4277,4277,4281,4288,4309,4313,4317,4392,4392,4426,4422,4493,4482,4486,4518,\n4518,4514,4522,4522,4586,4586,4635,4547,4547,4540,4564,4564,4568,4568,4653,4664,\n4664,4688,4688,4692,4696,4716,4728,4728,4732,4754,4762,4758,4813,4813,4842,4846,\n4926,4934,4930,4911,4911,4941,4941,4948,4948,4992,4996,5005,4973,4981,5012,5016,\n0,0,4977,5113,5117,5061,5065,5046,5046,5050,5089,5085,5176,5176,4230,4270,\n4266,4296,4292,4325,4321,4400,4372,4396,4500,4590,4551,4657,4919,4952,5160,5153,\n5180,5027,4850,5069,4842,4926,4736,4884,5042,5020,4915,4880,4915,5042,4376,4415,\n4985,4820,4223,4880,4716,4635,4504,5054,0,0,0,0,0,0,0,0,\n0,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,\n4628,4835,4195,4190,5000,4600,4462,4720,5132,4605,4609,4380,4470,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n618,6442,6444,1154,1160,105,1184,6472,6474,6248,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6246,6244,6242,2000,2000,125,612,2963,2967,6468,6470,6462,6464,6450,6452,6446,\n6448,6454,6456,6458,6460,0,0,1992,1996,6269,6269,6269,6269,2000,2000,2000,\n618,6442,622,0,1160,1154,1184,105,6244,125,612,2963,2967,6468,6470,115,\n121,614,616,620,1162,1179,1167,0,1994,117,119,1192,0,0,0,0,\n51,4772,54,0,61,0,68,4775,75,4782,82,4789,89,4796,96,4799,\n4125,4127,4127,4129,4129,4131,4131,4133,4133,4135,4135,4135,4135,4188,4188,4215,\n4215,4215,4215,4255,4255,4257,4257,4257,4257,4341,4341,4341,4341,4367,4367,4367,\n4367,4410,4410,4410,4410,4436,4436,4436,4436,4453,4453,4455,4455,4460,4460,4475,\n4475,4477,4477,4477,4477,4535,4535,4535,4535,4581,4581,4581,4581,4645,4645,4645,\n4645,4680,4680,4680,4680,4706,4706,4706,4706,4711,4711,4711,4711,4746,4746,4746,\n4746,4802,4802,4802,4802,4830,4830,4830,4830,4860,4860,4860,4860,4894,4894,4894,\n4894,4965,4965,4965,4965,5037,5037,5037,5037,5105,5105,5105,5105,5130,5130,5143,\n5143,5148,5148,5148,5148,4896,4896,4899,4899,4902,4902,4905,4905,0,0,0,\n0,105,113,115,117,119,121,123,125,612,614,616,618,620,622,631,\n633,638,841,957,1021,1069,1094,1108,1126,1140,1154,1160,1162,1167,1179,1184,\n1192,1194,1251,1265,1291,1323,1376,1385,1422,1454,1520,1525,1551,1584,1615,1653,\n1703,1728,1730,1759,1788,1822,1881,1905,1928,1943,1972,1992,1994,1996,1998,2000,\n2002,2004,2070,2085,2131,2177,2237,2262,2289,2322,2385,2393,2455,2494,2560,2610,\n2663,2694,2696,2739,2768,2794,2853,2873,2896,2911,2943,2963,2965,2967,2969,6433,\n6435,6444,6454,6456,6442,7161,7154,6564,6587,6600,6611,6626,7075,7087,7095,6823,\n7163,6566,6589,6602,6613,6628,6638,6665,6709,6735,6744,6760,6776,6786,6791,6804,\n6809,6818,6825,6830,6838,6849,6854,6856,6858,6860,6866,6893,6917,6946,6983,7015,\n7040,7056,7058,7073,7077,7089,7097,7099,7101,7111,7122,7133,7135,7159,6557,6559,\n7270,7168,7170,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192,7194,7196,\n7198,7200,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220,7222,7224,7226,0,\n0,0,7228,7230,7232,7234,7236,7238,0,0,7240,7242,7244,7246,7248,7250,\n0,0,7252,7254,7256,7258,7260,7262,0,0,7264,7266,7268,0,0,0,\n2971,2973,2988,2990,2977,2975,6271,0,6427,6273,6278,6280,6285,6429,6431,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0};\nstatic const guint16 helperIndex [] = {\n0,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,\n0,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,1160,1164,1176,1181,0,\n0,1199,1256,1271,1305,1325,1382,1401,1433,1475,1522,1525,1566,1603,1626,1655,\n1722,0,1735,1767,1801,1824,1895,1910,1937,1945,1974,0,0,0,0,0,\n2002,2022,2076,2116,2156,2186,2259,2268,2298,2343,2387,2434,2476,2539,2583,2615,\n2688,0,2715,2747,2770,2796,2867,2875,2905,2913,2945,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,2979,0,0,0,0,0,0,0,\n0,0,0,0,2998,0,0,3000,0,0,0,0,0,0,0,0,\n0,0,3002,0,3014,3017,3024,3030,0,0,3033,0,0,0,0,3045,\n0,0,0,0,3048,3060,3069,0,3072,0,0,0,3075,0,0,0,\n0,0,3087,0,3099,3102,3105,3111,0,0,3114,0,0,0,0,3126,\n0,0,0,0,3131,3143,3152,0,3155,0,0,0,3158,0,0,0,\n0,0,3170,3182,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,3194,3200,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,\n0,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,3210,3216,0,0,\n0,0,0,0,0,0,0,0,0,0,3222,3225,0,0,0,0,\n3228,3231,0,0,0,0,0,0,3234,3237,3240,3243,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3249,\n0,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,\n3256,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,3288,\n3303,0,0,0,0,0,0,3318,0,0,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,3321,3324,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,3329,3332,3335,3338,0,0,0,0,3341,3344,\n0,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,\n0,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,\n0,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,\n0,0,3421,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,\n0,0,0,0,0,0,0,0,0,3430,0,0,0,0,0,0,\n0,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,\n0,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,\n3435,3437,0,0,0,0,0,0,3439,0,0,0,0,0,0,0,\n0,0,0,3442,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,3444,3446,0,3448,3450,3452,0,3454,0,3456,3458,\n3460,3462,0,0,0,3485,0,3497,0,3514,0,0,0,0,0,3535,\n0,3549,0,0,0,3556,0,0,0,3574,0,0,3591,3596,3598,3603,\n3605,3607,0,0,0,3639,0,3651,0,3671,0,0,0,0,0,3725,\n0,3741,0,0,0,3749,0,0,0,3777,3795,3804,3813,3815,3817,0,\n0,0,3822,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,3828,0,0,0,0,0,0,0,0,0,\n3831,0,0,3837,0,3840,3849,3855,3858,0,3870,0,0,0,3873,0,\n0,0,0,3876,0,0,0,3888,0,0,0,3891,0,3894,0,0,\n3897,0,0,3903,0,3906,3915,3921,3924,0,3936,0,0,0,3941,0,\n0,0,0,3944,0,0,0,3956,0,0,0,3959,0,3962,0,0,\n0,0,0,0,0,0,3965,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,\n0,0,0,0,3968,3971,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,3974,3977,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,3980,3983,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n4006,4020,4028,4033,4038,4041,4047,0,4050,4053,4059,4064,4072,0,4077,0,\n4080,4083,0,4088,4091,0,4097,4100,4105,4108,4119,0,0,0,0,0,\n0,0,4122,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,4203,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,5137,0,5196,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,5262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,5286,0,0,5291,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,\n0,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,\n0,0,0,0,0,5294,5297,5300,0,0,0,0,5303,0,0,0,\n0,5306,5309,0,0,0,0,0,5312,0,0,5315,0,0,0,5318,\n5321,0,0,5324,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,5327,5330,0,0,0,0,0,0,0,0,0,0,0,0,5333,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,5336,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,5342,5345,0,0,0,0,5348,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,5351,0,0,0,0,\n0,0,5354,0,0,0,0,0,5357,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,5360,5363,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,\n0,0,0,0,0,0,0,5366,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,5375,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,5378,5384,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,5387,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,\n0,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,\n0,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,\n0,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,5390,\n0,0,0,0,0,0,5393,0,0,0,5402,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,5405,5411,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,5414,0,0,5423,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n5440,0,5443,0,0,0,0,0,0,0,0,0,5446,0,0,0,\n0,5449,0,0,0,0,5452,0,0,0,0,5455,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,5458,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,\n5467,0,5470,0,0,0,0,0,0,0,0,0,5473,0,0,0,\n0,5476,0,0,0,0,5479,0,0,0,0,5482,0,0,0,0,\n0,0,5485,5491,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5497,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,5795,5798,0,0,0,0,0,0,0,0,\n0,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,5801,5804,0,0,0,0,\n0,0,5807,5810,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,\n0,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,\n5813,5819,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,5825,5828,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5831,5834,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n5837,5849,5861,5864,5867,5870,5873,5876,5879,5891,5903,5906,5909,5912,5915,5918,\n5921,5927,0,0,0,0,0,0,5933,5939,0,0,0,0,0,0,\n5945,5957,5969,5972,5975,5978,5981,5984,5987,5999,6011,6014,6017,6020,6023,6026,\n6029,6038,0,0,0,0,0,0,6047,6056,0,0,0,0,0,0,\n6065,6071,0,0,0,0,0,0,6077,6083,0,0,0,0,0,0,\n6089,6098,0,0,0,0,0,0,0,6107,0,0,0,0,0,0,\n6116,6128,6140,6143,6146,6149,6152,6155,6158,6170,6182,6185,6188,6191,6194,6197,\n6200,0,0,0,6203,0,0,0,0,0,0,0,6206,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6209,0,0,0,0,0,0,0,0,6212,\n0,0,0,0,0,0,6221,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6224,0,0,0,0,0,0,0,6227,0,\n0,0,6236,6238,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6275,0,6282,0,6287,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,\n0,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,\n6290,0,6293,0,6296,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,6299,0,0,0,0,6302,0,0,6305,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,6312,0,6315,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6337,0,0,0,\n0,0,0,6340,0,6343,0,0,6346,0,0,0,0,6349,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6352,0,0,6355,6358,0,0,0,0,0,0,0,0,0,0,\n0,0,6361,6364,0,0,6367,6370,0,0,6373,6376,6379,6382,0,0,\n0,0,6385,6388,0,0,6391,6394,0,0,0,0,0,0,0,0,\n0,6397,6400,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,6403,0,0,0,0,0,6406,6409,0,6412,0,0,0,0,\n0,0,6415,6418,6421,6424,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6446,6448,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6476,0,0,0,0,6479,0,6482,0,6485,\n0,6488,0,6491,0,6494,0,6497,0,6500,0,6503,0,6506,0,6509,\n0,6512,0,0,6515,0,6518,0,6521,0,0,0,0,0,0,6524,\n0,0,6530,0,0,6536,0,0,6542,0,0,6548,0,0,0,0,\n0,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,6561,0,0,\n0,0,0,0,0,0,6604,0,0,0,0,6640,0,6667,0,6711,\n0,6737,0,6746,0,6762,0,6778,0,6788,0,6793,0,6806,0,6811,\n0,6820,0,0,6827,0,6832,0,6840,0,0,0,0,0,0,6868,\n0,0,6895,0,0,6919,0,0,6948,0,0,6985,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7137,\n7146,7151,7156,0,0,0,0,0,0,0,0,0,0,7165,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,7272,0,0,\n0,0,0,0,0,0,0,0,7274,0,0,0,0,0,0,0,\n0,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,7290,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,7294,0,0,0,0,0,0,0,0,0,\n0,0,7300,0,0,0,0,0,0,7304,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,7312,0,0,0,7316,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7324,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7328,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,\n0,0,0,0,7330,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,\n0,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,\n0,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,\n0,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,\n0,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,\n7336,0,0,0,0,0,7338,0,0,0,0,7340,0,0,0,0,\n0,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,7342,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7344,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,7346,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,7348,0,0,0,0,0,\n0,0,0,0,0,0,0,7350,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7356,0,0,0,0,7358,0,0,0,0,0,0,0,7360,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,7364,7366,0,0,0,7370,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7372,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7382,0,7384,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7386,0,0,7388,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7390,0,7392,0,\n0,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,\n0,0,0,0,0,0,0,7400,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7402,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7404,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,7406,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,7408,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7410,0,0,0,0,\n0,0,0,7412,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,\n0,0,0,0,0,0,0,7416,0,7418,0,0,0,0,0,0,\n0,0,7420,0,0,0,0,0,0,0,0,0,0,0,7422,0,\n0,0,0,0,7424,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7426,0,0,0,0,7430,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7434,0,0,0,0,0,0,0,0,\n0,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,7442,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,7450,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,\n0,0,0,0,0,7460,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7466,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,\n0,0,0,0,0,7472,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7478,\n0,0,0,0,0,0,0,0,0,0,0,0,0,7480,0,0,\n0,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,\n0,0,7482,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,\n0,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,\n0,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,\n0,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,7484,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7486,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7488,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7490,0,0,0,7492,0,0,\n0,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,\n7494,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,\n0,0,7496,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,\n0,0,0,0,0,0,7498,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,7500,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,7506,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n7512,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,7514,0,0,0,7516,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,7518,0,0,0,0,0,0,0,\n0,0,0,7520,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,\n0,0,0,0,0,0,0,0,7522,0,0,0,0,0,0,7524,\n0,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,\n0,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,\n0,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,\n0,0,0,0,7543,0,0,0,7545,0,0,0,0,0,0,0,\n0,7547,0,0,7549,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,\n0,0,0,7551,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7553,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,7555,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7563,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,7567,0,0,0,0,0,0,7569,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7579,\n0,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,\n0,0,7581,0,7583,7585,0,0,0,0,0,0,0,0,7587,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,7591,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7593,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,7595,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7612,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,7618,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,\n0,0,0,0,0,0,0,0,0,7620,7622,0,0,0,0,0,\n0,0,7624,7626,0,0,0,0,0,7628,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7630,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7636,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,7646,0,0,0,0,0,0,\n0,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,7650,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7652,0,0,0,7654,0,0,\n0,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,\n0,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,\n0,0,0,0,0,7658,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,\n0,0,7660,0,0,0,0,0,0,0,0,0,7662,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7664,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,\n0,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,\n0,0,0,0,0,0,0,0,7666,0,0,0,0,0,0,0,\n0,7668,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,\n0,0,0,0,0,0,0,0,7670,0,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7672,0,0,0,0,0,0,0,0,0,7674,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7676,0,0,0,0,0,0,0,7678,0,0,0,0,0,0,0,\n0,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,7680,0,\n7682,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,\n0,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,\n0,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,\n0,0,7684,0,0,0,7686,0,0,0,0,0,0,0,0,0,\n7688,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7692,0,\n0,0,0,0,7694,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7700,0,0,0,0,0,7702,\n0,0,0,7704,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7706,0,\n0,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,\n0,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,\n0,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,\n0,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,7708,0,0,0,0,\n0,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,\n7710,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,\n0,0,0,0,7712,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,\n0,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,\n0,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,7714,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7716,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,7718,0,0,0,0,0,\n0,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,\n0,0,0,0,7720,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7726,\n0,0,0,0,0,0,7728,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,\n0,0,0,0,0,0,0,0,7730,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7736,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,7742,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,\n0,0,7746,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7753,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,\n0,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,\n0,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,\n0,0,0,0,7758,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,7760,0,0,0,0,0,0,0,\n0,7762,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,\n0,0,0,0,7764,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,7766,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7770,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,\n0,0,0,0,0,0,0,7776,0,0,0,7778,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7782,0,\n0,0,0,0,0,0,7784,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,\n0,0,0,0,0,0,0,0,0,0,0,7786,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7788,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7790,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,\n0,0,0,0,0,0,0,7792,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,7801,0,0,0,7803,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,\n0,0,0,0,0,0,0,0,7805,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7807,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7809,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,7811,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7813,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7821,0,7823,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7825,0,\n0,0,0,0,0,0,0,0,0,0,7829,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,7845,0,0,0,0,0,0,0,\n0,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,\n0,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,7847,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7849,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,\n0,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,7853,0,0,7855,0,\n0,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,\n0,7857,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,\n0,0,0,0,0,0,0,0,0,0,7859,0,0,0,0,0,\n0,0,0,0,0,0,0,7861,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,7863,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,7865,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,7867,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,7869,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,7871,0,0,0,\n0,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,7873,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7875,0,0,0,0,\n0,7877,0,0,0,0,0,0,0,0,0,7879,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7881,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7883,7885,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,7887,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7889,0,\n0,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,7891,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7895,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,7897,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7899,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,7901,0,0,0,0,0,0,\n0,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,7903,0,\n0,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,\n0,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,\n0,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,7905,0,\n7907,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,\n0,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,\n7909,0,0,0,0,0,0,0,0,0,0,7911,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7915,0,0,0,0,\n0,0,0,0,0,7917,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7931,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7937,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7939,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,\n0,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,7941,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,7943,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,7945,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7949,0,0,0,0,0,0,0,0,\n0,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,\n0,0,7953,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,7955,0,\n0,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,\n0,0,0,0,0,0,7957,0,0,7959,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7961,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,\n0,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,\n0,0,0,0,0,0,0,0,0,7963,0,0,0,0,0,0,\n0,7965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7967,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,7969,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,7975,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,\n0,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,7989,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7991,0,0,0,0,0,0,\n0,0,0,0,0,7993,0,0,0,0,0,0,0,0,0,0,\n7995,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8001,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,\n0,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,8003,0,8005,\n0,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,\n0,0,8007,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,\n0,0,0,0,0,0,0,0,0,8009,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,8019,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,8021,0,0,0,0,\n0,0,0,0,0,0,0,8025,0,0,0,0,0,0,0,0,\n0,0,0,0,8029,0,0,0,0,0,0,0,0,0,0,0,\n0,8031,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,\n0,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,\n8033,0,0,0,0,0,0,0,0,0,8035,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,8037,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,8045,0,0,0,0,\n0,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,8047,0,0,0,\n0,8049,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,\n0,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,8051,0,8053,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,8055,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,8057,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,8061,0,8063,0,\n0,0,0,0,0,0,0,0,8065,8067,0,0,0,0,0,0,\n8069,0,0,0,0,0,8071,0,0,0,0,0,0,8073,8075,0,\n0,0,0,0,0,8077,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,8079,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8081,8083,8085,\n0,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,8087,0,\n0,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,8093,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,8097,0,0,0,\n0,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,\n8099,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,\n0,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,\n0,8103,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8105,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,8107,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8111,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,\n0,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,\n0,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,\n0,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,\n0,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,\n8113,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,\n0,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,\n0,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,\n0,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,8115,0,\n0,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,\n8117,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,8121,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8123,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,8125,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,8127,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,8129,0,0,0,0,0,0,0,0,\n0,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,\n8133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8135,0,0,0,0,0,0,0,0,0,0,0,0,8137,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,8139,0,0,0,0,\n0,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,\n0,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,\n8141,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,8143,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,8145,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,8147,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,8149,0,0,0,0,0,0,0,0,\n0,8151,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,8155,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8159,0,0,0,0,0,0,8161,0,0,0,0,0,0,\n0,0,0,0,0,8163,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,8167,0,0,0,0,0,\n0,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,8169,0,0,\n0,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,\n0,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,\n0,8171,0,0,0,8173,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,\n0,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,\n0,0,0,0,0,0,8181,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8183,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,8185,0,\n0,0,0,0,0,0,0,0,0,0,0,8191,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,8193,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8197,0,0,0,0,8201,0,0,\n0,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,\n0,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,\n0,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,\n0,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,8215,\n0,0,0,0,0,0,0,0,0,8221,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,8223,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,8225,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,\n0,0,8227,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,8229,0,0,0,0,0,0,\n0,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,8231,\n0,8233,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8235,0,0,\n0,0,0,0,0,0,0,0,0,8237,0,0,0,0,0,0,\n0,0,0,0,0,0,0,8239,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,8241,0,\n0,0,0,0,0,0,0,0,0,0,0,0,8243,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8245,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,8247,0,0,0,0,0,\n0,0,0,0,0,0,8249,0,0,0,0,0,0,0,0,0,\n0,0,8251,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,8253,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8255,\n0,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,8259,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,8263,0,0,0,0,0,0,\n0,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,\n0,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,8265,0,0,0,0,0,\n0,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,\n0,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,\n0,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,8267,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,8271,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8275,0,0,0,0,0,0,0,0,0,0,0,0,8277,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8281,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8283,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8285,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,\n0,0,0,0,8287,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,\n0,0,0,0,0,0,8291,0,0,0,0,8293,0,0,0,0,\n0,0,0,0,0,0,8295,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,8301,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8303,\n0,0,0,0,0,0,0,0,0,0,0,8305,0,0,0,0,\n0,0,8307,0,0,0,8309,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8311,0,0,\n0,0,0,0,0,0,0,0,8313,0,0,0,0,0,8315,0,\n0,8317,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,8319,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8321,0,0,0,0,0,0,0,\n0,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,\n8323,0,0,0,0,0,0,0,0,0,8325,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8331,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8341,0,0,0,0,0,8345,0,0,0,0,0,0,0,\n0,0,0,8347,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8349,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,8357,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,8361,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,8363,0,0,0,8365,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8367,0,0,8369,0,0,0,0,\n0,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,\n0,0,8371,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8375,0,0,0,0,0,8379,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,8381,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8383,0,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8387,0,0,0,0,0,0,0,0,0,8389,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8391,\n0,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,\n0,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,8395,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8397,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,8401,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,8403,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,8405,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,8409,0,0,8411,\n0,8413,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,\n0,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,\n0,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,\n0,0,0,0,8415,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,\n0,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,\n0,0,0,0,0,0,8417,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,8419,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,8421,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,8427,0,0,\n0,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,\n0,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,\n0,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,\n0,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,8431,0,\n0,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,8433,0,8435,0,0,\n0,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,\n0,0,0,0,0,8437,0,0,8439,0,0,0,8441,0,0,0,\n0,0,0,0,0,0,8443,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,\n0,0,0,8445,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8449,0,0,0,0,0,0,0,\n0,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,\n0,0,8453,8455,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,8459,8461,0,0,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8463,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,8465,0,0,0,0,0,0,0,\n0,0,0,0,0,0,8469,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,8479,0,0,0,0,\n0,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,8485,\n0,0,0,0,0,0,0,0,0,0,0,8491,0,0,0,0,\n0,0,0,0,0,0,0,0,8493,0,0,0,0,0,0,0,\n0,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,8495,0,0,0,0,\n0,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,8497,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8505,\n0,0,0,0,0,0,0,0,0,0,0,0,8507,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,8509,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,8517,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,\n0,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,\n0,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,\n0,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,8519,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,8527,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,\n0,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,\n0,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,8539,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,8541,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,8545,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,8547,0,0,0,0,0,\n0,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,8549,0,\n0,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,\n0,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,\n0,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,8553,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,8555,0,0,0,0,0,0,0,8557,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,8567,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,8583,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8589,8591,0,\n0,0,0,0,0,0,0,0,0,0,0,0,8593,0,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,8601,0,0,0,0,0,0,\n0};\nstatic const guint16 mapIdxToComposite [] = {\n0,0,0,0,0,0,0,0,894,0,0,0,8814,0,0,0,\n0,0,0,0,0,0,0,0,8800,0,0,0,0,8815,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,\n0,0,193,0,0,194,0,0,195,0,0,256,0,0,258,0,\n0,550,0,0,196,0,0,7842,0,0,197,0,0,461,0,0,\n512,0,0,514,0,0,7840,0,0,7680,0,0,260,0,0,0,\n0,0,0,0,0,0,0,0,7682,0,0,7684,0,0,7686,0,\n0,0,0,0,0,0,0,262,0,0,264,0,0,266,0,0,\n268,0,0,199,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7690,0,0,270,0,0,7692,\n0,0,7696,0,0,7698,0,0,7694,0,0,0,0,200,0,0,\n201,0,0,202,0,0,7868,0,0,274,0,0,276,0,0,278,\n0,0,203,0,0,7866,0,0,282,0,0,516,0,0,518,0,\n0,7864,0,0,552,0,0,280,0,0,7704,0,0,7706,0,0,\n0,0,0,0,0,0,7710,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,500,0,0,284,0,0,7712,\n0,0,286,0,0,288,0,0,486,0,0,290,0,0,0,0,\n0,0,0,0,0,0,0,0,0,292,0,0,7714,0,0,7718,\n0,0,542,0,0,7716,0,0,7720,0,0,7722,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,204,0,0,205,0,0,206,0,0,296,0,0,298,\n0,0,300,0,0,304,0,0,207,0,0,7880,0,0,463,0,\n0,520,0,0,522,0,0,7882,0,0,302,0,0,7724,0,0,\n0,0,308,0,0,8490,0,0,0,0,0,0,0,0,0,0,\n7728,0,0,488,0,0,7730,0,0,310,0,0,7732,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,313,0,\n0,317,0,0,7734,0,0,315,0,0,7740,0,0,7738,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7742,0,0,7744,0,0,7746,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,504,0,0,323,0,0,\n209,0,0,7748,0,0,327,0,0,7750,0,0,325,0,0,7754,\n0,0,7752,0,0,0,0,210,0,0,211,0,0,212,0,0,\n213,0,0,332,0,0,334,0,0,558,0,0,214,0,0,7886,\n0,0,336,0,0,465,0,0,524,0,0,526,0,0,416,0,\n0,7884,0,0,490,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,7764,0,0,7766,0,0,\n0,0,0,0,0,0,0,340,0,0,7768,0,0,344,0,0,\n528,0,0,530,0,0,7770,0,0,342,0,0,7774,0,0,0,\n0,0,0,0,0,0,0,346,0,0,348,0,0,7776,0,0,\n352,0,0,7778,0,0,536,0,0,350,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7786,0,0,356,0,0,7788,\n0,0,538,0,0,354,0,0,7792,0,0,7790,0,0,0,0,\n217,0,0,218,0,0,219,0,0,360,0,0,362,0,0,364,\n0,0,220,0,0,7910,0,0,366,0,0,368,0,0,467,0,\n0,532,0,0,534,0,0,431,0,0,7908,0,0,7794,0,0,\n370,0,0,7798,0,0,7796,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7804,0,0,7806,0,0,0,0,0,\n0,0,0,0,0,0,7808,0,0,7810,0,0,372,0,0,7814,\n0,0,7812,0,0,7816,0,0,0,0,0,0,0,0,0,0,\n0,7818,0,0,7820,0,0,0,0,7922,0,0,221,0,0,374,\n0,0,7928,0,0,562,0,0,7822,0,0,376,0,0,7926,0,\n0,7924,0,0,0,0,377,0,0,7824,0,0,379,0,0,381,\n0,0,7826,0,0,7828,0,0,0,0,0,0,0,0,0,0,\n0,0,8175,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,224,0,0,225,0,0,226,0,0,227,\n0,0,257,0,0,259,0,0,551,0,0,228,0,0,7843,0,\n0,229,0,0,462,0,0,513,0,0,515,0,0,7841,0,0,\n7681,0,0,261,0,0,0,0,0,0,0,0,7683,0,0,7685,\n0,0,7687,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,\n0,0,0,0,263,0,0,265,0,0,267,0,0,269,0,0,\n231,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,7691,0,0,271,\n0,0,7693,0,0,7697,0,0,7699,0,0,7695,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,232,0,0,233,0,0,\n234,0,0,7869,0,0,275,0,0,277,0,0,279,0,0,235,\n0,0,7867,0,0,283,0,0,517,0,0,519,0,0,7865,0,\n0,553,0,0,281,0,0,7705,0,0,7707,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7711,0,0,0,0,0,0,0,0,501,0,0,285,\n0,0,7713,0,0,287,0,0,289,0,0,487,0,0,291,0,\n0,0,0,0,0,0,0,0,0,0,293,0,0,7715,0,0,\n7719,0,0,543,0,0,7717,0,0,7721,0,0,7723,0,0,7830,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,236,0,0,237,0,0,238,0,0,\n297,0,0,299,0,0,301,0,0,239,0,0,7881,0,0,464,\n0,0,521,0,0,523,0,0,7883,0,0,303,0,0,7725,0,\n0,0,0,309,0,0,496,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7729,0,0,489,0,0,7731,0,0,311,0,0,7733,0,\n0,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,314,0,0,318,\n0,0,7735,0,0,316,0,0,7741,0,0,7739,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,7743,0,0,7745,0,\n0,7747,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,\n0,0,0,0,0,0,0,505,0,0,324,0,0,241,0,0,\n7749,0,0,328,0,0,7751,0,0,326,0,0,7755,0,0,7753,\n0,0,0,0,0,0,0,242,0,0,243,0,0,244,0,0,\n245,0,0,333,0,0,335,0,0,559,0,0,246,0,0,7887,\n0,0,337,0,0,466,0,0,525,0,0,527,0,0,417,0,\n0,7885,0,0,491,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,\n7765,0,0,7767,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,341,0,0,7769,0,\n0,345,0,0,529,0,0,531,0,0,7771,0,0,343,0,0,\n7775,0,0,0,0,0,0,0,0,0,0,347,0,0,349,0,\n0,7777,0,0,353,0,0,7779,0,0,537,0,0,351,0,0,\n0,0,7787,0,0,7831,0,0,357,0,0,7789,0,0,539,0,\n0,355,0,0,7793,0,0,7791,0,0,0,0,249,0,0,250,\n0,0,251,0,0,361,0,0,363,0,0,365,0,0,252,0,\n0,7911,0,0,367,0,0,369,0,0,468,0,0,533,0,0,\n535,0,0,432,0,0,7909,0,0,7795,0,0,371,0,0,7799,\n0,0,7797,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7805,0,0,7807,0,0,0,0,7809,0,0,7811,0,\n0,373,0,0,7815,0,0,7813,0,0,7832,0,0,7817,0,0,\n0,0,0,0,0,0,0,0,0,7819,0,0,7821,0,0,0,\n0,7923,0,0,253,0,0,375,0,0,7929,0,0,563,0,0,\n7823,0,0,255,0,0,7927,0,0,7833,0,0,7925,0,0,0,\n0,378,0,0,7825,0,0,380,0,0,382,0,0,7827,0,0,\n7829,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,8173,0,0,901,0,0,8129,0,0,0,0,0,0,\n0,0,0,0,0,0,8189,0,903,0,7846,0,0,7844,0,0,\n7850,0,0,7848,0,0,478,0,0,8491,0,506,0,0,0,0,\n508,0,0,482,0,0,7688,0,0,7872,0,0,7870,0,0,7876,\n0,0,7874,0,0,7726,0,0,7890,0,0,7888,0,0,7894,0,\n0,7892,0,0,7756,0,0,556,0,0,7758,0,0,554,0,0,\n510,0,0,475,0,0,471,0,0,469,0,0,473,0,0,7847,\n0,0,7845,0,0,7851,0,0,7849,0,0,479,0,0,507,0,\n0,509,0,0,483,0,0,7689,0,0,7873,0,0,7871,0,0,\n7877,0,0,7875,0,0,7727,0,0,0,0,7891,0,0,7889,0,\n0,7895,0,0,7893,0,0,7757,0,0,557,0,0,7759,0,0,\n555,0,0,511,0,0,476,0,0,472,0,0,470,0,0,474,\n0,0,7856,0,0,7854,0,0,7860,0,0,7858,0,0,7857,0,\n0,7855,0,0,7861,0,0,7859,0,0,7700,0,0,7702,0,0,\n7701,0,0,7703,0,0,0,0,0,0,7760,0,0,7762,0,0,\n7761,0,0,7763,0,0,7780,0,0,7781,0,0,7782,0,0,7783,\n0,0,7800,0,0,7801,0,0,7802,0,0,7803,0,0,0,0,\n0,7835,0,0,0,0,0,0,7900,0,0,7898,0,0,7904,0,\n0,7902,0,0,7906,0,0,7901,0,0,7899,0,0,7905,0,0,\n7903,0,0,7907,0,0,0,0,7914,0,0,7912,0,0,7918,0,\n0,7916,0,0,7920,0,0,7915,0,0,7913,0,0,7919,0,0,\n7917,0,0,7921,0,0,494,0,0,492,0,0,493,0,0,0,\n0,480,0,0,481,0,0,7708,0,0,7709,0,0,560,0,0,\n561,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,495,0,0,\n0,0,0,0,0,0,884,0,0,0,0,832,0,833,0,836,\n0,0,835,0,8174,0,8123,0,8137,0,8139,0,8155,0,8185,0,\n8171,0,8187,0,8147,0,8122,0,0,902,0,0,8121,0,0,8120,\n0,0,7944,0,0,7945,0,0,8124,0,0,0,0,8136,0,0,\n904,0,0,7960,0,0,7961,0,0,8138,0,0,905,0,0,7976,\n0,0,7977,0,0,8140,0,0,0,0,8154,0,0,906,0,0,\n8153,0,0,8152,0,0,938,0,0,7992,0,0,7993,0,0,8184,\n0,0,908,0,0,8008,0,0,8009,0,0,0,0,8172,0,0,\n0,0,0,0,8170,0,0,910,0,0,8169,0,0,8168,0,0,\n939,0,0,8025,0,0,8486,0,8186,0,0,911,0,0,8040,0,\n0,8041,0,0,8188,0,0,8049,0,8116,0,0,8051,0,8053,0,\n8132,0,0,8055,0,8163,0,8048,0,0,940,0,0,8113,0,0,\n8112,0,0,7936,0,0,7937,0,0,8118,0,0,8115,0,0,0,\n0,0,0,0,0,0,0,8050,0,0,941,0,0,7952,0,0,\n7953,0,0,8052,0,0,942,0,0,7968,0,0,7969,0,0,8134,\n0,0,8131,0,0,0,0,8126,0,8054,0,0,943,0,0,8145,\n0,0,8144,0,0,970,0,0,7984,0,0,7985,0,0,8150,0,\n0,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,8056,0,0,\n972,0,0,8000,0,0,8001,0,0,0,0,0,0,8164,0,0,\n8165,0,0,0,0,8058,0,0,973,0,0,8161,0,0,8160,0,\n0,971,0,0,8016,0,0,8017,0,0,8166,0,0,0,0,0,\n0,8060,0,0,974,0,0,8032,0,0,8033,0,0,8182,0,0,\n8179,0,0,8146,0,0,912,0,0,8151,0,0,8162,0,0,944,\n0,0,8167,0,0,8057,0,8059,0,8061,0,8180,0,0,979,0,\n0,980,0,0,1031,0,0,1232,0,0,1234,0,0,1027,0,0,\n1024,0,0,1238,0,0,1025,0,0,1217,0,0,1244,0,0,1246,\n0,0,1037,0,0,1250,0,0,1049,0,0,1252,0,0,1036,0,\n0,1254,0,0,1262,0,0,1038,0,0,1264,0,0,1266,0,0,\n1268,0,0,1272,0,0,1260,0,0,1233,0,0,1235,0,0,1107,\n0,0,1104,0,0,1239,0,0,1105,0,0,1218,0,0,1245,0,\n0,1247,0,0,1117,0,0,1251,0,0,1081,0,0,1253,0,0,\n1116,0,0,0,0,1255,0,0,1263,0,0,1118,0,0,1265,0,\n0,1267,0,0,1269,0,0,1273,0,0,1261,0,0,1111,0,0,\n1142,0,0,1143,0,0,1242,0,0,1243,0,0,1258,0,0,1259,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,64302,0,0,64303,0,0,64304,0,0,0,\n0,0,0,0,64305,0,0,64332,0,0,0,0,64306,0,0,0,\n0,64307,0,0,0,0,64308,0,0,64331,0,0,64309,0,0,64310,\n0,0,64312,0,0,64285,0,0,64313,0,0,64314,0,0,0,0,\n64315,0,0,64333,0,0,0,0,64316,0,0,0,0,64318,0,0,\n64320,0,0,64321,0,0,0,0,64323,0,0,64324,0,0,64334,0,\n0,64326,0,0,64327,0,0,0,0,64328,0,0,64329,0,0,64298,\n0,0,64299,0,0,0,0,64330,0,0,64287,0,0,0,0,0,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,1570,0,0,1571,0,\n0,1573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,1572,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,\n0,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,1574,0,0,0,\n0,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,\n0,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,1730,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,1747,0,0,0,0,1728,0,0,2392,0,\n0,2393,0,0,2394,0,0,2395,0,0,2396,0,0,2397,0,0,\n2345,0,0,2398,0,0,2399,0,0,2353,0,0,2356,0,0,2524,\n0,0,2525,0,0,2527,0,0,2507,0,0,2508,0,0,2649,0,\n0,2650,0,0,2651,0,0,2654,0,0,2611,0,0,2614,0,0,\n2908,0,0,2909,0,0,2891,0,0,2888,0,0,2892,0,0,2964,\n0,0,3018,0,0,3020,0,0,3019,0,0,3144,0,0,3264,0,\n0,3274,0,0,3271,0,0,3272,0,0,3275,0,0,3402,0,0,\n3404,0,0,3403,0,0,3546,0,0,3548,0,0,3550,0,0,3549,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n3945,0,0,3907,0,0,3917,0,0,3922,0,0,3927,0,0,3932,\n0,0,3955,0,0,3957,0,0,3969,0,0,4025,0,0,3987,0,\n0,3997,0,0,4002,0,0,4007,0,0,4012,0,0,3958,0,0,\n0,0,0,3960,0,0,0,0,0,4134,0,0,0,0,0,0,\n0,0,6918,0,0,6920,0,0,6922,0,0,6924,0,0,6926,0,\n0,6930,0,0,6971,0,0,6973,0,0,6976,0,0,6977,0,0,\n6979,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,7736,0,0,7737,0,0,7772,0,0,7773,0,0,7784,\n0,0,7785,0,0,7852,0,0,7862,0,0,7853,0,0,7863,0,\n0,7878,0,0,7879,0,0,7896,0,0,7897,0,0,7938,0,0,\n7940,0,0,7942,0,0,8064,0,0,7939,0,0,7941,0,0,7943,\n0,0,8065,0,0,8066,0,0,8067,0,0,8068,0,0,8069,0,\n0,8070,0,0,8071,0,0,7946,0,0,7948,0,0,7950,0,0,\n8072,0,0,7947,0,0,7949,0,0,7951,0,0,8073,0,0,8074,\n0,0,8075,0,0,8076,0,0,8077,0,0,8078,0,0,8079,0,\n0,7954,0,0,7956,0,0,7955,0,0,7957,0,0,7962,0,0,\n7964,0,0,7963,0,0,7965,0,0,7970,0,0,7972,0,0,7974,\n0,0,8080,0,0,7971,0,0,7973,0,0,7975,0,0,8081,0,\n0,8082,0,0,8083,0,0,8084,0,0,8085,0,0,8086,0,0,\n8087,0,0,7978,0,0,7980,0,0,7982,0,0,8088,0,0,7979,\n0,0,7981,0,0,7983,0,0,8089,0,0,8090,0,0,8091,0,\n0,8092,0,0,8093,0,0,8094,0,0,8095,0,0,7986,0,0,\n7988,0,0,7990,0,0,7987,0,0,7989,0,0,7991,0,0,7994,\n0,0,7996,0,0,7998,0,0,7995,0,0,7997,0,0,7999,0,\n0,8002,0,0,8004,0,0,8003,0,0,8005,0,0,8010,0,0,\n8012,0,0,8011,0,0,8013,0,0,8018,0,0,8020,0,0,8022,\n0,0,8019,0,0,8021,0,0,8023,0,0,8027,0,0,8029,0,\n0,8031,0,0,8034,0,0,8036,0,0,8038,0,0,8096,0,0,\n8035,0,0,8037,0,0,8039,0,0,8097,0,0,8098,0,0,8099,\n0,0,8100,0,0,8101,0,0,8102,0,0,8103,0,0,8042,0,\n0,8044,0,0,8046,0,0,8104,0,0,8043,0,0,8045,0,0,\n8047,0,0,8105,0,0,8106,0,0,8107,0,0,8108,0,0,8109,\n0,0,8110,0,0,8111,0,0,8114,0,0,8130,0,0,8178,0,\n0,8119,0,0,8141,0,0,8142,0,0,8143,0,0,8135,0,0,\n8183,0,0,8157,0,0,8158,0,0,8159,0,0,8192,0,8193,0,\n0,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,\n0,0,0,8602,0,0,0,0,0,0,8603,0,0,0,0,8622,\n0,0,8653,0,0,8655,0,0,8654,0,0,8708,0,0,8713,0,\n0,8716,0,0,0,0,0,0,8740,0,0,8742,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8769,0,0,8772,0,0,8775,0,0,8777,0,0,8813,0,0,\n8802,0,0,8816,0,0,8817,0,0,8820,0,0,8821,0,0,8824,\n0,0,8825,0,0,8832,0,0,8833,0,0,8928,0,0,8929,0,\n0,8836,0,0,8837,0,0,8840,0,0,8841,0,0,8930,0,0,\n8931,0,0,8876,0,0,8877,0,0,8878,0,0,8879,0,0,8938,\n0,0,8939,0,0,8940,0,0,8941,0,0,0,0,0,0,0,\n0,0,0,0,0,10972,0,0,0,0,0,0,0,0,9001,0,\n9002,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,12436,0,0,12364,\n0,0,12366,0,0,12368,0,0,12370,0,0,12372,0,0,12374,0,\n0,12376,0,0,12378,0,0,12380,0,0,12382,0,0,12384,0,0,\n12386,0,0,12389,0,0,12391,0,0,12393,0,0,12400,0,0,12401,\n0,0,12403,0,0,12404,0,0,12406,0,0,12407,0,0,12409,0,\n0,12410,0,0,12412,0,0,12413,0,0,0,0,0,0,0,0,\n0,12446,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,\n0,0,0,0,0,0,0,0,0,0,0,0,12532,0,0,0,\n0,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,\n12460,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,12462,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,12464,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,12466,0,0,0,0,0,0,0,0,12468,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,12470,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,12472,0,0,0,0,0,\n0,0,0,0,12474,0,0,0,0,12476,0,0,0,0,0,0,\n0,0,0,0,0,0,12478,0,0,0,0,12480,0,0,0,0,\n0,0,0,0,12482,0,0,0,0,0,0,12485,0,0,0,0,\n12487,0,0,0,0,0,0,0,12489,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,12496,0,0,12497,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12499,\n0,0,12500,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,12502,0,0,12503,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,12505,0,0,12506,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,12508,0,0,12509,0,0,0,\n0,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,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,12535,0,0,0,0,0,0,0,0,12536,0,0,0,0,12537,\n0,0,0,0,12538,0,0,0,0,0,0,0,0,12542,0,0,\n0,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,\n0,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,\n0,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,\n0,0,0,0,0,0,0,0,64210,0,64211,0,64212,0,0,0,\n0,0,0,0,0,0,0,0,0,0,63847,0,0,0,64112,0,\n0,0,0,0,63749,0,0,0,63838,0,0,0,0,0,0,0,\n63771,0,0,0,63930,0,0,0,0,0,0,0,63863,0,0,0,\n63997,0,63912,0,0,0,0,0,64115,0,63789,0,63925,0,64048,0,\n63845,0,63956,0,63931,0,64049,0,0,0,0,0,64012,0,64116,0,\n64050,0,0,0,64114,0,63864,0,0,0,63953,0,64117,0,0,0,\n0,0,0,0,0,0,64113,0,63790,0,63865,0,63829,0,63828,0,\n64021,0,0,0,0,0,0,0,64000,0,63900,0,63965,0,63999,0,\n63943,0,63882,0,63901,0,0,0,64118,0,64051,0,63826,0,63791,0,\n64052,0,63871,0,0,0,64119,0,0,0,63843,0,0,0,0,0,\n0,0,63979,0,0,0,0,0,0,0,64053,0,0,0,0,0,\n0,0,0,0,63772,0,0,0,0,0,63851,0,0,0,0,0,\n63750,0,0,0,0,0,63966,0,63981,0,63872,0,63902,0,64121,0,\n63755,0,64122,0,64054,0,64013,0,64123,0,64055,0,64056,0,0,0,\n0,0,63913,0,0,0,0,0,64057,0,64124,0,63852,0,64058,0,\n64125,0,63818,0,63810,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,64126,0,63756,0,63753,0,64127,0,63873,\n0,64128,0,64129,0,0,0,0,0,0,0,64004,0,0,0,63914,\n0,63932,0,0,0,0,0,0,0,0,0,63933,0,63819,0,64059,\n0,63967,0,64060,0,0,0,63957,0,63777,0,63915,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,63886,0,0,0,\n0,0,64001,0,63906,0,63784,0,64130,0,64011,0,64131,0,63874,0,\n0,0,0,0,63811,0,0,0,0,0,0,0,0,0,64132,0,\n0,0,63960,0,63846,0,64133,0,0,0,63907,0,63840,0,63916,0,\n64061,0,64134,0,63929,0,64136,0,63961,0,64135,0,64138,0,64062,0,\n64063,0,63887,0,64139,0,63757,0,63888,0,0,0,63954,0,64140,0,\n0,0,0,0,63781,0,63835,0,64002,0,63859,0,63908,0,63861,0,\n64141,0,64142,0,64143,0,63889,0,63792,0,0,0,0,0,64065,0,\n64144,0,63849,0,0,0,0,0,63934,0,0,0,0,0,63875,0,\n0,0,64066,0,0,0,0,0,0,63968,0,0,0,0,64018,0,\n63941,0,64067,0,64006,0,63883,0,0,0,63745,0,0,0,0,0,\n64146,0,64147,0,0,0,63969,0,64148,0,63944,0,63988,0,63945,0,\n63962,0,0,0,0,0,0,0,0,63866,0,64068,0,63970,0,63764,\n0,63820,0,63793,0,63773,0,0,0,0,0,0,0,63884,0,64149,\n0,63909,0,0,0,64150,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,63858,0,63848,0,63971,0,0,0,63765,0,64005,\n0,64151,0,63786,0,64069,0,63989,0,63821,0,63958,0,64070,0,63947,\n0,63980,0,64153,0,63748,0,64152,0,63822,0,64071,0,63890,0,63778,\n0,63876,0,64155,0,0,0,63995,0,63903,0,63766,0,63891,0,64072,\n0,63936,0,63982,0,63794,0,63774,0,0,0,64073,0,64158,0,0,\n0,0,0,0,0,0,0,0,0,0,0,63814,0,0,0,0,\n0,64159,0,63994,0,63787,0,64022,0,63911,0,0,0,63963,0,0,\n0,63917,0,63767,0,63972,0,63948,0,64074,0,63918,0,64161,0,63892,\n0,63983,0,0,0,0,0,64162,0,0,0,0,0,0,0,0,\n0,0,0,0,0,64163,0,63949,0,63862,0,63842,0,0,0,0,\n0,63973,0,64164,0,64165,0,63937,0,63758,0,0,0,0,0,0,\n0,0,0,64166,0,64167,0,0,0,63795,0,0,0,64168,0,63853,\n0,64170,0,64169,0,64157,0,0,0,0,0,0,0,63950,0,63803,\n0,64075,0,63815,0,64171,0,63844,0,63877,0,0,0,64024,0,64076,\n0,64078,0,64077,0,64079,0,64080,0,64081,0,64025,0,64026,0,63804,\n0,64082,0,64083,0,64027,0,63926,0,0,0,0,0,63893,0,0,\n0,63830,0,64084,0,0,0,64085,0,64172,0,63991,0,0,0,63992,\n0,64086,0,63910,0,63812,0,0,0,64174,0,63993,0,64029,0,64003,\n0,63867,0,0,0,63951,0,63850,0,63823,0,64175,0,63805,0,63831,\n0,64087,0,64088,0,63824,0,64089,0,0,0,64177,0,0,0,64090,\n0,63974,0,63759,0,0,0,63919,0,64030,0,63796,0,64178,0,0,\n0,0,0,0,0,63920,0,63895,0,63813,0,0,0,0,0,63827,\n0,63782,0,0,0,63990,0,0,0,64092,0,0,0,0,0,0,\n0,0,0,0,0,0,0,63868,0,0,0,0,0,64093,0,63860,\n0,63998,0,64179,0,63806,0,64180,0,63832,0,63768,0,63854,0,64095,\n0,63897,0,63938,0,63779,0,63984,0,63797,0,64032,0,63775,0,63760,\n0,0,0,63798,0,0,0,64181,0,63761,0,63783,0,0,0,64008,\n0,0,0,63904,0,63975,0,63976,0,63762,0,64096,0,64182,0,63780,\n0,0,0,64183,0,64010,0,64097,0,0,0,0,0,63905,0,64185,\n0,64187,0,63869,0,63809,0,64190,0,64034,0,64189,0,64188,0,64099,\n0,63996,0,63834,0,64192,0,0,0,0,0,63744,0,0,0,0,\n0,0,0,0,0,63816,0,0,0,63747,0,64100,0,64101,0,0,\n0,0,0,0,0,63799,0,0,0,63746,0,63896,0,63959,0,64194,\n0,64007,0,63885,0,0,0,63857,0,0,0,64102,0,63898,0,64037,\n0,0,0,64195,0,63939,0,63763,0,0,0,63788,0,64038,0,0,\n0,63769,0,64196,0,63927,0,0,0,63977,0,63870,0,63754,0,63921,\n0,64197,0,63807,0,63899,0,0,0,0,0,63878,0,0,0,63942,\n0,63825,0,64009,0,63833,0,63955,0,64198,0,63964,0,63985,0,0,\n0,63928,0,0,0,63978,0,64199,0,0,0,63922,0,63817,0,63800,\n0,63923,0,0,0,64028,0,0,0,0,0,0,0,0,0,64201,\n0,0,0,0,0,64202,0,0,0,0,0,64203,0,63924,0,64204,\n0,63952,0,0,0,0,0,0,0,64042,0,64043,0,64044,0,0,\n0,0,0,0,0,63770,0,63879,0,0,0,0,0,0,0,64205,\n0,0,0,0,0,0,0,0,0,0,0,63801,0,63986,0,0,\n0,64045,0,63802,0,63776,0,0,0,63808,0,63880,0,63987,0,0,\n0,0,0,0,0,0,0,63881,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,64216,0,0,0,0,0,63940,0,64217,\n0,63752,0,0,0,0,0,0,0,64300,0,0,64301,0,0,64208,\n0,64207,0,64209,0,64213,0,64214,0,64215,0,0,0,0,0,0,\n0};\nstatic const guint8 combiningClass [] = {\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,\n230,230,230,230,230,232,220,220,220,220,232,216,220,220,220,220,\n220,202,202,220,220,220,220,202,202,220,220,220,220,220,220,220,\n220,220,220,220,1,1,1,1,1,220,220,220,220,230,230,230,\n230,230,230,230,230,240,230,220,220,220,230,230,230,220,220,0,\n230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233,\n0,0,0,230,230,230,230,230,0,0,0,0,0,0,0,0,\n0,220,230,230,230,230,220,230,230,230,222,220,230,230,230,230,\n230,230,220,220,220,220,220,220,230,230,220,230,230,222,228,230,\n10,11,12,13,14,15,16,17,18,19,19,20,21,22,0,23,\n0,24,25,0,230,220,0,18,0,0,0,0,0,0,0,0,\n0,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,\n0,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,\n230,230,230,230,230,230,230,230,30,31,32,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,27,28,29,30,31,\n32,33,34,230,230,220,220,230,230,230,230,230,220,230,230,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n35,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,\n0,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,\n0,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,\n0,0,0,0,0,0,230,230,230,230,230,230,230,0,0,230,\n230,230,230,220,230,0,0,230,230,0,220,230,230,220,0,0,\n0,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,\n0,36,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,\n230,220,230,230,220,230,230,220,220,220,230,220,220,230,220,230,\n230,230,220,230,220,230,220,230,220,230,230,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,230,220,230,230,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,84,91,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,\n0,0,0,0,0,0,0,0,103,103,9,0,0,0,0,0,\n0,0,0,0,0,0,0,0,107,107,107,107,0,0,0,0,\n0,0,0,0,0,0,0,0,118,118,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,122,122,122,122,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,220,220,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,220,0,220,0,216,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,129,130,0,132,0,0,0,0,0,130,130,130,130,0,0,\n130,0,230,230,9,0,230,230,0,0,0,0,0,0,0,0,\n0,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,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7,0,9,9,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,230,\n0,0,0,0,9,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,\n0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,\n0,0,9,0,0,0,0,0,0,0,0,0,0,230,0,0,\n0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,222,230,220,0,0,0,0,\n0,0,0,0,0,0,0,230,220,0,0,0,0,0,0,0,\n230,230,220,230,230,230,230,230,230,230,220,230,230,234,214,220,\n230,230,1,1,230,230,230,230,1,1,1,230,230,0,0,0,\n0,230,0,0,0,1,1,230,220,230,1,1,220,220,220,220,\n0,0,0,0,0,0,0,0,0,0,218,228,232,222,224,224,\n0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,\n0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,\n230,230,230,230,230,230,230,0,0,0,0,0,0,0,0,0,\n0};\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/null-gc-handles.h",
    "content": "#ifndef __METADATA_NULL_GC_HANDLES_H__\n#define __METADATA_NULL_GC_HANDLES_H__\n\nvoid\nnull_gc_handles_init (void);\n\n#endif /* __METADATA_NULL_GC_HANDLES_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/number-formatter.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_NUMBER_FORMATTER_H_\n#define _MONO_METADATA_NUMBER_FORMATTER_H_ 1\n\nstatic const guint64 Formatter_MantissaBitsTable [] = {\n\t4556951262222748432ULL, 9113902524445496865ULL, 1822780504889099373ULL, \n\t3645561009778198746ULL, 7291122019556397492ULL, 14582244039112794984ULL, \n\t2916448807822558996ULL, 5832897615645117993ULL, 11665795231290235987ULL, \n\t2333159046258047197ULL, 4666318092516094394ULL, 9332636185032188789ULL, \n\t1866527237006437757ULL, 3733054474012875515ULL, 7466108948025751031ULL, \n\t14932217896051502063ULL, 2986443579210300412ULL, 5972887158420600825ULL, \n\t11945774316841201651ULL, 2389154863368240330ULL, 4778309726736480660ULL, \n\t9556619453472961320ULL, 1911323890694592264ULL, 3822647781389184528ULL, \n\t7645295562778369056ULL, 15290591125556738113ULL, 3058118225111347622ULL, \n\t6116236450222695245ULL, 12232472900445390490ULL, 2446494580089078098ULL, \n\t4892989160178156196ULL, 9785978320356312392ULL, 1957195664071262478ULL, \n\t3914391328142524957ULL, 7828782656285049914ULL, 15657565312570099828ULL, \n\t3131513062514019965ULL, 6263026125028039931ULL, 12526052250056079862ULL, \n\t2505210450011215972ULL, 5010420900022431944ULL, 10020841800044863889ULL, \n\t2004168360008972777ULL, 4008336720017945555ULL, 8016673440035891111ULL, \n\t16033346880071782223ULL, 3206669376014356444ULL, 6413338752028712889ULL, \n\t12826677504057425779ULL, 2565335500811485155ULL, 5130671001622970311ULL, \n\t10261342003245940623ULL, 2052268400649188124ULL, 4104536801298376249ULL, \n\t8209073602596752498ULL, 16418147205193504997ULL, 3283629441038700999ULL, \n\t6567258882077401998ULL, 13134517764154803997ULL, 2626903552830960799ULL, \n\t5253807105661921599ULL, 10507614211323843198ULL, 2101522842264768639ULL, \n\t4203045684529537279ULL, 8406091369059074558ULL, 16812182738118149117ULL, \n\t3362436547623629823ULL, 6724873095247259646ULL, 13449746190494519293ULL, \n\t2689949238098903858ULL, 5379898476197807717ULL, 10759796952395615435ULL, \n\t2151959390479123087ULL, 4303918780958246174ULL, 8607837561916492348ULL, \n\t17215675123832984696ULL, 3443135024766596939ULL, 6886270049533193878ULL, \n\t13772540099066387756ULL, 2754508019813277551ULL, 5509016039626555102ULL, \n\t11018032079253110205ULL, 2203606415850622041ULL, 4407212831701244082ULL, \n\t8814425663402488164ULL, 17628851326804976328ULL, 3525770265360995265ULL, \n\t7051540530721990531ULL, 14103081061443981063ULL, 2820616212288796212ULL, \n\t5641232424577592425ULL, 11282464849155184850ULL, 2256492969831036970ULL, \n\t4512985939662073940ULL, 9025971879324147880ULL, 18051943758648295760ULL, \n\t3610388751729659152ULL, 7220777503459318304ULL, 14441555006918636608ULL, \n\t2888311001383727321ULL, 5776622002767454643ULL, 11553244005534909286ULL, \n\t2310648801106981857ULL, 4621297602213963714ULL, 9242595204427927429ULL, \n\t1848519040885585485ULL, 3697038081771170971ULL, 7394076163542341943ULL, \n\t14788152327084683887ULL, 2957630465416936777ULL, 5915260930833873554ULL, \n\t11830521861667747109ULL, 2366104372333549421ULL, 4732208744667098843ULL, \n\t9464417489334197687ULL, 1892883497866839537ULL, 3785766995733679075ULL, \n\t7571533991467358150ULL, 15143067982934716300ULL, 3028613596586943260ULL, \n\t6057227193173886520ULL, 12114454386347773040ULL, 2422890877269554608ULL, \n\t4845781754539109216ULL, 9691563509078218432ULL, 1938312701815643686ULL, \n\t3876625403631287372ULL, 7753250807262574745ULL, 15506501614525149491ULL, \n\t3101300322905029898ULL, 6202600645810059796ULL, 12405201291620119593ULL, \n\t2481040258324023918ULL, 4962080516648047837ULL, 9924161033296095674ULL, \n\t1984832206659219134ULL, 3969664413318438269ULL, 7939328826636876539ULL, \n\t15878657653273753079ULL, 3175731530654750615ULL, 6351463061309501231ULL, \n\t12702926122619002463ULL, 2540585224523800492ULL, 5081170449047600985ULL, \n\t10162340898095201970ULL, 2032468179619040394ULL, 4064936359238080788ULL, \n\t8129872718476161576ULL, 16259745436952323153ULL, 3251949087390464630ULL, \n\t6503898174780929261ULL, 13007796349561858522ULL, 2601559269912371704ULL, \n\t5203118539824743409ULL, 10406237079649486818ULL, 2081247415929897363ULL, \n\t4162494831859794727ULL, 8324989663719589454ULL, 16649979327439178909ULL, \n\t3329995865487835781ULL, 6659991730975671563ULL, 13319983461951343127ULL, \n\t2663996692390268625ULL, 5327993384780537250ULL, 10655986769561074501ULL, \n\t2131197353912214900ULL, 4262394707824429800ULL, 8524789415648859601ULL, \n\t17049578831297719202ULL, 3409915766259543840ULL, 6819831532519087681ULL, \n\t13639663065038175362ULL, 2727932613007635072ULL, 5455865226015270144ULL, \n\t10911730452030540289ULL, 2182346090406108057ULL, 4364692180812216115ULL, \n\t8729384361624432231ULL, 17458768723248864463ULL, 3491753744649772892ULL, \n\t6983507489299545785ULL, 13967014978599091570ULL, 2793402995719818314ULL, \n\t5586805991439636628ULL, 11173611982879273256ULL, 2234722396575854651ULL, \n\t4469444793151709302ULL, 8938889586303418605ULL, 17877779172606837210ULL, \n\t3575555834521367442ULL, 7151111669042734884ULL, 14302223338085469768ULL, \n\t2860444667617093953ULL, 5720889335234187907ULL, 11441778670468375814ULL, \n\t2288355734093675162ULL, 4576711468187350325ULL, 9153422936374700651ULL, \n\t1830684587274940130ULL, 3661369174549880260ULL, 7322738349099760521ULL, \n\t14645476698199521043ULL, 2929095339639904208ULL, 5858190679279808417ULL, \n\t11716381358559616834ULL, 2343276271711923366ULL, 4686552543423846733ULL, \n\t9373105086847693467ULL, 1874621017369538693ULL, 3749242034739077387ULL, \n\t7498484069478154774ULL, 14996968138956309548ULL, 2999393627791261909ULL, \n\t5998787255582523819ULL, 11997574511165047638ULL, 2399514902233009527ULL, \n\t4799029804466019055ULL, 9598059608932038110ULL, 1919611921786407622ULL, \n\t3839223843572815244ULL, 7678447687145630488ULL, 15356895374291260977ULL, \n\t3071379074858252195ULL, 6142758149716504390ULL, 12285516299433008781ULL, \n\t2457103259886601756ULL, 4914206519773203512ULL, 9828413039546407025ULL, \n\t1965682607909281405ULL, 3931365215818562810ULL, 7862730431637125620ULL, \n\t15725460863274251240ULL, 3145092172654850248ULL, 6290184345309700496ULL, \n\t12580368690619400992ULL, 2516073738123880198ULL, 5032147476247760397ULL, \n\t10064294952495520794ULL, 2012858990499104158ULL, 4025717980998208317ULL, \n\t8051435961996416635ULL, 16102871923992833270ULL, 3220574384798566654ULL, \n\t6441148769597133308ULL, 12882297539194266616ULL, 2576459507838853323ULL, \n\t5152919015677706646ULL, 10305838031355413293ULL, 2061167606271082658ULL, \n\t4122335212542165317ULL, 8244670425084330634ULL, 16489340850168661269ULL, \n\t3297868170033732253ULL, 6595736340067464507ULL, 13191472680134929015ULL, \n\t2638294536026985803ULL, 5276589072053971606ULL, 10553178144107943212ULL, \n\t2110635628821588642ULL, 4221271257643177284ULL, 8442542515286354569ULL, \n\t16885085030572709139ULL, 3377017006114541827ULL, 6754034012229083655ULL, \n\t13508068024458167311ULL, 2701613604891633462ULL, 5403227209783266924ULL, \n\t10806454419566533849ULL, 2161290883913306769ULL, 4322581767826613539ULL, \n\t8645163535653227079ULL, 17290327071306454158ULL, 3458065414261290831ULL, \n\t6916130828522581663ULL, 13832261657045163327ULL, 2766452331409032665ULL, \n\t5532904662818065330ULL, 11065809325636130661ULL, 2213161865127226132ULL, \n\t4426323730254452264ULL, 8852647460508904529ULL, 17705294921017809058ULL, \n\t3541058984203561811ULL, 7082117968407123623ULL, 14164235936814247246ULL, \n\t2832847187362849449ULL, 5665694374725698898ULL, 11331388749451397797ULL, \n\t2266277749890279559ULL, 4532555499780559119ULL, 9065110999561118238ULL, \n\t1813022199912223647ULL, 3626044399824447295ULL, 7252088799648894590ULL, \n\t14504177599297789180ULL, 2900835519859557836ULL, 5801671039719115672ULL, \n\t11603342079438231344ULL, 2320668415887646268ULL, 4641336831775292537ULL, \n\t9282673663550585075ULL, 1856534732710117015ULL, 3713069465420234030ULL, \n\t7426138930840468060ULL, 14852277861680936121ULL, 2970455572336187224ULL, \n\t5940911144672374448ULL, 11881822289344748896ULL, 2376364457868949779ULL, \n\t4752728915737899558ULL, 9505457831475799117ULL, 1901091566295159823ULL, \n\t3802183132590319647ULL, 7604366265180639294ULL, 15208732530361278588ULL, \n\t3041746506072255717ULL, 6083493012144511435ULL, 12166986024289022870ULL, \n\t2433397204857804574ULL, 4866794409715609148ULL, 9733588819431218296ULL, \n\t1946717763886243659ULL, 3893435527772487318ULL, 7786871055544974637ULL, \n\t15573742111089949274ULL, 3114748422217989854ULL, 6229496844435979709ULL, \n\t12458993688871959419ULL, 2491798737774391883ULL, 4983597475548783767ULL, \n\t9967194951097567535ULL, 1993438990219513507ULL, 3986877980439027014ULL, \n\t7973755960878054028ULL, 15947511921756108056ULL, 3189502384351221611ULL, \n\t6379004768702443222ULL, 12758009537404886445ULL, 2551601907480977289ULL, \n\t5103203814961954578ULL, 10206407629923909156ULL, 2041281525984781831ULL, \n\t4082563051969563662ULL, 8165126103939127325ULL, 16330252207878254650ULL, \n\t3266050441575650930ULL, 6532100883151301860ULL, 13064201766302603720ULL, \n\t2612840353260520744ULL, 5225680706521041488ULL, 10451361413042082976ULL, \n\t2090272282608416595ULL, 4180544565216833190ULL, 8361089130433666380ULL, \n\t16722178260867332761ULL, 3344435652173466552ULL, 6688871304346933104ULL, \n\t13377742608693866209ULL, 2675548521738773241ULL, 5351097043477546483ULL, \n\t10702194086955092967ULL, 2140438817391018593ULL, 4280877634782037187ULL, \n\t8561755269564074374ULL, 17123510539128148748ULL, 3424702107825629749ULL, \n\t6849404215651259499ULL, 13698808431302518998ULL, 2739761686260503799ULL, \n\t5479523372521007599ULL, 10959046745042015198ULL, 2191809349008403039ULL, \n\t4383618698016806079ULL, 8767237396033612159ULL, 17534474792067224318ULL, \n\t3506894958413444863ULL, 7013789916826889727ULL, 14027579833653779454ULL, \n\t2805515966730755890ULL, 5611031933461511781ULL, 11222063866923023563ULL, \n\t2244412773384604712ULL, 4488825546769209425ULL, 8977651093538418850ULL, \n\t17955302187076837701ULL, 3591060437415367540ULL, 7182120874830735080ULL, \n\t14364241749661470161ULL, 2872848349932294032ULL, 5745696699864588064ULL, \n\t11491393399729176129ULL, 2298278679945835225ULL, 4596557359891670451ULL, \n\t9193114719783340903ULL, 1838622943956668180ULL, 3677245887913336361ULL, \n\t7354491775826672722ULL, 14708983551653345445ULL, 2941796710330669089ULL, \n\t5883593420661338178ULL, 11767186841322676356ULL, 2353437368264535271ULL, \n\t4706874736529070542ULL, 9413749473058141084ULL, 1882749894611628216ULL, \n\t3765499789223256433ULL, 7530999578446512867ULL, 15061999156893025735ULL, \n\t3012399831378605147ULL, 6024799662757210294ULL, 12049599325514420588ULL, \n\t2409919865102884117ULL, 4819839730205768235ULL, 9639679460411536470ULL, \n\t1927935892082307294ULL, 3855871784164614588ULL, 7711743568329229176ULL, \n\t15423487136658458353ULL, 3084697427331691670ULL, 6169394854663383341ULL, \n\t12338789709326766682ULL, 2467757941865353336ULL, 4935515883730706673ULL, \n\t9871031767461413346ULL, 1974206353492282669ULL, 3948412706984565338ULL, \n\t7896825413969130677ULL, 15793650827938261354ULL, 3158730165587652270ULL, \n\t6317460331175304541ULL, 12634920662350609083ULL, 2526984132470121816ULL, \n\t5053968264940243633ULL, 10107936529880487266ULL, 2021587305976097453ULL, \n\t4043174611952194906ULL, 8086349223904389813ULL, 16172698447808779626ULL, \n\t3234539689561755925ULL, 6469079379123511850ULL, 12938158758247023701ULL, \n\t2587631751649404740ULL, 5175263503298809480ULL, 10350527006597618960ULL, \n\t2070105401319523792ULL, 4140210802639047584ULL, 8280421605278095168ULL, \n\t16560843210556190337ULL, 3312168642111238067ULL, 6624337284222476135ULL, \n\t13248674568444952270ULL, 2649734913688990454ULL, 5299469827377980908ULL, \n\t10598939654755961816ULL, 2119787930951192363ULL, 4239575861902384726ULL, \n\t8479151723804769452ULL, 16958303447609538905ULL, 3391660689521907781ULL, \n\t6783321379043815562ULL, 13566642758087631124ULL, 2713328551617526224ULL, \n\t5426657103235052449ULL, 10853314206470104899ULL, 2170662841294020979ULL, \n\t4341325682588041959ULL, 8682651365176083919ULL, 17365302730352167839ULL, \n\t3473060546070433567ULL, 6946121092140867135ULL, 13892242184281734271ULL, \n\t2778448436856346854ULL, 5556896873712693708ULL, 11113793747425387417ULL, \n\t2222758749485077483ULL, 4445517498970154966ULL, 8891034997940309933ULL, \n\t17782069995880619867ULL, 3556413999176123973ULL, 7112827998352247947ULL, \n\t14225655996704495894ULL, 2845131199340899178ULL, 5690262398681798357ULL, \n\t11380524797363596715ULL, 2276104959472719343ULL, 4552209918945438686ULL, \n\t9104419837890877372ULL, 1820883967578175474ULL, 3641767935156350948ULL, \n\t7283535870312701897ULL, 14567071740625403795ULL, 2913414348125080759ULL, \n\t5826828696250161518ULL, 11653657392500323036ULL, 2330731478500064607ULL, \n\t4661462957000129214ULL, 9322925914000258429ULL, 1864585182800051685ULL, \n\t3729170365600103371ULL, 7458340731200206743ULL, 14916681462400413486ULL, \n\t2983336292480082697ULL, 5966672584960165394ULL, 11933345169920330789ULL, \n\t2386669033984066157ULL, 4773338067968132315ULL, 9546676135936264631ULL, \n\t1909335227187252926ULL, 3818670454374505852ULL, 7637340908749011705ULL, \n\t15274681817498023410ULL, 3054936363499604682ULL, 6109872726999209364ULL, \n\t12219745453998418728ULL, 2443949090799683745ULL, 4887898181599367491ULL, \n\t9775796363198734982ULL, 1955159272639746996ULL, 3910318545279493993ULL, \n\t7820637090558987986ULL, 15641274181117975972ULL, 3128254836223595194ULL, \n\t6256509672447190388ULL, 12513019344894380777ULL, 2502603868978876155ULL, \n\t5005207737957752311ULL, 10010415475915504622ULL, 2002083095183100924ULL, \n\t4004166190366201848ULL, 8008332380732403697ULL, 16016664761464807395ULL, \n\t3203332952292961479ULL, 6406665904585922958ULL, 12813331809171845916ULL, \n\t2562666361834369183ULL, 5125332723668738366ULL, 10250665447337476733ULL, \n\t2050133089467495346ULL, 4100266178934990693ULL, 8200532357869981386ULL, \n\t16401064715739962772ULL, 3280212943147992554ULL, 6560425886295985109ULL, \n\t13120851772591970218ULL, 2624170354518394043ULL, 5248340709036788087ULL, \n\t10496681418073576174ULL, 2099336283614715234ULL, 4198672567229430469ULL, \n\t8397345134458860939ULL, 16794690268917721879ULL, 3358938053783544375ULL, \n\t6717876107567088751ULL, 13435752215134177503ULL, 2687150443026835500ULL, \n\t5374300886053671001ULL, 10748601772107342002ULL, 2149720354421468400ULL, \n\t4299440708842936801ULL, 8598881417685873602ULL, 17197762835371747204ULL, \n\t3439552567074349440ULL, 6879105134148698881ULL, 13758210268297397763ULL, \n\t2751642053659479552ULL, 5503284107318959105ULL, 11006568214637918210ULL, \n\t2201313642927583642ULL, 4402627285855167284ULL, 8805254571710334568ULL, \n\t17610509143420669137ULL, 3522101828684133827ULL, 7044203657368267654ULL, \n\t14088407314736535309ULL, 2817681462947307061ULL, 5635362925894614123ULL, \n\t11270725851789228247ULL, 2254145170357845649ULL, 4508290340715691299ULL, \n\t9016580681431382598ULL, 18033161362862765196ULL, 3606632272572553039ULL, \n\t7213264545145106078ULL, 14426529090290212157ULL, 2885305818058042431ULL, \n\t5770611636116084862ULL, 11541223272232169725ULL, 2308244654446433945ULL, \n\t4616489308892867890ULL, 9232978617785735780ULL, 1846595723557147156ULL, \n\t3693191447114294312ULL, 7386382894228588624ULL, 14772765788457177249ULL, \n\t2954553157691435449ULL, 5909106315382870899ULL, 11818212630765741799ULL, \n\t2363642526153148359ULL, 4727285052306296719ULL, 9454570104612593439ULL, \n\t1890914020922518687ULL, 3781828041845037375ULL, 7563656083690074751ULL, \n\t15127312167380149503ULL, 3025462433476029900ULL, 6050924866952059801ULL, \n\t12101849733904119602ULL, 2420369946780823920ULL, 4840739893561647841ULL, \n\t9681479787123295682ULL, 1936295957424659136ULL, 3872591914849318272ULL, \n\t7745183829698636545ULL, 15490367659397273091ULL, 3098073531879454618ULL, \n\t6196147063758909236ULL, 12392294127517818473ULL, 2478458825503563694ULL, \n\t4956917651007127389ULL, 9913835302014254778ULL, 1982767060402850955ULL, \n\t3965534120805701911ULL, 7931068241611403822ULL, 15862136483222807645ULL, \n\t3172427296644561529ULL, 6344854593289123058ULL, 12689709186578246116ULL, \n\t2537941837315649223ULL, 5075883674631298446ULL, 10151767349262596893ULL, \n\t2030353469852519378ULL, 4060706939705038757ULL, 8121413879410077514ULL, \n\t16242827758820155028ULL, 3248565551764031005ULL, 6497131103528062011ULL, \n\t12994262207056124023ULL, 2598852441411224804ULL, 5197704882822449609ULL, \n\t10395409765644899218ULL, 2079081953128979843ULL, 4158163906257959687ULL, \n\t8316327812515919374ULL, 16632655625031838749ULL, 3326531125006367749ULL, \n\t6653062250012735499ULL, 13306124500025470999ULL, 2661224900005094199ULL, \n\t5322449800010188399ULL, 10644899600020376799ULL, 2128979920004075359ULL, \n\t4257959840008150719ULL, 8515919680016301439ULL, 17031839360032602879ULL, \n\t3406367872006520575ULL, 6812735744013041151ULL, 13625471488026082303ULL, \n\t2725094297605216460ULL, 5450188595210432921ULL, 10900377190420865842ULL, \n\t2180075438084173168ULL, 4360150876168346337ULL, 8720301752336692674ULL, \n\t17440603504673385348ULL, 3488120700934677069ULL, 6976241401869354139ULL, \n\t13952482803738708279ULL, 2790496560747741655ULL, 5580993121495483311ULL, \n\t11161986242990966623ULL, 2232397248598193324ULL, 4464794497196386649ULL, \n\t8929588994392773298ULL, 17859177988785546597ULL, 3571835597757109319ULL, \n\t7143671195514218638ULL, 14287342391028437277ULL, 2857468478205687455ULL, \n\t5714936956411374911ULL, 11429873912822749822ULL, 2285974782564549964ULL, \n\t4571949565129099928ULL, 9143899130258199857ULL, 1828779826051639971ULL, \n\t3657559652103279943ULL, 7315119304206559886ULL, 14630238608413119772ULL, \n\t2926047721682623954ULL, 5852095443365247908ULL, 11704190886730495817ULL, \n\t2340838177346099163ULL, 4681676354692198327ULL, 9363352709384396654ULL, \n\t1872670541876879330ULL, 3745341083753758661ULL, 7490682167507517323ULL, \n\t14981364335015034646ULL, 2996272867003006929ULL, 5992545734006013858ULL, \n\t11985091468012027717ULL, 2397018293602405543ULL, 4794036587204811087ULL, \n\t9588073174409622174ULL, 1917614634881924434ULL, 3835229269763848869ULL, \n\t7670458539527697739ULL, 15340917079055395478ULL, 3068183415811079095ULL, \n\t6136366831622158191ULL, 12272733663244316382ULL, 2454546732648863276ULL, \n\t4909093465297726553ULL, 9818186930595453106ULL, 1963637386119090621ULL, \n\t3927274772238181242ULL, 7854549544476362484ULL, 15709099088952724969ULL, \n\t3141819817790544993ULL, 6283639635581089987ULL, 12567279271162179975ULL, \n\t2513455854232435995ULL, 5026911708464871990ULL, 10053823416929743980ULL, \n\t2010764683385948796ULL, 4021529366771897592ULL, 8043058733543795184ULL, \n\t16086117467087590369ULL, 3217223493417518073ULL, 6434446986835036147ULL, \n\t12868893973670072295ULL, 2573778794734014459ULL, 5147557589468028918ULL, \n\t10295115178936057836ULL, 2059023035787211567ULL, 4118046071574423134ULL, \n\t8236092143148846269ULL, 16472184286297692538ULL, 3294436857259538507ULL, \n\t6588873714519077015ULL, 13177747429038154030ULL, 2635549485807630806ULL, \n\t5271098971615261612ULL, 10542197943230523224ULL, 2108439588646104644ULL, \n\t4216879177292209289ULL, 8433758354584418579ULL, 16867516709168837158ULL, \n\t3373503341833767431ULL, 6747006683667534863ULL, 13494013367335069727ULL, \n\t2698802673467013945ULL, 5397605346934027890ULL, 10795210693868055781ULL, \n\t2159042138773611156ULL, 4318084277547222312ULL, 8636168555094444625ULL, \n\t17272337110188889250ULL, 3454467422037777850ULL, 6908934844075555700ULL, \n\t13817869688151111400ULL, 2763573937630222280ULL, 5527147875260444560ULL, \n\t11054295750520889120ULL, 2210859150104177824ULL, 4421718300208355648ULL, \n\t8843436600416711296ULL, 17686873200833422592ULL, 3537374640166684518ULL, \n\t7074749280333369037ULL, 14149498560666738074ULL, 2829899712133347614ULL, \n\t5659799424266695229ULL, 11319598848533390459ULL, 2263919769706678091ULL, \n\t4527839539413356183ULL, 9055679078826712367ULL, 1811135815765342473ULL, \n\t3622271631530684947ULL, 7244543263061369894ULL, 14489086526122739788ULL, \n\t2897817305224547957ULL, 5795634610449095915ULL, 11591269220898191830ULL, \n\t2318253844179638366ULL, 4636507688359276732ULL, 9273015376718553464ULL, \n\t1854603075343710692ULL, 3709206150687421385ULL, 7418412301374842771ULL, \n\t14836824602749685542ULL, 2967364920549937108ULL, 5934729841099874217ULL, \n\t11869459682199748434ULL, 2373891936439949686ULL, 4747783872879899373ULL, \n\t9495567745759798747ULL, 1899113549151959749ULL, 3798227098303919498ULL, \n\t7596454196607838997ULL, 15192908393215677995ULL, 3038581678643135599ULL, \n\t6077163357286271198ULL, 12154326714572542396ULL, 2430865342914508479ULL, \n\t4861730685829016958ULL, 9723461371658033917ULL, 1944692274331606783ULL, \n\t3889384548663213566ULL, 7778769097326427133ULL, 15557538194652854267ULL, \n\t3111507638930570853ULL, 6223015277861141707ULL, 12446030555722283414ULL, \n\t2489206111144456682ULL, 4978412222288913365ULL, 9956824444577826731ULL, \n\t1991364888915565346ULL, 3982729777831130692ULL, 7965459555662261385ULL, \n\t15930919111324522770ULL, 3186183822264904554ULL, 6372367644529809108ULL, \n\t12744735289059618216ULL, 2548947057811923643ULL, 5097894115623847286ULL, \n\t10195788231247694572ULL, 2039157646249538914ULL, 4078315292499077829ULL, \n\t8156630584998155658ULL, 16313261169996311316ULL, 3262652233999262263ULL, \n\t6525304467998524526ULL, 13050608935997049053ULL, 2610121787199409810ULL, \n\t5220243574398819621ULL, 10440487148797639242ULL, 2088097429759527848ULL, \n\t4176194859519055697ULL, 8352389719038111394ULL, 16704779438076222788ULL, \n\t3340955887615244557ULL, 6681911775230489115ULL, 13363823550460978230ULL, \n\t2672764710092195646ULL, 5345529420184391292ULL, 10691058840368782584ULL, \n\t2138211768073756516ULL, 4276423536147513033ULL, 8552847072295026067ULL, \n\t17105694144590052135ULL, 3421138828918010427ULL, 6842277657836020854ULL, \n\t13684555315672041708ULL, 2736911063134408341ULL, 5473822126268816683ULL, \n\t10947644252537633366ULL, 2189528850507526673ULL, 4379057701015053346ULL, \n\t8758115402030106693ULL, 17516230804060213386ULL, 3503246160812042677ULL, \n\t7006492321624085354ULL, 14012984643248170709ULL, 2802596928649634141ULL, \n\t5605193857299268283ULL, 11210387714598536567ULL, 2242077542919707313ULL, \n\t4484155085839414626ULL, 8968310171678829253ULL, 17936620343357658507ULL, \n\t3587324068671531701ULL, 7174648137343063403ULL, 14349296274686126806ULL, \n\t2869859254937225361ULL, 5739718509874450722ULL, 11479437019748901445ULL, \n\t2295887403949780289ULL, 4591774807899560578ULL, 9183549615799121156ULL, \n\t1836709923159824231ULL, 3673419846319648462ULL, 7346839692639296924ULL, \n\t14693679385278593849ULL, 2938735877055718769ULL, 5877471754111437539ULL, \n\t11754943508222875079ULL, 2350988701644575015ULL, 4701977403289150031ULL, \n\t9403954806578300063ULL, 1880790961315660012ULL, 3761581922631320025ULL, \n\t7523163845262640050ULL, 15046327690525280101ULL, 3009265538105056020ULL, \n\t6018531076210112040ULL, 12037062152420224081ULL, 2407412430484044816ULL, \n\t4814824860968089632ULL, 9629649721936179265ULL, 1925929944387235853ULL, \n\t3851859888774471706ULL, 7703719777548943412ULL, 15407439555097886824ULL, \n\t3081487911019577364ULL, 6162975822039154729ULL, 12325951644078309459ULL, \n\t2465190328815661891ULL, 4930380657631323783ULL, 9860761315262647567ULL, \n\t1972152263052529513ULL, 3944304526105059027ULL, 7888609052210118054ULL, \n\t15777218104420236108ULL, 3155443620884047221ULL, 6310887241768094443ULL, \n\t12621774483536188886ULL, 2524354896707237777ULL, 5048709793414475554ULL, \n\t10097419586828951109ULL, 2019483917365790221ULL, 4038967834731580443ULL, \n\t8077935669463160887ULL, 16155871338926321774ULL, 3231174267785264354ULL, \n\t6462348535570528709ULL, 12924697071141057419ULL, 2584939414228211483ULL, \n\t5169878828456422967ULL, 10339757656912845935ULL, 2067951531382569187ULL, \n\t4135903062765138374ULL, 8271806125530276748ULL, 16543612251060553497ULL, \n\t3308722450212110699ULL, 6617444900424221398ULL, 13234889800848442797ULL, \n\t2646977960169688559ULL, 5293955920339377119ULL, 10587911840678754238ULL, \n\t2117582368135750847ULL, 4235164736271501695ULL, 8470329472543003390ULL, \n\t16940658945086006781ULL, 3388131789017201356ULL, 6776263578034402712ULL, \n\t13552527156068805425ULL, 2710505431213761085ULL, 5421010862427522170ULL, \n\t10842021724855044340ULL, 2168404344971008868ULL, 4336808689942017736ULL, \n\t8673617379884035472ULL, 17347234759768070944ULL, 3469446951953614188ULL, \n\t6938893903907228377ULL, 13877787807814456755ULL, 2775557561562891351ULL, \n\t5551115123125782702ULL, 11102230246251565404ULL, 2220446049250313080ULL, \n\t4440892098500626161ULL, 8881784197001252323ULL, 17763568394002504646ULL, \n\t3552713678800500929ULL, 7105427357601001858ULL, 14210854715202003717ULL, \n\t2842170943040400743ULL, 5684341886080801486ULL, 11368683772161602973ULL, \n\t2273736754432320594ULL, 4547473508864641189ULL, 9094947017729282379ULL, \n\t1818989403545856475ULL, 3637978807091712951ULL, 7275957614183425903ULL, \n\t14551915228366851806ULL, 2910383045673370361ULL, 5820766091346740722ULL, \n\t11641532182693481445ULL, 2328306436538696289ULL, 4656612873077392578ULL, \n\t9313225746154785156ULL, 1862645149230957031ULL, 3725290298461914062ULL, \n\t7450580596923828125ULL, 14901161193847656250ULL, 2980232238769531250ULL, \n\t5960464477539062500ULL, 11920928955078125000ULL, 2384185791015625000ULL, \n\t4768371582031250000ULL, 9536743164062500000ULL, 1907348632812500000ULL, \n\t3814697265625000000ULL, 7629394531250000000ULL, 15258789062500000000ULL, \n\t3051757812500000000ULL, 6103515625000000000ULL, 12207031250000000000ULL, \n\t2441406250000000000ULL, 4882812500000000000ULL, 9765625000000000000ULL, \n\t1953125000000000000ULL, 3906250000000000000ULL, 7812500000000000000ULL, \n\t15625000000000000000ULL, 3125000000000000000ULL, 6250000000000000000ULL, \n\t12500000000000000000ULL, 2500000000000000000ULL, 5000000000000000000ULL, \n\t10000000000000000000ULL, 2000000000000000000ULL, 4000000000000000000ULL, \n\t8000000000000000000ULL, 16000000000000000000ULL, 3200000000000000000ULL, \n\t6400000000000000000ULL, 12800000000000000000ULL, 2560000000000000000ULL, \n\t5120000000000000000ULL, 10240000000000000000ULL, 2048000000000000000ULL, \n\t4096000000000000000ULL, 8192000000000000000ULL, 16384000000000000000ULL, \n\t3276800000000000000ULL, 6553600000000000000ULL, 13107200000000000000ULL, \n\t2621440000000000000ULL, 5242880000000000000ULL, 10485760000000000000ULL, \n\t2097152000000000000ULL, 4194304000000000000ULL, 8388608000000000000ULL, \n\t16777216000000000000ULL, 3355443200000000000ULL, 6710886400000000000ULL, \n\t13421772800000000000ULL, 2684354560000000000ULL, 5368709120000000000ULL, \n\t10737418240000000000ULL, 2147483648000000000ULL, 4294967296000000000ULL, \n\t8589934592000000000ULL, 17179869184000000000ULL, 3435973836800000000ULL, \n\t6871947673600000000ULL, 13743895347200000000ULL, 2748779069440000000ULL, \n\t5497558138880000000ULL, 10995116277760000000ULL, 2199023255552000000ULL, \n\t4398046511104000000ULL, 8796093022208000000ULL, 17592186044416000000ULL, \n\t3518437208883200000ULL, 7036874417766400000ULL, 14073748835532800000ULL, \n\t2814749767106560000ULL, 5629499534213120000ULL, 11258999068426240000ULL, \n\t2251799813685248000ULL, 4503599627370496000ULL, 9007199254740992000ULL, \n\t18014398509481984000ULL, 3602879701896396800ULL, 7205759403792793600ULL, \n\t14411518807585587200ULL, 2882303761517117440ULL, 5764607523034234880ULL, \n\t11529215046068469760ULL, 2305843009213693952ULL, 4611686018427387904ULL, \n\t9223372036854775808ULL, 1844674407370955161ULL, 3689348814741910323ULL, \n\t7378697629483820646ULL, 14757395258967641292ULL, 2951479051793528258ULL, \n\t5902958103587056517ULL, 11805916207174113034ULL, 2361183241434822606ULL, \n\t4722366482869645213ULL, 9444732965739290427ULL, 1888946593147858085ULL, \n\t3777893186295716170ULL, 7555786372591432341ULL, 15111572745182864683ULL, \n\t3022314549036572936ULL, 6044629098073145873ULL, 12089258196146291747ULL, \n\t2417851639229258349ULL, 4835703278458516698ULL, 9671406556917033397ULL, \n\t1934281311383406679ULL, 3868562622766813359ULL, 7737125245533626718ULL, \n\t15474250491067253436ULL, 3094850098213450687ULL, 6189700196426901374ULL, \n\t12379400392853802748ULL, 2475880078570760549ULL, 4951760157141521099ULL, \n\t9903520314283042199ULL, 1980704062856608439ULL, 3961408125713216879ULL, \n\t7922816251426433759ULL, 15845632502852867518ULL, 3169126500570573503ULL, \n\t6338253001141147007ULL, 12676506002282294014ULL, 2535301200456458802ULL, \n\t5070602400912917605ULL, 10141204801825835211ULL, 2028240960365167042ULL, \n\t4056481920730334084ULL, 8112963841460668169ULL, 16225927682921336339ULL, \n\t3245185536584267267ULL, 6490371073168534535ULL, 12980742146337069071ULL, \n\t2596148429267413814ULL, 5192296858534827628ULL, 10384593717069655257ULL, \n\t2076918743413931051ULL, 4153837486827862102ULL, 8307674973655724205ULL, \n\t16615349947311448411ULL, 3323069989462289682ULL, 6646139978924579364ULL, \n\t13292279957849158729ULL, 2658455991569831745ULL, 5316911983139663491ULL, \n\t10633823966279326983ULL, 2126764793255865396ULL, 4253529586511730793ULL, \n\t8507059173023461586ULL, 17014118346046923173ULL, 3402823669209384634ULL, \n\t6805647338418769269ULL, 13611294676837538538ULL, 2722258935367507707ULL, \n\t5444517870735015415ULL, 10889035741470030830ULL, 2177807148294006166ULL, \n\t4355614296588012332ULL, 8711228593176024664ULL, 17422457186352049329ULL, \n\t3484491437270409865ULL, 6968982874540819731ULL, 13937965749081639463ULL, \n\t2787593149816327892ULL, 5575186299632655785ULL, 11150372599265311570ULL, \n\t2230074519853062314ULL, 4460149039706124628ULL, 8920298079412249256ULL, \n\t17840596158824498513ULL, 3568119231764899702ULL, 7136238463529799405ULL, \n\t14272476927059598810ULL, 2854495385411919762ULL, 5708990770823839524ULL, \n\t11417981541647679048ULL, 2283596308329535809ULL, 4567192616659071619ULL, \n\t9134385233318143238ULL, 1826877046663628647ULL, 3653754093327257295ULL, \n\t7307508186654514591ULL, 14615016373309029182ULL, 2923003274661805836ULL, \n\t5846006549323611672ULL, 11692013098647223345ULL, 2338402619729444669ULL, \n\t4676805239458889338ULL, 9353610478917778676ULL, 1870722095783555735ULL, \n\t3741444191567111470ULL, 7482888383134222941ULL, 14965776766268445882ULL, \n\t2993155353253689176ULL, 5986310706507378352ULL, 11972621413014756705ULL, \n\t2394524282602951341ULL, 4789048565205902682ULL, 9578097130411805364ULL, \n\t1915619426082361072ULL, 3831238852164722145ULL, 7662477704329444291ULL, \n\t15324955408658888583ULL, 3064991081731777716ULL, 6129982163463555433ULL, \n\t12259964326927110866ULL, 2451992865385422173ULL, 4903985730770844346ULL, \n\t9807971461541688693ULL, 1961594292308337738ULL, 3923188584616675477ULL, \n\t7846377169233350954ULL, 15692754338466701909ULL, 3138550867693340381ULL, \n\t6277101735386680763ULL, 12554203470773361527ULL, 2510840694154672305ULL, \n\t5021681388309344611ULL, 10043362776618689222ULL, 2008672555323737844ULL, \n\t4017345110647475688ULL, 8034690221294951377ULL, 16069380442589902755ULL, \n\t3213876088517980551ULL, 6427752177035961102ULL, 12855504354071922204ULL, \n\t2571100870814384440ULL, 5142201741628768881ULL, 10284403483257537763ULL, \n\t2056880696651507552ULL, 4113761393303015105ULL, 8227522786606030210ULL, \n\t16455045573212060421ULL, 3291009114642412084ULL, 6582018229284824168ULL, \n\t13164036458569648337ULL, 2632807291713929667ULL, 5265614583427859334ULL, \n\t10531229166855718669ULL, 2106245833371143733ULL, 4212491666742287467ULL, \n\t8424983333484574935ULL, 16849966666969149871ULL, 3369993333393829974ULL, \n\t6739986666787659948ULL, 13479973333575319897ULL, 2695994666715063979ULL, \n\t5391989333430127958ULL, 10783978666860255917ULL, 2156795733372051183ULL, \n\t4313591466744102367ULL, 8627182933488204734ULL, 17254365866976409468ULL, \n\t3450873173395281893ULL, 6901746346790563787ULL, 13803492693581127574ULL, \n\t2760698538716225514ULL, 5521397077432451029ULL, 11042794154864902059ULL, \n\t2208558830972980411ULL, 4417117661945960823ULL, 8834235323891921647ULL, \n\t17668470647783843295ULL, 3533694129556768659ULL, 7067388259113537318ULL, \n\t14134776518227074636ULL, 2826955303645414927ULL, 5653910607290829854ULL, \n\t11307821214581659709ULL, 2261564242916331941ULL, 4523128485832663883ULL, \n\t9046256971665327767ULL, 18092513943330655534ULL, 3618502788666131106ULL, \n\t7237005577332262213ULL, 14474011154664524427ULL, 2894802230932904885ULL, \n\t5789604461865809771ULL, 11579208923731619542ULL, 2315841784746323908ULL, \n\t4631683569492647816ULL, 9263367138985295633ULL, 1852673427797059126ULL, \n\t3705346855594118253ULL, 7410693711188236507ULL, 14821387422376473014ULL, \n\t2964277484475294602ULL, 5928554968950589205ULL, 11857109937901178411ULL, \n\t2371421987580235682ULL, 4742843975160471364ULL, 9485687950320942729ULL, \n\t1897137590064188545ULL, 3794275180128377091ULL, 7588550360256754183ULL, \n\t15177100720513508366ULL, 3035420144102701673ULL, 6070840288205403346ULL, \n\t12141680576410806693ULL, 2428336115282161338ULL, 4856672230564322677ULL, \n\t9713344461128645354ULL, 1942668892225729070ULL, 3885337784451458141ULL, \n\t7770675568902916283ULL, 15541351137805832567ULL, 3108270227561166513ULL, \n\t6216540455122333026ULL, 12433080910244666053ULL, 2486616182048933210ULL, \n\t4973232364097866421ULL, 9946464728195732843ULL, 1989292945639146568ULL, \n\t3978585891278293137ULL, 7957171782556586274ULL, 15914343565113172548ULL, \n\t3182868713022634509ULL, 6365737426045269019ULL, 12731474852090538039ULL, \n\t2546294970418107607ULL, 5092589940836215215ULL, 10185179881672430431ULL, \n\t2037035976334486086ULL, 4074071952668972172ULL, 8148143905337944345ULL, \n\t16296287810675888690ULL, 3259257562135177738ULL, 6518515124270355476ULL, \n\t13037030248540710952ULL, 2607406049708142190ULL, 5214812099416284380ULL, \n\t10429624198832568761ULL, 2085924839766513752ULL, 4171849679533027504ULL, \n\t8343699359066055009ULL, 16687398718132110018ULL, 3337479743626422003ULL, \n\t6674959487252844007ULL, 13349918974505688014ULL, 2669983794901137602ULL, \n\t5339967589802275205ULL, 10679935179604550411ULL, 2135987035920910082ULL, \n\t4271974071841820164ULL, 8543948143683640329ULL, 17087896287367280659ULL, \n\t3417579257473456131ULL, 6835158514946912263ULL, 13670317029893824527ULL, \n\t2734063405978764905ULL, 5468126811957529810ULL, 10936253623915059621ULL, \n\t2187250724783011924ULL, 4374501449566023848ULL, 8749002899132047697ULL, \n\t17498005798264095394ULL, 3499601159652819078ULL, 6999202319305638157ULL, \n\t13998404638611276315ULL, 2799680927722255263ULL, 5599361855444510526ULL, \n\t11198723710889021052ULL, 2239744742177804210ULL, 4479489484355608421ULL, \n\t8958978968711216842ULL, 17917957937422433684ULL, 3583591587484486736ULL, \n\t7167183174968973473ULL, 14334366349937946947ULL, 2866873269987589389ULL, \n\t5733746539975178779ULL, 11467493079950357558ULL, 2293498615990071511ULL, \n\t4586997231980143023ULL, 9173994463960286046ULL, 1834798892792057209ULL, \n\t3669597785584114418ULL, 7339195571168228837ULL, 14678391142336457674ULL, \n\t2935678228467291534ULL, 5871356456934583069ULL, 11742712913869166139ULL, \n\t2348542582773833227ULL, 4697085165547666455ULL, 9394170331095332911ULL, \n\t1878834066219066582ULL, 3757668132438133164ULL, 7515336264876266329ULL, \n\t15030672529752532658ULL, 3006134505950506531ULL, 6012269011901013063ULL, \n\t12024538023802026126ULL, 2404907604760405225ULL, 4809815209520810450ULL, \n\t9619630419041620901ULL, 1923926083808324180ULL, 3847852167616648360ULL, \n\t7695704335233296721ULL, 15391408670466593442ULL, 3078281734093318688ULL, \n\t6156563468186637376ULL, 12313126936373274753ULL, 2462625387274654950ULL, \n\t4925250774549309901ULL, 9850501549098619803ULL, 1970100309819723960ULL, \n\t3940200619639447921ULL, 7880401239278895842ULL, 15760802478557791684ULL, \n\t3152160495711558336ULL, 6304320991423116673ULL, 12608641982846233347ULL, \n\t2521728396569246669ULL, 5043456793138493339ULL, 10086913586276986678ULL, \n\t2017382717255397335ULL, 4034765434510794671ULL, 8069530869021589342ULL, \n\t16139061738043178685ULL, 3227812347608635737ULL, 6455624695217271474ULL, \n\t12911249390434542948ULL, 2582249878086908589ULL, 5164499756173817179ULL, \n\t10328999512347634358ULL, 2065799902469526871ULL, 4131599804939053743ULL, \n\t8263199609878107486ULL, 16526399219756214973ULL, 3305279843951242994ULL, \n\t6610559687902485989ULL, 13221119375804971979ULL, 2644223875160994395ULL, \n\t5288447750321988791ULL, 10576895500643977583ULL, 2115379100128795516ULL, \n\t4230758200257591033ULL, 8461516400515182066ULL, 16923032801030364133ULL, \n\t3384606560206072826ULL, 6769213120412145653ULL, 13538426240824291306ULL, \n\t2707685248164858261ULL, 5415370496329716522ULL, 10830740992659433045ULL, \n\t2166148198531886609ULL, 4332296397063773218ULL, 8664592794127546436ULL, \n\t17329185588255092872ULL, 3465837117651018574ULL, 6931674235302037148ULL, \n\t13863348470604074297ULL, 2772669694120814859ULL, 5545339388241629719ULL, \n\t11090678776483259438ULL, 2218135755296651887ULL, 4436271510593303775ULL, \n\t8872543021186607550ULL, 17745086042373215101ULL, 3549017208474643020ULL, \n\t7098034416949286040ULL, 14196068833898572081ULL, 2839213766779714416ULL, \n\t5678427533559428832ULL, 11356855067118857664ULL, 2271371013423771532ULL, \n\t4542742026847543065ULL, 9085484053695086131ULL, 1817096810739017226ULL, \n\t3634193621478034452ULL, 7268387242956068905ULL, 14536774485912137810ULL, \n\t2907354897182427562ULL, 5814709794364855124ULL, 11629419588729710248ULL, \n\t2325883917745942049ULL, 4651767835491884099ULL, 9303535670983768199ULL, \n\t1860707134196753639ULL, 3721414268393507279ULL, 7442828536787014559ULL, \n\t14885657073574029118ULL, 2977131414714805823ULL, 5954262829429611647ULL, \n\t11908525658859223294ULL, 2381705131771844658ULL, 4763410263543689317ULL, \n\t9526820527087378635ULL, 1905364105417475727ULL, 3810728210834951454ULL, \n\t7621456421669902908ULL, 15242912843339805817ULL, 3048582568667961163ULL, \n\t6097165137335922326ULL, 12194330274671844653ULL, 2438866054934368930ULL, \n\t4877732109868737861ULL, 9755464219737475723ULL, 1951092843947495144ULL, \n\t3902185687894990289ULL, 7804371375789980578ULL, 15608742751579961156ULL, \n\t3121748550315992231ULL, 6243497100631984462ULL, 12486994201263968925ULL, \n\t2497398840252793785ULL, 4994797680505587570ULL, 9989595361011175140ULL, \n\t1997919072202235028ULL, 3995838144404470056ULL, 7991676288808940112ULL, \n\t15983352577617880224ULL, 3196670515523576044ULL, 6393341031047152089ULL, \n\t12786682062094304179ULL, 2557336412418860835ULL, 5114672824837721671ULL, \n\t10229345649675443343ULL, 2045869129935088668ULL, 4091738259870177337ULL, \n\t8183476519740354675ULL, 16366953039480709350ULL, 3273390607896141870ULL, \n\t6546781215792283740ULL, 13093562431584567480ULL, 2618712486316913496ULL, \n\t5237424972633826992ULL, 10474849945267653984ULL, 2094969989053530796ULL, \n\t4189939978107061593ULL, 8379879956214123187ULL, 16759759912428246374ULL, \n\t3351951982485649274ULL, 6703903964971298549ULL, 13407807929942597099ULL, \n\t2681561585988519419ULL, 5363123171977038839ULL, 10726246343954077679ULL, \n\t2145249268790815535ULL, 4290498537581631071ULL, 8580997075163262143ULL, \n\t17161994150326524287ULL, 3432398830065304857ULL, 6864797660130609714ULL, \n\t13729595320261219429ULL, 2745919064052243885ULL, 5491838128104487771ULL, \n\t10983676256208975543ULL, 2196735251241795108ULL, 4393470502483590217ULL, \n\t8786941004967180435ULL, 17573882009934360870ULL, 3514776401986872174ULL, \n\t7029552803973744348ULL, 14059105607947488696ULL, 2811821121589497739ULL, \n\t5623642243178995478ULL, 11247284486357990957ULL, 2249456897271598191ULL, \n\t4498913794543196382ULL, 8997827589086392765ULL, 17995655178172785531ULL, \n\t3599131035634557106ULL, 7198262071269114212ULL, 14396524142538228424ULL, \n\t2879304828507645684ULL, 5758609657015291369ULL, 11517219314030582739ULL, \n\t2303443862806116547ULL, 4606887725612233095ULL, 9213775451224466191ULL, \n\t1842755090244893238ULL, 3685510180489786476ULL, 7371020360979572953ULL, \n\t14742040721959145907ULL, 2948408144391829181ULL, 5896816288783658362ULL, \n\t11793632577567316725ULL, 2358726515513463345ULL, 4717453031026926690ULL, \n\t9434906062053853380ULL, 1886981212410770676ULL, 3773962424821541352ULL, \n\t7547924849643082704ULL, 15095849699286165408ULL, 3019169939857233081ULL, \n\t6038339879714466163ULL, 12076679759428932327ULL, 2415335951885786465ULL, \n\t4830671903771572930ULL, 9661343807543145861ULL, 1932268761508629172ULL, \n\t3864537523017258344ULL, 7729075046034516689ULL, 15458150092069033378ULL, \n\t3091630018413806675ULL, 6183260036827613351ULL, 12366520073655226703ULL, \n\t2473304014731045340ULL, 4946608029462090681ULL, 9893216058924181362ULL, \n\t1978643211784836272ULL, 3957286423569672544ULL, 7914572847139345089ULL, \n\t15829145694278690179ULL, 3165829138855738035ULL, 6331658277711476071ULL, \n\t12663316555422952143ULL, 2532663311084590428ULL, 5065326622169180857ULL, \n\t10130653244338361715ULL, 2026130648867672343ULL, 4052261297735344686ULL, \n\t8104522595470689372ULL, 16209045190941378744ULL, 3241809038188275748ULL, \n\t6483618076376551497ULL, 12967236152753102995ULL, 2593447230550620599ULL, \n\t5186894461101241198ULL, 10373788922202482396ULL, 2074757784440496479ULL, \n\t4149515568880992958ULL, 8299031137761985917ULL, 16598062275523971834ULL, \n\t3319612455104794366ULL, 6639224910209588733ULL, 13278449820419177467ULL, \n\t2655689964083835493ULL, 5311379928167670986ULL, 10622759856335341973ULL, \n\t2124551971267068394ULL, 4249103942534136789ULL, 8498207885068273579ULL, \n\t16996415770136547158ULL, 3399283154027309431ULL, 6798566308054618863ULL, \n\t13597132616109237726ULL, 2719426523221847545ULL, 5438853046443695090ULL, \n\t10877706092887390181ULL, 2175541218577478036ULL, 4351082437154956072ULL, \n\t8702164874309912144ULL, 17404329748619824289ULL, 3480865949723964857ULL, \n\t6961731899447929715ULL, 13923463798895859431ULL, 2784692759779171886ULL, \n\t5569385519558343772ULL, 11138771039116687545ULL, 2227754207823337509ULL, \n\t4455508415646675018ULL, 8911016831293350036ULL, 17822033662586700072ULL, \n\t3564406732517340014ULL, 7128813465034680029ULL, 14257626930069360058ULL, \n\t2851525386013872011ULL, 5703050772027744023ULL, 11406101544055488046ULL, \n\t2281220308811097609ULL, 4562440617622195218ULL, 9124881235244390437ULL, \n\t1824976247048878087ULL, 3649952494097756174ULL, 7299904988195512349ULL, \n\t14599809976391024699ULL, 2919961995278204939ULL, 5839923990556409879ULL, \n\t11679847981112819759ULL, 2335969596222563951ULL, 4671939192445127903ULL, \n\t9343878384890255807ULL, 1868775676978051161ULL, 3737551353956102323ULL, \n\t7475102707912204646ULL, 14950205415824409292ULL, 2990041083164881858ULL, \n\t5980082166329763716ULL, 11960164332659527433ULL, 2392032866531905486ULL, \n\t4784065733063810973ULL, 9568131466127621947ULL, 1913626293225524389ULL, \n\t3827252586451048778ULL, 7654505172902097557ULL, 15309010345804195115ULL, \n\t3061802069160839023ULL, 6123604138321678046ULL, 12247208276643356092ULL, \n\t2449441655328671218ULL, 4898883310657342436ULL, 9797766621314684873ULL, \n\t1959553324262936974ULL, 3919106648525873949ULL, 7838213297051747899ULL, \n\t15676426594103495798ULL, 3135285318820699159ULL, 6270570637641398319ULL, \n\t12541141275282796638ULL, 2508228255056559327ULL, 5016456510113118655ULL, \n\t10032913020226237310ULL, 2006582604045247462ULL, 4013165208090494924ULL, \n\t8026330416180989848ULL, 16052660832361979697ULL, 3210532166472395939ULL, \n\t6421064332944791878ULL, 12842128665889583757ULL, 2568425733177916751ULL, \n\t5136851466355833503ULL, 10273702932711667006ULL, 2054740586542333401ULL, \n\t4109481173084666802ULL, 8218962346169333605ULL, 16437924692338667210ULL, \n\t3287584938467733442ULL, 6575169876935466884ULL, 13150339753870933768ULL, \n\t2630067950774186753ULL, 5260135901548373507ULL, 10520271803096747014ULL, \n\t2104054360619349402ULL, 4208108721238698805ULL, 8416217442477397611ULL, \n\t16832434884954795223ULL, 3366486976990959044ULL, 6732973953981918089ULL, \n\t13465947907963836178ULL, 2693189581592767235ULL, 5386379163185534471ULL, \n\t10772758326371068942ULL, 2154551665274213788ULL, 4309103330548427577ULL, \n\t8618206661096855154ULL, 17236413322193710308ULL, 3447282664438742061ULL, \n\t6894565328877484123ULL, 13789130657754968246ULL, 2757826131550993649ULL, \n\t5515652263101987298ULL, 11031304526203974597ULL, 2206260905240794919ULL, \n\t4412521810481589838ULL, 8825043620963179677ULL, 17650087241926359355ULL, \n\t3530017448385271871ULL, 7060034896770543742ULL, 14120069793541087484ULL, \n\t2824013958708217496ULL, 5648027917416434993ULL, 11296055834832869987ULL, \n\t2259211166966573997ULL, 4518422333933147995ULL, 9036844667866295990ULL, \n\t18073689335732591980ULL, 3614737867146518396ULL, 7229475734293036792ULL, \n\t14458951468586073584ULL, 2891790293717214716ULL, 5783580587434429433ULL, \n\t11567161174868858867ULL, 2313432234973771773ULL, 4626864469947543547ULL, \n\t9253728939895087094ULL, 1850745787979017418ULL, 3701491575958034837ULL, \n\t7402983151916069675ULL, 14805966303832139350ULL, 2961193260766427870ULL, \n\t5922386521532855740ULL, 11844773043065711480ULL, 2368954608613142296ULL, \n\t4737909217226284592ULL, 9475818434452569184ULL, 1895163686890513836ULL, \n\t3790327373781027673ULL, 7580654747562055347ULL, 15161309495124110694ULL, \n\t3032261899024822138ULL, 6064523798049644277ULL, 12129047596099288555ULL, \n\t2425809519219857711ULL, 4851619038439715422ULL, 9703238076879430844ULL, \n\t1940647615375886168ULL, 3881295230751772337ULL, 7762590461503544675ULL, \n\t15525180923007089351ULL, 3105036184601417870ULL, 6210072369202835740ULL, \n\t12420144738405671481ULL, 2484028947681134296ULL, 4968057895362268592ULL, \n\t9936115790724537184ULL, 1987223158144907436ULL, 3974446316289814873ULL, \n\t7948892632579629747ULL, 15897785265159259495ULL, 3179557053031851899ULL, \n\t6359114106063703798ULL, 12718228212127407596ULL, 2543645642425481519ULL, \n\t5087291284850963038ULL, 10174582569701926077ULL, 2034916513940385215ULL, \n\t4069833027880770430ULL, 8139666055761540861ULL, 16279332111523081723ULL, \n\t3255866422304616344ULL, 6511732844609232689ULL, 13023465689218465379ULL, \n\t2604693137843693075ULL, 5209386275687386151ULL, 10418772551374772303ULL, \n\t2083754510274954460ULL, 4167509020549908921ULL, 8335018041099817842ULL, \n\t16670036082199635685ULL, 3334007216439927137ULL, 6668014432879854274ULL, \n\t13336028865759708548ULL, 2667205773151941709ULL, 5334411546303883419ULL, \n\t10668823092607766838ULL, 2133764618521553367ULL, 4267529237043106735ULL, \n\t8535058474086213470ULL, 17070116948172426941ULL, 3414023389634485388ULL, \n\t6828046779268970776ULL, 13656093558537941553ULL, 2731218711707588310ULL, \n\t5462437423415176621ULL, 10924874846830353242ULL, 2184974969366070648ULL, \n\t4369949938732141297ULL, 8739899877464282594ULL, 17479799754928565188ULL, \n\t3495959950985713037ULL, 6991919901971426075ULL, 13983839803942852150ULL, \n\t2796767960788570430ULL, 5593535921577140860ULL, 11187071843154281720ULL, \n\t2237414368630856344ULL, 4474828737261712688ULL, 8949657474523425376ULL, \n\t17899314949046850752ULL, 3579862989809370150ULL, 7159725979618740301ULL, \n\t14319451959237480602ULL, 2863890391847496120ULL, 5727780783694992240ULL, \n\t11455561567389984481ULL, 2291112313477996896ULL, 4582224626955993792ULL, \n\t9164449253911987585ULL, 1832889850782397517ULL, 3665779701564795034ULL, \n\t7331559403129590068ULL, 14663118806259180136ULL, 2932623761251836027ULL, \n\t5865247522503672054ULL, 11730495045007344109ULL, 2346099009001468821ULL, \n\t4692198018002937643ULL, 9384396036005875287ULL, 1876879207201175057ULL, \n\t3753758414402350114ULL, 7507516828804700229ULL, 15015033657609400459ULL, \n\t3003006731521880091ULL, 6006013463043760183ULL, 12012026926087520367ULL, \n\t2402405385217504073ULL, 4804810770435008147ULL, 9609621540870016294ULL, \n\t1921924308174003258ULL, 3843848616348006517ULL, 7687697232696013035ULL, \n\t15375394465392026070ULL, 3075078893078405214ULL, 6150157786156810428ULL, \n\t12300315572313620856ULL, 2460063114462724171ULL, 4920126228925448342ULL, \n\t9840252457850896685ULL, 1968050491570179337ULL, 3936100983140358674ULL, \n\t7872201966280717348ULL, 15744403932561434696ULL, 3148880786512286939ULL, \n\t6297761573024573878ULL, 12595523146049147757ULL, 2519104629209829551ULL, \n\t5038209258419659102ULL, 10076418516839318205ULL, 2015283703367863641ULL, \n\t4030567406735727282ULL, 8061134813471454564ULL, 16122269626942909129ULL, \n\t3224453925388581825ULL, 6448907850777163651ULL, 12897815701554327303ULL, \n\t2579563140310865460ULL, 5159126280621730921ULL, 10318252561243461842ULL, \n\t2063650512248692368ULL, 4127301024497384737ULL, 8254602048994769474ULL, \n\t16509204097989538948ULL, 3301840819597907789ULL, 6603681639195815579ULL, \n\t13207363278391631158ULL, 2641472655678326231ULL, 5282945311356652463ULL, \n\t10565890622713304927ULL, 2113178124542660985ULL, 4226356249085321970ULL, \n\t8452712498170643941ULL, 16905424996341287883ULL, 3381084999268257576ULL, \n\t6762169998536515153ULL, 13524339997073030306ULL, 2704867999414606061ULL, \n\t5409735998829212122ULL, 10819471997658424245ULL, 2163894399531684849ULL, \n\t4327788799063369698ULL, 8655577598126739396ULL, 17311155196253478792ULL, \n\t3462231039250695758ULL, 6924462078501391516ULL, 13848924157002783033ULL, \n\t2769784831400556606ULL, 5539569662801113213ULL, 11079139325602226427ULL, \n\t2215827865120445285ULL, 4431655730240890570ULL, 8863311460481781141ULL, \n\t17726622920963562283ULL, 3545324584192712456ULL, 7090649168385424913ULL, \n\t14181298336770849826ULL, 2836259667354169965ULL, 5672519334708339930ULL, \n\t11345038669416679861ULL, 2269007733883335972ULL, 4538015467766671944ULL, \n\t9076030935533343889ULL, 18152061871066687778ULL, 3630412374213337555ULL, \n\t7260824748426675111ULL, 14521649496853350222ULL, 2904329899370670044ULL, \n\t5808659798741340089ULL, 11617319597482680178ULL, 2323463919496536035ULL, \n\t4646927838993072071ULL, 9293855677986144142ULL, 1858771135597228828ULL, \n\t3717542271194457656ULL, 7435084542388915313ULL, 14870169084777830627ULL, \n\t2974033816955566125ULL, 5948067633911132251ULL, 11896135267822264502ULL, \n\t2379227053564452900ULL, 4758454107128905800ULL, 9516908214257811601ULL, \n\t1903381642851562320ULL, 3806763285703124640ULL, 7613526571406249281ULL, \n\t15227053142812498563ULL, 3045410628562499712ULL, 6090821257124999425ULL, \n\t12181642514249998850ULL, 2436328502849999770ULL, 4872657005699999540ULL, \n\t9745314011399999080ULL, 1949062802279999816ULL, 3898125604559999632ULL, \n\t7796251209119999264ULL, 15592502418239998528ULL, 3118500483647999705ULL, \n\t6237000967295999411ULL, 12474001934591998822ULL, 2494800386918399764ULL, \n\t4989600773836799529ULL, 9979201547673599058ULL, 1995840309534719811ULL, \n\t3991680619069439623ULL, 7983361238138879246ULL, 15966722476277758493ULL, \n\t3193344495255551698ULL, 6386688990511103397ULL, 12773377981022206794ULL, \n\t2554675596204441358ULL, 5109351192408882717ULL, 10218702384817765435ULL, \n\t2043740476963553087ULL, 4087480953927106174ULL, 8174961907854212348ULL, \n\t16349923815708424697ULL, 3269984763141684939ULL, 6539969526283369878ULL, \n\t13079939052566739757ULL, 2615987810513347951ULL, 5231975621026695903ULL, \n\t10463951242053391806ULL, 2092790248410678361ULL, 4185580496821356722ULL, \n\t8371160993642713444ULL, 16742321987285426889ULL, 3348464397457085377ULL, \n\t6696928794914170755ULL, 13393857589828341511ULL, 2678771517965668302ULL, \n\t5357543035931336604ULL, 10715086071862673209ULL, 2143017214372534641ULL, \n\t4286034428745069283ULL, 8572068857490138567ULL, 17144137714980277135ULL, \n\t3428827542996055427ULL, 6857655085992110854ULL, 13715310171984221708ULL, \n\t2743062034396844341ULL, 5486124068793688683ULL, 10972248137587377366ULL, \n\t2194449627517475473ULL, 4388899255034950946ULL, 8777798510069901893ULL, \n\t17555597020139803786ULL, 3511119404027960757ULL, 7022238808055921514ULL, \n\t14044477616111843029ULL, 2808895523222368605ULL, 5617791046444737211ULL, \n\t11235582092889474423ULL, 2247116418577894884ULL, 4494232837155789769ULL, \n\t8988465674311579538ULL, 17976931348623159077ULL, 3595386269724631815ULL, \n\t7190772539449263630ULL, 14381545078898527261ULL, 2876309015779705452ULL, \n\t5752618031559410904ULL, 11505236063118821809ULL, 2301047212623764361ULL, \n\t4602094425247528723ULL, 9204188850495057447ULL, 1840837770099011489ULL, \n\t3681675540198022979ULL, 7363351080396045958ULL, \n};\n\nstatic const gint32 Formatter_TensExponentTable [] = {\n\t-323, -323, -322, -322, -322, -322, -321, -321, -321, -320, -320, -320, \n\t-319, -319, -319, -319, -318, -318, -318, -317, -317, -317, -316, -316, \n\t-316, -316, -315, -315, -315, -314, -314, -314, -313, -313, -313, -313, \n\t-312, -312, -312, -311, -311, -311, -310, -310, -310, -310, -309, -309, \n\t-309, -308, -308, -308, -307, -307, -307, -307, -306, -306, -306, -305, \n\t-305, -305, -304, -304, -304, -304, -303, -303, -303, -302, -302, -302, \n\t-301, -301, -301, -301, -300, -300, -300, -299, -299, -299, -298, -298, \n\t-298, -298, -297, -297, -297, -296, -296, -296, -295, -295, -295, -295, \n\t-294, -294, -294, -293, -293, -293, -292, -292, -292, -291, -291, -291, \n\t-291, -290, -290, -290, -289, -289, -289, -288, -288, -288, -288, -287, \n\t-287, -287, -286, -286, -286, -285, -285, -285, -285, -284, -284, -284, \n\t-283, -283, -283, -282, -282, -282, -282, -281, -281, -281, -280, -280, \n\t-280, -279, -279, -279, -279, -278, -278, -278, -277, -277, -277, -276, \n\t-276, -276, -276, -275, -275, -275, -274, -274, -274, -273, -273, -273, \n\t-273, -272, -272, -272, -271, -271, -271, -270, -270, -270, -270, -269, \n\t-269, -269, -268, -268, -268, -267, -267, -267, -267, -266, -266, -266, \n\t-265, -265, -265, -264, -264, -264, -263, -263, -263, -263, -262, -262, \n\t-262, -261, -261, -261, -260, -260, -260, -260, -259, -259, -259, -258, \n\t-258, -258, -257, -257, -257, -257, -256, -256, -256, -255, -255, -255, \n\t-254, -254, -254, -254, -253, -253, -253, -252, -252, -252, -251, -251, \n\t-251, -251, -250, -250, -250, -249, -249, -249, -248, -248, -248, -248, \n\t-247, -247, -247, -246, -246, -246, -245, -245, -245, -245, -244, -244, \n\t-244, -243, -243, -243, -242, -242, -242, -242, -241, -241, -241, -240, \n\t-240, -240, -239, -239, -239, -239, -238, -238, -238, -237, -237, -237, \n\t-236, -236, -236, -235, -235, -235, -235, -234, -234, -234, -233, -233, \n\t-233, -232, -232, -232, -232, -231, -231, -231, -230, -230, -230, -229, \n\t-229, -229, -229, -228, -228, -228, -227, -227, -227, -226, -226, -226, \n\t-226, -225, -225, -225, -224, -224, -224, -223, -223, -223, -223, -222, \n\t-222, -222, -221, -221, -221, -220, -220, -220, -220, -219, -219, -219, \n\t-218, -218, -218, -217, -217, -217, -217, -216, -216, -216, -215, -215, \n\t-215, -214, -214, -214, -214, -213, -213, -213, -212, -212, -212, -211, \n\t-211, -211, -211, -210, -210, -210, -209, -209, -209, -208, -208, -208, \n\t-208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -204, -204, \n\t-204, -204, -203, -203, -203, -202, -202, -202, -201, -201, -201, -201, \n\t-200, -200, -200, -199, -199, -199, -198, -198, -198, -198, -197, -197, \n\t-197, -196, -196, -196, -195, -195, -195, -195, -194, -194, -194, -193, \n\t-193, -193, -192, -192, -192, -192, -191, -191, -191, -190, -190, -190, \n\t-189, -189, -189, -189, -188, -188, -188, -187, -187, -187, -186, -186, \n\t-186, -186, -185, -185, -185, -184, -184, -184, -183, -183, -183, -183, \n\t-182, -182, -182, -181, -181, -181, -180, -180, -180, -180, -179, -179, \n\t-179, -178, -178, -178, -177, -177, -177, -176, -176, -176, -176, -175, \n\t-175, -175, -174, -174, -174, -173, -173, -173, -173, -172, -172, -172, \n\t-171, -171, -171, -170, -170, -170, -170, -169, -169, -169, -168, -168, \n\t-168, -167, -167, -167, -167, -166, -166, -166, -165, -165, -165, -164, \n\t-164, -164, -164, -163, -163, -163, -162, -162, -162, -161, -161, -161, \n\t-161, -160, -160, -160, -159, -159, -159, -158, -158, -158, -158, -157, \n\t-157, -157, -156, -156, -156, -155, -155, -155, -155, -154, -154, -154, \n\t-153, -153, -153, -152, -152, -152, -152, -151, -151, -151, -150, -150, \n\t-150, -149, -149, -149, -149, -148, -148, -148, -147, -147, -147, -146, \n\t-146, -146, -145, -145, -145, -145, -144, -144, -144, -143, -143, -143, \n\t-142, -142, -142, -142, -141, -141, -141, -140, -140, -140, -139, -139, \n\t-139, -139, -138, -138, -138, -137, -137, -137, -136, -136, -136, -136, \n\t-135, -135, -135, -134, -134, -134, -133, -133, -133, -133, -132, -132, \n\t-132, -131, -131, -131, -130, -130, -130, -130, -129, -129, -129, -128, \n\t-128, -128, -127, -127, -127, -127, -126, -126, -126, -125, -125, -125, \n\t-124, -124, -124, -124, -123, -123, -123, -122, -122, -122, -121, -121, \n\t-121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -117, \n\t-117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114, \n\t-114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -111, -110, \n\t-110, -110, -109, -109, -109, -108, -108, -108, -108, -107, -107, -107, \n\t-106, -106, -106, -105, -105, -105, -105, -104, -104, -104, -103, -103, \n\t-103, -102, -102, -102, -102, -101, -101, -101, -100, -100, -100, -99, \n\t-99, -99, -99, -98, -98, -98, -97, -97, -97, -96, -96, -96, \n\t-96, -95, -95, -95, -94, -94, -94, -93, -93, -93, -93, -92, \n\t-92, -92, -91, -91, -91, -90, -90, -90, -89, -89, -89, -89, \n\t-88, -88, -88, -87, -87, -87, -86, -86, -86, -86, -85, -85, \n\t-85, -84, -84, -84, -83, -83, -83, -83, -82, -82, -82, -81, \n\t-81, -81, -80, -80, -80, -80, -79, -79, -79, -78, -78, -78, \n\t-77, -77, -77, -77, -76, -76, -76, -75, -75, -75, -74, -74, \n\t-74, -74, -73, -73, -73, -72, -72, -72, -71, -71, -71, -71, \n\t-70, -70, -70, -69, -69, -69, -68, -68, -68, -68, -67, -67, \n\t-67, -66, -66, -66, -65, -65, -65, -65, -64, -64, -64, -63, \n\t-63, -63, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, \n\t-59, -59, -59, -58, -58, -58, -58, -57, -57, -57, -56, -56, \n\t-56, -55, -55, -55, -55, -54, -54, -54, -53, -53, -53, -52, \n\t-52, -52, -52, -51, -51, -51, -50, -50, -50, -49, -49, -49, \n\t-49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, \n\t-45, -45, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, \n\t-41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, \n\t-38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, \n\t-34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, \n\t-30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, \n\t-27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -24, \n\t-23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -20, -20, \n\t-20, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, \n\t-16, -16, -15, -15, -15, -15, -14, -14, -14, -13, -13, -13, \n\t-12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9, \n\t-9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6, \n\t-5, -5, -5, -4, -4, -4, -3, -3, -3, -3, -2, -2, \n\t-2, -1, -1, -1, 0, 0, 0, 1, 1, 1, 1, 2, \n\t2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, \n\t6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, \n\t9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, \n\t13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, \n\t16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, \n\t20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, \n\t24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 27, 27, \n\t27, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 31, \n\t31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, \n\t35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, \n\t38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 41, \n\t42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, \n\t45, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, \n\t49, 49, 50, 50, 50, 50, 51, 51, 51, 52, 52, 52, \n\t53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, \n\t56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, \n\t60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, \n\t63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 67, \n\t67, 67, 68, 68, 68, 69, 69, 69, 69, 70, 70, 70, \n\t71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 74, 74, \n\t74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, \n\t78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, \n\t81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85, \n\t85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, \n\t89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92, \n\t92, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 96, \n\t96, 96, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, \n\t100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, \n\t103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, \n\t107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 110, 110, \n\t110, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 114, \n\t114, 114, 115, 115, 115, 116, 116, 116, 116, 117, 117, 117, \n\t118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 121, 121, \n\t121, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, \n\t125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, \n\t128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 132, \n\t132, 132, 133, 133, 133, 134, 134, 134, 134, 135, 135, 135, \n\t136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139, \n\t139, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, \n\t143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, \n\t147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, \n\t150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, \n\t154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 157, 157, \n\t157, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 161, \n\t161, 161, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, \n\t165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, \n\t168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, \n\t172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, \n\t175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 179, \n\t179, 179, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182, \n\t183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 186, 186, \n\t186, 187, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, \n\t190, 190, 190, 191, 191, 191, 192, 192, 192, 193, 193, 193, \n\t193, 194, 194, 194, 195, 195, 195, 196, 196, 196, 196, 197, \n\t197, 197, 198, 198, 198, 199, 199, 199, 199, 200, 200, 200, \n\t201, 201, 201, 202, 202, 202, 202, 203, 203, 203, 204, 204, \n\t204, 205, 205, 205, 206, 206, 206, 206, 207, 207, 207, 208, \n\t208, 208, 209, 209, 209, 209, 210, 210, 210, 211, 211, 211, \n\t212, 212, 212, 212, 213, 213, 213, 214, 214, 214, 215, 215, \n\t215, 215, 216, 216, 216, 217, 217, 217, 218, 218, 218, 218, \n\t219, 219, 219, 220, 220, 220, 221, 221, 221, 221, 222, 222, \n\t222, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 226, \n\t226, 226, 227, 227, 227, 227, 228, 228, 228, 229, 229, 229, \n\t230, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, \n\t233, 234, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, \n\t237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, \n\t240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 243, 244, \n\t244, 244, 245, 245, 245, 246, 246, 246, 246, 247, 247, 247, \n\t248, 248, 248, 249, 249, 249, 249, 250, 250, 250, 251, 251, \n\t251, 252, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255, \n\t255, 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, 258, \n\t258, 259, 259, 259, 260, 260, 260, 261, 261, 261, 261, 262, \n\t262, 262, 263, 263, 263, 264, 264, 264, 265, 265, 265, 265, \n\t266, 266, 266, 267, 267, 267, 268, 268, 268, 268, 269, 269, \n\t269, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 273, \n\t273, 273, 274, 274, 274, 274, 275, 275, 275, 276, 276, 276, \n\t277, 277, 277, 277, 278, 278, 278, 279, 279, 279, 280, 280, \n\t280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 283, 283, \n\t284, 284, 284, 285, 285, 285, 286, 286, 286, 286, 287, 287, \n\t287, 288, 288, 288, 289, 289, 289, 289, 290, 290, 290, 291, \n\t291, 291, 292, 292, 292, 293, 293, 293, \n};\n\nstatic const gunichar2 Formatter_DigitLowerTable [] = {\n\t'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'\n};\n\nstatic const gunichar2 Formatter_DigitUpperTable [] = {\n\t'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'\n};\n\nstatic const gint64 Formatter_TenPowersList [] = {\n\t1LL,\n\t10LL,\n\t100LL,\n\t1000LL,\n\t10000LL,\n\t100000LL,\n\t1000000LL,\n\t10000000LL,\n\t100000000LL,\n\t1000000000LL,\n\t10000000000LL,\n\t100000000000LL,\n\t1000000000000LL,\n\t10000000000000LL,\n\t100000000000000LL,\n\t1000000000000000LL,\n\t10000000000000000LL,\n\t100000000000000000LL,\n\t1000000000000000000LL,\n};\n\n// DecHexDigits s a translation table from a decimal number to its\n// digits hexadecimal representation (e.g. DecHexDigits [34] = 0x34).\nstatic const gint32 Formatter_DecHexDigits [] = {\n\t0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, \n\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, \n\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, \n\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, \n\t0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, \n\t0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, \n\t0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, \n\t0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, \n\t0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, \n\t0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,\n};\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/number-ms.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_NUMBER_MS_H__\n#define __MONO_NUMBER_MS_H__\n\n#include <glib.h>\n\n// Double floating point Bias\n#define MONO_DOUBLE_BIAS 1022\n\n// Structure to access an encoded double floating point\ntypedef struct {\n#if G_BYTE_ORDER == G_BIG_ENDIAN\n\tguint sign   : 1;\n\tguint exp    : 11;\n\tguint mantHi : 20;\n\tguint mantLo : 32;\n\n#define MONO_INIT_DOUBLE(sign, exp, mantHi, mantLo) { sign, exp, mantHi, mantLo }\n\n#else // BIGENDIAN\n\tguint mantLo : 32;\n\tguint mantHi : 20;\n\tguint exp    : 11;\n\tguint sign   : 1;\n\n#define MONO_INIT_DOUBLE(sign, exp, mantHi, mantLo) { mantLo, mantHi, exp, sign }\n\n#endif\n} MonoDouble;\n\ntypedef union {\n\tMonoDouble s;\n\tgdouble d;\n} MonoDouble_double;\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/object-forward.h",
    "content": "/**\n * \\file\n *\n * Forward declarations of opaque types, and typedefs thereof.\n *\n */\n\n#ifndef __MONO_OBJECT_FORWARD_H__\n#define __MONO_OBJECT_FORWARD_H__\n\n#include <mono/utils/mono-publib.h>\n\ntypedef struct _MonoClass MonoClass;\ntypedef struct _MonoImage MonoImage;\ntypedef struct _MonoMethod MonoMethod;\n\ntypedef struct _MonoObject MONO_RT_MANAGED_ATTR MonoObject;\ntypedef struct _MonoException MONO_RT_MANAGED_ATTR MonoException;\ntypedef struct _MonoReflectionAssembly MONO_RT_MANAGED_ATTR MonoReflectionAssembly;\ntypedef struct _MonoReflectionTypeBuilder MONO_RT_MANAGED_ATTR MonoReflectionTypeBuilder;\n\n#endif /* __MONO_OBJECT_FORWARD_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/object-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_OBJECT_INTERNALS_H__\n#define __MONO_OBJECT_INTERNALS_H__\n\n#include <mono/utils/mono-forward-internal.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/metadata/handle-decl.h>\n\n#include <mono/metadata/object.h>\n#include <mono/metadata/threads.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/mempool.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/threads-types.h>\n#include <mono/metadata/handle.h>\n#include <mono/metadata/abi-details.h>\n#include \"mono/utils/mono-compiler.h\"\n#include \"mono/utils/mono-error.h\"\n#include \"mono/utils/mono-error-internals.h\"\n#include \"mono/utils/mono-machine.h\"\n#include \"mono/utils/mono-stack-unwinding.h\"\n#include \"mono/utils/mono-tls.h\"\n#include \"mono/utils/mono-coop-mutex.h\"\n#include <mono/metadata/icalls.h>\n\n/* Use this as MONO_CHECK_ARG (arg,expr,) in functions returning void */\n#define MONO_CHECK_ARG(arg, expr, retval) do {\t\t\t\t\\\n\tif (G_UNLIKELY (!(expr)))\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\\\n\t\tif (0) { (void)(arg); } /* check if the name exists */\t\\\n\t\tERROR_DECL (error);\t\t\t\t\t\\\n\t\tmono_error_set_argument_format (error, #arg, \"assertion `%s' failed\", #expr); \\\n\t\tmono_error_set_pending_exception (error);\t\t\\\n\t\treturn retval;\t\t\t\t\t\t\\\n\t} \t\t\t\t\t\t\t\t\\\n} while (0)\n\n#define MONO_CHECK_ARG_NULL_NAMED(arg, argname, retval) do {\t\\\n\tif (G_UNLIKELY (!(arg)))\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\\\n\t\tERROR_DECL (error);\t\t\t\t\\\n\t\tmono_error_set_argument_null (error, (argname), \"\");\t\\\n\t\tmono_error_set_pending_exception (error);\t\\\n\t\treturn retval;\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\\\n} while (0)\n/* Use this as MONO_CHECK_ARG_NULL (arg,) in functions returning void */\n#define MONO_CHECK_ARG_NULL(arg, retval) do { \t\t\t\\\n\tif (G_UNLIKELY (!(arg)))\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\\\n\t\tmono_error_set_argument_null (error, #arg, \"\");\t\\\n\t\treturn retval;\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\\\n} while (0)\n\n/* Use this as MONO_CHECK_ARG_NULL_HANDLE (arg,) in functions returning void */\n#define MONO_CHECK_ARG_NULL_HANDLE(arg, retval) do { \t\t\\\n\tif (G_UNLIKELY (MONO_HANDLE_IS_NULL (arg)))\t\t\\\n\t{\t\t\t\t\t\t\t\\\n\t\tmono_error_set_argument_null (error, #arg, \"\");\t\\\n\t\treturn retval;\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\\\n} while (0)\n\n#define MONO_CHECK_ARG_NULL_HANDLE_NAMED(arg, argname, retval) do { \\\n\tif (G_UNLIKELY (MONO_HANDLE_IS_NULL (arg)))\t\t\\\n\t{\t\t\t\t\t\t\t\\\n\t\tmono_error_set_argument_null (error, (argname), \"\");\t\\\n\t\treturn retval;\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\\\n} while (0)\n\n/* Use this as MONO_CHECK_NULL (arg,) in functions returning void */\n#define MONO_CHECK_NULL(arg, retval) do { \t\t\t\\\n\tif (G_UNLIKELY (!(arg)))\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\\\n\t\tERROR_DECL (error);\t\t\t\t\\\n\t\tmono_error_set_null_reference (error);\t\t\\\n\t\tmono_error_set_pending_exception (error);\t\\\n\t\treturn retval;\t\t\t\t\t\\\n\t} \t\t\t\t\t\t\t\\\n} while (0)\n\nMonoClass *\nmono_class_create_array (MonoClass *element_class, uint32_t rank);\n\nMonoArrayHandle\nmono_array_new_specific_handle (MonoVTable *vtable, uintptr_t n, MonoError *error);\n\nMonoArray*\nmono_array_new_specific_checked (MonoVTable *vtable, uintptr_t n, MonoError *error);\n\n/* \n * Macros which cache.\n * These should be used instead of the original versions.\n */\n\nstatic inline MonoClass*\nmono_array_class_get_cached_function (MonoClass *eclass, MonoClass **aclass)\n{\n\tMonoClass *a = *aclass;\n\tif (a)\n\t\treturn a;\n\ta = mono_class_create_array (eclass, 1);\n\tg_assert (a);\n\tif (a)\n\t\t*aclass = a;\n\treturn *aclass;\n}\n\n// eclass should be a run-time constant\n// If you get an error using this macro, you need to manually instantiate the MonoClass *foo ## _array cache.\n// See for example object_class_array.\n#define mono_array_class_get_cached(eclass) (mono_array_class_get_cached_function ((eclass), &(eclass ## _array)))\n\nstatic inline MonoArray*\nmono_array_new_cached_function (MonoDomain *domain, MonoClass *aclass, int size, MonoError *error)\n{\n\tMonoVTable *vtable = mono_class_vtable_checked (domain, aclass, error);\n\tMonoArray *arr = NULL;\n\tif (is_ok (error))\n\t\tarr = mono_array_new_specific_checked (vtable, size, error);\n\treturn arr;\n}\n\n// eclass should be a run-time constant\n// If you get an error using this macro, you need to manually instantiate the MonoClass *foo ## _array cache.\n// See for example object_class_array.\n#define mono_array_new_cached(domain, eclass, size, error) \\\n\tmono_array_new_cached_function ((domain), mono_array_class_get_cached (eclass), (size), (error))\n\nstatic inline MonoArrayHandle\nmono_array_new_cached_handle_function (MonoDomain *domain, MonoClass *aclass, int size, MonoError *error)\n{\n\tMonoVTable *vtable = mono_class_vtable_checked (domain, aclass, error);\n\tMonoArrayHandle arr = NULL_HANDLE_ARRAY;\n\tif (is_ok (error))\n\t\tarr = mono_array_new_specific_handle (vtable, size, error);\n\treturn arr;\n}\n\n// eclass should be a run-time constant\n// If you get an error using this macro, you need to manually instantiate the MonoClass *foo ## _array cache.\n// See for example object_class_array.\n#define mono_array_new_cached_handle(domain, eclass, size, error) \\\n\tmono_array_new_cached_handle_function ((domain), mono_array_class_get_cached (eclass), (size), (error))\n\n#ifdef MONO_BIG_ARRAYS\ntypedef uint64_t mono_array_size_t;\ntypedef int64_t mono_array_lower_bound_t;\n#define MONO_ARRAY_MAX_INDEX G_MAXINT64\n#define MONO_ARRAY_MAX_SIZE  G_MAXUINT64\n#else\ntypedef uint32_t mono_array_size_t;\ntypedef int32_t mono_array_lower_bound_t;\n#define MONO_ARRAY_MAX_INDEX ((int32_t) 0x7fffffff)\n#define MONO_ARRAY_MAX_SIZE  ((uint32_t) 0xffffffff)\n#endif\n\ntypedef struct {\n\tmono_array_size_t length;\n\tmono_array_lower_bound_t lower_bound;\n} MonoArrayBounds;\n\nstruct _MonoArray {\n\tMonoObject obj;\n\t/* bounds is NULL for szarrays */\n\tMonoArrayBounds *bounds;\n\t/* total number of elements of the array */\n\tmono_array_size_t max_length; \n\t/* we use mono_64bitaligned_t to ensure proper alignment on platforms that need it */\n\tmono_64bitaligned_t vector [MONO_ZERO_LEN_ARRAY];\n};\n\n#define MONO_SIZEOF_MONO_ARRAY (MONO_STRUCT_OFFSET (MonoArray, vector))\n\nstruct _MonoString {\n\tMonoObject object;\n\tint32_t length;\n\tmono_unichar2 chars [MONO_ZERO_LEN_ARRAY];\n};\n\n#define MONO_SIZEOF_MONO_STRING (MONO_STRUCT_OFFSET (MonoString, chars))\n\n#define mono_object_class(obj) (((MonoObject*)(obj))->vtable->klass)\n#define mono_object_domain(obj) (((MonoObject*)(obj))->vtable->domain)\n\n#define mono_string_chars_fast(s) ((mono_unichar2*)(s)->chars)\n#define mono_string_length_fast(s) ((s)->length)\n\n/**\n * mono_array_length_internal:\n * \\param array a \\c MonoArray*\n * \\returns the total number of elements in the array. This works for\n * both vectors and multidimensional arrays.\n */\n#define mono_array_length_internal(array) ((array)->max_length)\n\nstatic inline\nuintptr_t\nmono_array_handle_length (MonoArrayHandle arr)\n{\n\tMONO_REQ_GC_UNSAFE_MODE;\n\n\treturn mono_array_length_internal (MONO_HANDLE_RAW (arr));\n}\n\n// Equivalent to mono_array_addr_with_size, except:\n// 1. A macro instead of a function -- the types of size and index are open.\n// 2. mono_array_addr_with_size could, but does not, do GC mode transitions.\n#define mono_array_addr_with_size_fast(array,size,index) ( ((char*)(array)->vector) + (size) * (index) )\n\n#define mono_array_addr_fast(array,type,index) ((type*)(void*) mono_array_addr_with_size_fast (array, sizeof (type), index))\n#define mono_array_get_fast(array,type,index) ( *(type*)mono_array_addr_fast ((array), type, (index)) )\n#define mono_array_set_fast(array,type,index,value)\t\\\n\tdo {\t\\\n\t\ttype *__p = (type *) mono_array_addr_fast ((array), type, (index));\t\\\n\t\t*__p = (value);\t\\\n\t} while (0)\n#define mono_array_setref_fast(array,index,value)\t\\\n\tdo {\t\\\n\t\tvoid **__p = (void **) mono_array_addr_fast ((array), void*, (index));\t\\\n\t\tmono_gc_wbarrier_set_arrayref_internal ((array), __p, (MonoObject*)(value));\t\\\n\t\t/* *__p = (value);*/\t\\\n\t} while (0)\n#define mono_array_memcpy_refs_fast(dest,destidx,src,srcidx,count)\t\\\n\tdo {\t\\\n\t\tvoid **__p = (void **) mono_array_addr_fast ((dest), void*, (destidx));\t\\\n\t\tvoid **__s = mono_array_addr_fast ((src), void*, (srcidx));\t\\\n\t\tmono_gc_wbarrier_arrayref_copy_internal (__p, __s, (count));\t\\\n\t} while (0)\n\n// _internal is like _fast, but preserves the preexisting subtlety of the closed types of things:\n//  \tint size\n//\tuintptr_t idx\n// in order to mimic non-_internal but without the GC mode transitions, or at least,\n// to avoid the runtime using the embedding API, whether or not it has GC mode transitions.\nstatic inline char*\nmono_array_addr_with_size_internal (MonoArray *array, int size, uintptr_t idx)\n{\n\treturn mono_array_addr_with_size_fast (array, size, idx);\n}\n\n#define mono_array_addr_internal(array,type,index) ((type*)(void*) mono_array_addr_with_size_internal (array, sizeof (type), index))\n#define mono_array_get_internal(array,type,index) ( *(type*)mono_array_addr_internal ((array), type, (index)) )\n#define mono_array_set_internal(array,type,index,value)\t\\\n\tdo {\t\\\n\t\ttype *__p = (type *) mono_array_addr_internal ((array), type, (index));\t\\\n\t\t*__p = (value);\t\\\n\t} while (0)\n#define mono_array_setref_internal(array,index,value)\t\\\n\tdo {\t\\\n\t\tvoid **__p = (void **) mono_array_addr_internal ((array), void*, (index));\t\\\n\t\tmono_gc_wbarrier_set_arrayref_internal ((array), __p, (MonoObject*)(value));\t\\\n\t\t/* *__p = (value);*/\t\\\n\t} while (0)\n#define mono_array_memcpy_refs_internal(dest,destidx,src,srcidx,count)\t\\\n\tdo {\t\\\n\t\tvoid **__p = (void **) mono_array_addr_internal ((dest), void*, (destidx));\t\\\n\t\tvoid **__s = mono_array_addr_internal ((src), void*, (srcidx));\t\\\n\t\tmono_gc_wbarrier_arrayref_copy_internal (__p, __s, (count));\t\\\n\t} while (0)\n\nstatic inline gboolean\nmono_handle_array_has_bounds (MonoArrayHandle arr)\n{\n\treturn MONO_HANDLE_GETVAL (arr, bounds) != NULL;\n}\n\nstatic inline void\nmono_handle_array_get_bounds_dim (MonoArrayHandle arr, gint32 dim, MonoArrayBounds *bounds)\n{\n\t*bounds = MONO_HANDLE_GETVAL (arr, bounds [dim]);\n}\n\ntypedef struct {\n\tMonoObject obj;\n#ifndef ENABLE_NETCORE\n\tMonoObject *identity;\n#endif\n} MonoMarshalByRefObject;\n\nTYPED_HANDLE_DECL (MonoMarshalByRefObject);\n\n/* This is a copy of System.AppDomain */\nstruct _MonoAppDomain {\n\tMonoMarshalByRefObject mbr;\n\tMonoDomain *data;\n};\n\n/* Safely access System.AppDomain from native code */\nTYPED_HANDLE_DECL (MonoAppDomain);\n\n/* Safely access System.AppDomainSetup from native code.  (struct is in domain-internals.h) */\nTYPED_HANDLE_DECL (MonoAppDomainSetup);\n\ntypedef struct _MonoStringBuilder MonoStringBuilder;\nTYPED_HANDLE_DECL (MonoStringBuilder);\n\nstruct _MonoStringBuilder {\n\tMonoObject object;\n\tMonoArray  *chunkChars;\n\tMonoStringBuilder* chunkPrevious;      // Link to the block logically before this block\n\tint chunkLength;                  // The index in ChunkChars that represent the end of the block\n\tint chunkOffset;                  // The logial offset (sum of all characters in previous blocks)\n\tint maxCapacity;\n};\n\nstatic inline int\nmono_string_builder_capacity (MonoStringBuilderHandle sbh)\n{\n\tMonoStringBuilder *sb = MONO_HANDLE_RAW (sbh);\n\treturn sb->chunkOffset + sb->chunkChars->max_length;\n}\n\nstatic inline int\nmono_string_builder_string_length (MonoStringBuilderHandle sbh)\n{\n\tMonoStringBuilder *sb = MONO_HANDLE_RAW (sbh);\n\treturn sb->chunkOffset + sb->chunkLength;\n}\n\ntypedef struct {\n\tMonoType *type;\n\tgpointer  value;\n\tMonoClass *klass;\n} MonoTypedRef;\n\ntypedef struct {\n\tgpointer args;\n} MonoArgumentHandle;\n\ntypedef struct {\n\tMonoMethodSignature *sig;\n\tgpointer args;\n\tgint32 next_arg;\n\tgint32 num_args;\n} MonoArgIterator;\n\nstruct _MonoException {\n\tMonoObject object;\n\tMonoString *class_name;\n\tMonoString *message;\n\tMonoObject *_data;\n\tMonoObject *inner_ex;\n\tMonoString *help_link;\n\t/* Stores the IPs and the generic sharing infos\n\t   (vtable/MRGCTX) of the frames. */\n\tMonoArray  *trace_ips;\n\tMonoString *stack_trace;\n\tMonoString *remote_stack_trace;\n\tgint32\t    remote_stack_index;\n\t/* Dynamic methods referenced by the stack trace */\n\tMonoObject *dynamic_methods;\n\tgint32\t    hresult;\n\tMonoString *source;\n\tMonoObject *serialization_manager;\n\tMonoObject *captured_traces;\n\tMonoArray  *native_trace_ips;\n\tgint32 caught_in_unmanaged;\n};\n\ntypedef struct {\n\tMonoException base;\n} MonoSystemException;\n\nTYPED_HANDLE_DECL (MonoSystemException);\n\n#ifndef ENABLE_NETCORE\ntypedef struct {\n\tMonoSystemException base;\n\tMonoString *param_name;\n} MonoArgumentException;\n#endif\n\ntypedef struct {\n\tMonoObject   object;\n\tMonoObject  *async_state;\n\tMonoObject  *handle;\n\tMonoObject  *async_delegate;\n\tgpointer    *data;\n\tMonoObject  *object_data;\n\tMonoBoolean  sync_completed;\n\tMonoBoolean  completed;\n\tMonoBoolean  endinvoke_called;\n\tMonoObject  *async_callback;\n\tMonoObject  *execution_context;\n\tMonoObject  *original_context;\n\tgint64\t     add_time;\n} MonoAsyncResult;\n\nTYPED_HANDLE_DECL (MonoAsyncResult);\n\ntypedef struct {\n\tMonoMarshalByRefObject object;\n\tgpointer     handle;\n} MonoWaitHandle;\n\nTYPED_HANDLE_DECL (MonoWaitHandle);\n\n/* This is a copy of System.Runtime.Remoting.Messaging.CallType */\ntypedef enum {\n\tCallType_Sync = 0,\n\tCallType_BeginInvoke = 1,\n\tCallType_EndInvoke = 2,\n\tCallType_OneWay = 3\n} MonoCallType;\n\n/* System.Threading.StackCrawlMark */\n/*\n * This type is used to identify the method where execution has entered\n * the BCL during stack walks. The outermost public method should\n * define it like this:\n * StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;\n * and pass the stackMark as a byref argument down the call chain\n * until it reaches an icall.\n */\ntypedef enum {\n\tSTACK_CRAWL_ME = 0,\n\tSTACK_CRAWL_CALLER = 1,\n\tSTACK_CRAWL_CALLERS_CALLER = 2,\n\tSTACK_CRAWL_THREAD = 3\n} MonoStackCrawlMark;\n\n/* MonoSafeHandle is in class-internals.h. */\n/* Safely access System.Net.Sockets.SafeSocketHandle from native code */\nTYPED_HANDLE_DECL (MonoSafeHandle);\n\n/* This corresponds to System.Type */\nstruct _MonoReflectionType {\n\tMonoObject object;\n\tMonoType  *type;\n};\n\n/* Safely access System.Type from native code */\nTYPED_HANDLE_DECL (MonoReflectionType);\n\ntypedef struct {\n\tMonoObject  object;\n\tMonoReflectionType *class_to_proxy;\t\n\tMonoObject *context;\n\tMonoObject *unwrapped_server;\n\tgint32      target_domain_id;\n\tMonoString *target_uri;\n\tMonoObject *object_identity;\n\tMonoObject *obj_TP;\n\tMonoObject *stub_data;\n} MonoRealProxy;\n\n/* Safely access System.Runtime.Remoting.Proxies.RealProxy from native code */\nTYPED_HANDLE_DECL (MonoRealProxy);\n\ntypedef struct _MonoIUnknown MonoIUnknown;\ntypedef struct _MonoIUnknownVTable MonoIUnknownVTable;\n\n/* STDCALL on windows, CDECL everywhere else to work with XPCOM and MainWin COM */\n#ifdef HOST_WIN32\n#define STDCALL __stdcall\n#else\n#define STDCALL\n#endif\n\nstruct _MonoIUnknownVTable\n{\n\tint (STDCALL *QueryInterface)(MonoIUnknown *pUnk, gconstpointer riid, gpointer* ppv);\n\tint (STDCALL *AddRef)(MonoIUnknown *pUnk);\n\tint (STDCALL *Release)(MonoIUnknown *pUnk);\n};\n\nstruct _MonoIUnknown\n{\n\tconst MonoIUnknownVTable *vtable;\n};\n\ntypedef struct {\n\tMonoMarshalByRefObject object;\n\tMonoIUnknown *iunknown;\n\tGHashTable* itf_hash;\n\tMonoObject *synchronization_context;\n} MonoComObject;\n\nTYPED_HANDLE_DECL (MonoComObject);\n\ntypedef struct {\n\tMonoRealProxy real_proxy;\n\tMonoComObject *com_object;\n\tgint32 ref_count;\n} MonoComInteropProxy;\n\nTYPED_HANDLE_DECL (MonoComInteropProxy);\n\ntypedef struct {\n\tMonoObject\t object;\n\tMonoRealProxy\t*rp;\t\n\tMonoRemoteClass *remote_class;\n\tMonoBoolean\t custom_type_info;\n} MonoTransparentProxy;\n\n/* Safely access System.Runtime.Remoting.Proxies.TransparentProxy from native code */\nTYPED_HANDLE_DECL (MonoTransparentProxy);\n\ntypedef struct {\n\tMonoObject obj;\n\tMonoReflectionMethod *method;\n\tMonoArray  *args;\t\t\n\tMonoArray  *names;\t\t\n\tMonoArray  *arg_types;\t\n\tMonoObject *ctx;\n\tMonoObject *rval;\n\tMonoObject *exc;\n\tMonoAsyncResult *async_result;\n\tguint32\t    call_type;\n} MonoMethodMessage;\n\nTYPED_HANDLE_DECL (MonoMethodMessage);\n\n/* Keep in sync with the System.MonoAsyncCall */\ntypedef struct {\n\tMonoObject object;\n\tMonoMethodMessage *msg;\n\tMonoMethod *cb_method;\n\tMonoDelegate *cb_target;\n\tMonoObject *state;\n\tMonoObject *res;\n\tMonoArray *out_args;\n} MonoAsyncCall;\n\nTYPED_HANDLE_DECL (MonoAsyncCall);\n\ntypedef struct {\n\tMonoObject obj;\n\tMonoArray *frames;\n\tMonoArray *captured_traces;\n\tMonoBoolean debug_info;\n} MonoStackTrace;\n\nTYPED_HANDLE_DECL (MonoStackTrace);\n\ntypedef struct {\n\tMonoObject obj;\n\tgint32 il_offset;\n\tgint32 native_offset;\n\tgint64 method_address;\n\tgint32 method_index;\n\tMonoReflectionMethod *method;\n\tMonoString *filename;\n\tgint32 line;\n\tgint32 column;\n\tMonoString *internal_method_name;\n} MonoStackFrame;\n\nTYPED_HANDLE_DECL (MonoStackFrame);\n\ntypedef enum {\n\tMONO_THREAD_FLAG_DONT_MANAGE = 1, // Don't wait for or abort this thread\n\tMONO_THREAD_FLAG_NAME_SET = 2, // Thread name set from managed code\n\tMONO_THREAD_FLAG_APPDOMAIN_ABORT = 4, // Current requested abort originates from appdomain unload\n} MonoThreadFlags;\n\nstruct _MonoThreadInfo;\n\ntypedef struct MonoThreadName {\n\tchar* volatile chars;      // null check outside of lock\n\tgint32 free; // bool\n\tgint32 length;\n} MonoThreadName;\n\nvoid\nmono_gstring_append_thread_name (GString*, MonoInternalThread*);\n\n\n/*\n * NETCORE: There is only one thread object,\n * thread->internal_thread points to itself.\n */\nstruct _MonoInternalThread {\n\t// FIXME: Mechanize keeping this in sync with managed.\n\tMonoObject  obj;\n\tvolatile int lock_thread_id; /* to be used as the pre-shifted thread id in thin locks. Used for appdomain_ref push/pop */\n\tMonoThreadHandle *handle;\n\tgpointer native_handle;\n\tMonoThreadName name;\n\tguint32\t    state;      /* must be accessed while longlived->synch_cs is locked */\n\tMonoException *abort_exc;\n\tint abort_state_handle;\n\tguint64 tid;\t/* This is accessed as a gsize in the code (so it can hold a 64bit pointer on systems that need it), but needs to reserve 64 bits of space on all machines as it corresponds to a field in managed code */\n\tgsize debugger_thread; // FIXME switch to bool as soon as CI testing with corlib version bump works\n\tgpointer *static_data;\n\tstruct _MonoThreadInfo *thread_info;\n\tMonoAppContext *current_appcontext;\n\tMonoThread *root_domain_thread;\n\tMonoObject *_serialized_principal;\n\tint _serialized_principal_version;\n\tgpointer appdomain_refs;\n\t/* This is modified using atomic ops, so keep it a gint32 */\n\tgint32 __interruption_requested;\n\t/* data that must live as long as this managed object is not finalized\n\t * or as long as the underlying thread is attached, whichever is\n\t * longer */\n\tMonoLongLivedThreadData *longlived;\n\tMonoBoolean threadpool_thread;\n\tMonoBoolean thread_interrupt_requested;\n\tint stack_size;\n\tguint8\tapartment_state;\n\tgint32 critical_region_level;\n\tgint32 managed_id;\n\tguint32 small_id;\n\tMonoThreadManageCallback manage_callback;\n\tgsize    flags;\n\tgpointer thread_pinning_ref;\n\tgsize __abort_protected_block_count;\n\tgint32 priority;\n\tGPtrArray *owned_mutexes;\n\tMonoOSEvent *suspended;\n\tgint32 self_suspended; // TRUE | FALSE\n\tgsize thread_state;\n\n#ifdef ENABLE_NETCORE\n\tstruct _MonoInternalThread *internal_thread;\n\tMonoObject *start_obj;\n\tMonoException *pending_exception;\n#else\n\tvoid* unused [3]; // same size as netcore\n#endif\n\t/* This is used only to check that we are in sync between the representation\n\t * of MonoInternalThread in native and InternalThread in managed\n\t *\n\t * DO NOT RENAME! DO NOT ADD FIELDS AFTER! */\n\tgpointer last;\n};\n\n#ifndef ENABLE_NETCORE\nstruct _MonoThread {\n\tMonoObject obj;\n\tMonoInternalThread *internal_thread;\n\tMonoObject *start_obj;\n\tMonoException *pending_exception;\n};\n#endif\n\ntypedef struct {\n\tguint32 state;\n\tMonoObject *additional;\n} MonoStreamingContext;\n\n#if !ENABLE_NETCORE\ntypedef struct {\n\tMonoObject obj;\n\tMonoBoolean readOnly;\n\tMonoString *AMDesignator;\n\tMonoString *PMDesignator;\n\tMonoString *DateSeparator;\n\tMonoString *TimeSeparator;\n\tMonoString *ShortDatePattern;\n\tMonoString *LongDatePattern;\n\tMonoString *ShortTimePattern;\n\tMonoString *LongTimePattern;\n\tMonoString *MonthDayPattern;\n\tMonoString *YearMonthPattern;\n\tguint32 FirstDayOfWeek;\n\tguint32 CalendarWeekRule;\n\tMonoArray *AbbreviatedDayNames;\n\tMonoArray *DayNames;\n\tMonoArray *MonthNames;\n\tMonoArray *GenitiveMonthNames;\n\tMonoArray *AbbreviatedMonthNames;\n\tMonoArray *GenitiveAbbreviatedMonthNames;\n\tMonoArray *ShortDatePatterns;\n\tMonoArray *LongDatePatterns;\n\tMonoArray *ShortTimePatterns;\n\tMonoArray *LongTimePatterns;\n\tMonoArray *MonthDayPatterns;\n\tMonoArray *YearMonthPatterns;\n\tMonoArray *ShortestDayNames;\n} MonoDateTimeFormatInfo;\n\ntypedef struct \n{\n\tMonoObject obj;\n\tMonoArray *numberGroupSizes;\n\tMonoArray *currencyGroupSizes;\n\tMonoArray *percentGroupSizes;\n\tMonoString *positiveSign;\n\tMonoString *negativeSign;\n\tMonoString *numberDecimalSeparator;\n\tMonoString *numberGroupSeparator;\n\tMonoString *currencyGroupSeparator;\n\tMonoString *currencyDecimalSeparator;\n\tMonoString *currencySymbol;\n\tMonoString *ansiCurrencySymbol;\t/* unused */\n\tMonoString *naNSymbol;\n\tMonoString *positiveInfinitySymbol;\n\tMonoString *negativeInfinitySymbol;\n\tMonoString *percentDecimalSeparator;\n\tMonoString *percentGroupSeparator;\n\tMonoString *percentSymbol;\n\tMonoString *perMilleSymbol;\n\tMonoString *nativeDigits; /* unused */\n\tgint32 dataItem; /* unused */\n\tguint32 numberDecimalDigits;\n\tgint32 currencyDecimalDigits;\n\tgint32 currencyPositivePattern;\n\tgint32 currencyNegativePattern;\n\tgint32 numberNegativePattern;\n\tgint32 percentPositivePattern;\n\tgint32 percentNegativePattern;\n\tgint32 percentDecimalDigits;\n} MonoNumberFormatInfo;\n\ntypedef struct {\n\tMonoObject obj;\n\tgint32 lcid;\n\tMonoString *icu_name;\n\tgpointer ICU_collator;\n} MonoCompareInfo;\n\ntypedef struct {\n\tMonoObject obj;\n\tMonoString *NativeName;\n\tMonoArray *ShortDatePatterns;\n\tMonoArray *YearMonthPatterns;\n\tMonoArray *LongDatePatterns;\n\tMonoString *MonthDayPattern;\n\n\tMonoArray *EraNames;\n\tMonoArray *AbbreviatedEraNames;\n\tMonoArray *AbbreviatedEnglishEraNames;\n\tMonoArray *DayNames;\n\tMonoArray *AbbreviatedDayNames;\n\tMonoArray *SuperShortDayNames;\n\tMonoArray *MonthNames;\n\tMonoArray *AbbreviatedMonthNames;\n\tMonoArray *GenitiveMonthNames;\n\tMonoArray *GenitiveAbbreviatedMonthNames;\n} MonoCalendarData;\n\nTYPED_HANDLE_DECL (MonoCalendarData);\n\ntypedef struct {\n\tMonoObject obj;\n\tMonoString *AMDesignator;\n\tMonoString *PMDesignator;\n\tMonoString *TimeSeparator;\n\tMonoArray *LongTimePatterns;\n\tMonoArray *ShortTimePatterns;\n\tguint32 FirstDayOfWeek;\n\tguint32 CalendarWeekRule;\n} MonoCultureData;\n\nTYPED_HANDLE_DECL (MonoCultureData);\n\ntypedef struct {\n\tMonoObject obj;\n\tMonoBoolean is_read_only;\n\tgint32 lcid;\n\tgint32 parent_lcid;\n\tgint32 datetime_index;\n\tgint32 number_index;\n\tgint32 calendar_type;\n\tMonoBoolean use_user_override;\n\tMonoNumberFormatInfo *number_format;\n\tMonoDateTimeFormatInfo *datetime_format;\n\tMonoObject *textinfo;\n\tMonoString *name;\n\tMonoString *englishname;\n\tMonoString *nativename;\n\tMonoString *iso3lang;\n\tMonoString *iso2lang;\n\tMonoString *win3lang;\n\tMonoString *territory;\n\tMonoArray *native_calendar_names;\n\tMonoCompareInfo *compareinfo;\n\tconst void* text_info_data;\n} MonoCultureInfo;\n\nTYPED_HANDLE_DECL (MonoCultureInfo);\n\ntypedef struct {\n\tMonoObject obj;\n\tgint32 geo_id;\n\tMonoString *iso2name;\n\tMonoString *iso3name;\n\tMonoString *win3name;\n\tMonoString *english_name;\n\tMonoString *native_name;\n\tMonoString *currency_symbol;\n\tMonoString *iso_currency_symbol;\n\tMonoString *currency_english_name;\n\tMonoString *currency_native_name;\n} MonoRegionInfo;\n\nTYPED_HANDLE_DECL (MonoRegionInfo);\n\n#endif /* !ENABLE_NETCORE */\n\ntypedef struct {\n\tMonoObject object;\n\tguint32 intType;\n} MonoInterfaceTypeAttribute;\n\n/* Safely access System.Delegate from native code */\nTYPED_HANDLE_DECL (MonoDelegate);\n\n/* \n * Callbacks supplied by the runtime and called by the modules in metadata/\n * This interface is easier to extend than adding a new function type +\n * a new 'install' function for every callback.\n */\ntypedef struct {\n\tgpointer (*create_ftnptr) (MonoDomain *domain, gpointer addr);\n\tgpointer (*get_addr_from_ftnptr) (gpointer descr);\n\tchar*    (*get_runtime_build_info) (void);\n\tconst char*    (*get_runtime_build_version) (void);\n\tgpointer (*get_vtable_trampoline) (MonoVTable *vtable, int slot_index);\n\tgpointer (*get_imt_trampoline) (MonoVTable *vtable, int imt_slot_index);\n\tgboolean (*imt_entry_inited) (MonoVTable *vtable, int imt_slot_index);\n\tvoid     (*set_cast_details) (MonoClass *from, MonoClass *to);\n\tvoid     (*debug_log) (int level, MonoString *category, MonoString *message);\n\tgboolean (*debug_log_is_enabled) (void);\n\tvoid     (*init_delegate) (MonoDelegateHandle delegate, MonoError *error);\n\tMonoObject* (*runtime_invoke) (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);\n\tvoid*    (*compile_method) (MonoMethod *method, MonoError *error);\n\tgpointer (*create_jump_trampoline) (MonoDomain *domain, MonoMethod *method, gboolean add_sync_wrapper, MonoError *error);\n\tgpointer (*create_jit_trampoline) (MonoDomain *domain, MonoMethod *method, MonoError *error);\n\t/* used to free a dynamic method */\n\tvoid     (*free_method) (MonoDomain *domain, MonoMethod *method);\n\tgpointer (*create_remoting_trampoline) (MonoDomain *domain, MonoMethod *method, MonoRemotingTarget target, MonoError *error);\n\tgpointer (*create_delegate_trampoline) (MonoDomain *domain, MonoClass *klass);\n\tgpointer (*interp_get_remoting_invoke) (MonoMethod *method, gpointer imethod, MonoError *error);\n\tGHashTable *(*get_weak_field_indexes) (MonoImage *image);\n\tvoid     (*install_state_summarizer) (void);\n\tgboolean (*is_interpreter_enabled) (void);\n} MonoRuntimeCallbacks;\n\ntypedef gboolean (*MonoInternalStackWalk) (MonoStackFrameInfo *frame, MonoContext *ctx, gpointer data);\ntypedef gboolean (*MonoInternalExceptionFrameWalk) (MonoMethod *method, gpointer ip, size_t native_offset, gboolean managed, gpointer user_data);\n\ntypedef struct {\n\tvoid (*mono_walk_stack_with_ctx) (MonoInternalStackWalk func, MonoContext *ctx, MonoUnwindOptions options, void *user_data);\n\tvoid (*mono_walk_stack_with_state) (MonoInternalStackWalk func, MonoThreadUnwindState *state, MonoUnwindOptions options, void *user_data);\n\tvoid (*mono_raise_exception) (MonoException *ex);\n\tvoid (*mono_raise_exception_with_ctx) (MonoException *ex, MonoContext *ctx);\n\tgboolean (*mono_exception_walk_trace) (MonoException *ex, MonoInternalExceptionFrameWalk func, gpointer user_data);\n\tgboolean (*mono_install_handler_block_guard) (MonoThreadUnwindState *unwind_state);\n\tvoid (*mono_uninstall_current_handler_block_guard) (void);\n\tgboolean (*mono_current_thread_has_handle_block_guard) (void);\n\tgboolean (*mono_above_abort_threshold) (void);\n\tvoid (*mono_clear_abort_threshold) (void);\n\tvoid (*mono_reraise_exception) (MonoException *ex);\n\tvoid (*mono_summarize_managed_stack) (MonoThreadSummary *out);\n\tvoid (*mono_summarize_unmanaged_stack) (MonoThreadSummary *out);\n\tvoid (*mono_summarize_exception) (MonoException *exc, MonoThreadSummary *out);\n\tvoid (*mono_register_native_library) (const char *module_path, const char *module_name);\n\tvoid (*mono_allow_all_native_libraries) (void);\n} MonoRuntimeExceptionHandlingCallbacks;\n\nMONO_COLD void mono_set_pending_exception (MonoException *exc);\n\n/* remoting and async support */\n\nMonoAsyncResult *\nmono_async_result_new\t    (MonoDomain *domain, gpointer handle, \n\t\t\t     MonoObject *state, gpointer data, MonoObject *object_data, MonoError *error);\nMonoWaitHandle *\nmono_wait_handle_new\t    (MonoDomain *domain, gpointer handle, MonoError *error);\n\ngpointer\nmono_wait_handle_get_handle (MonoWaitHandle *handle);\n\ngboolean\nmono_message_init\t    (MonoDomain *domain, MonoMethodMessage *this_obj, \n\t\t\t     MonoReflectionMethod *method, MonoArray *out_args, MonoError *error);\n\nMonoMethodMessage *\nmono_method_call_message_new (MonoMethod *method, gpointer *params, MonoMethod *invoke, \n\t\t\t      MonoDelegate **cb, MonoObject **state, MonoError *error);\n\nvoid\nmono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoArray *out_args, MonoError *error);\n\ngboolean\nmono_delegate_ctor_with_method (MonoObjectHandle this_obj, MonoObjectHandle target, gpointer addr, MonoMethod *method, MonoError *error);\n\ngboolean\nmono_delegate_ctor\t    (MonoObjectHandle this_obj, MonoObjectHandle target, gpointer addr, MonoError *error);\n\nMonoMethod *\nmono_get_delegate_invoke_checked (MonoClass *klass, MonoError *error);\n\nMonoMethod *\nmono_get_delegate_begin_invoke_checked (MonoClass *klass, MonoError *error);\n\nMonoMethod *\nmono_get_delegate_end_invoke_checked (MonoClass *klass, MonoError *error);\n\nvoid\nmono_runtime_free_method    (MonoDomain *domain, MonoMethod *method);\n\nvoid\nmono_install_callbacks      (MonoRuntimeCallbacks *cbs);\n\nMonoRuntimeCallbacks*\nmono_get_runtime_callbacks (void);\n\nvoid\nmono_install_eh_callbacks (MonoRuntimeExceptionHandlingCallbacks *cbs);\n\nMonoRuntimeExceptionHandlingCallbacks *\nmono_get_eh_callbacks (void);\n\nvoid\nmono_raise_exception_deprecated (MonoException *ex);\n\nvoid\nmono_reraise_exception_deprecated (MonoException *ex);\n\nvoid\nmono_raise_exception_with_context (MonoException *ex, MonoContext *ctx);\n\nvoid\nmono_type_initialization_init (void);\n\nvoid\nmono_type_initialization_cleanup (void);\n\nint\nmono_thread_kill           (MonoInternalThread *thread, int signal);\n\nMonoNativeTlsKey\nmono_thread_get_tls_key    (void);\n\ngint32\nmono_thread_get_tls_offset (void);\n\nMonoNativeTlsKey\nmono_domain_get_tls_key    (void);\n\ngint32\nmono_domain_get_tls_offset (void);\n\n/* Reflection and Reflection.Emit support */\n\n/*\n * Handling System.Type objects:\n *\n *   Fields defined as System.Type in managed code should be defined as MonoObject* \n * in unmanaged structures, and the monotype_cast () function should be used for \n * casting them to MonoReflectionType* to avoid crashes/security issues when \n * encountering instances of user defined subclasses of System.Type.\n */\n\n#define IS_MONOTYPE(obj) (!(obj) || (m_class_get_image (mono_object_class ((obj))) == mono_defaults.corlib && ((MonoReflectionType*)(obj))->type != NULL))\n\n#define IS_MONOTYPE_HANDLE(obj) IS_MONOTYPE (MONO_HANDLE_RAW (obj))\n\n/* This should be used for accessing members of Type[] arrays */\n#define mono_type_array_get(arr,index) monotype_cast (mono_array_get_internal ((arr), gpointer, (index)))\n\n/*\n * Cast an object to MonoReflectionType, making sure it is a System.MonoType or\n * a subclass of it.\n */\nstatic inline MonoReflectionType*\nmonotype_cast (MonoObject *obj)\n{\n\tg_assert (IS_MONOTYPE (obj));\n\n\treturn (MonoReflectionType*)obj;\n}\n\n/*\n * The following structure must match the C# implementation in our corlib.\n */\n\nstruct _MonoReflectionMethod {\n\tMonoObject object;\n\tMonoMethod *method;\n\tMonoString *name;\n\tMonoReflectionType *reftype;\n};\n\n/* Safely access System.Reflection.MonoMethod from native code */\nTYPED_HANDLE_DECL (MonoReflectionMethod);\n\nstruct _MonoDelegate {\n\tMonoObject object;\n\t/* The compiled code of the target method */\n\tgpointer method_ptr;\n\t/* The invoke code */\n\tgpointer invoke_impl;\n\tMonoObject *target;\n\tMonoMethod *method;\n\tgpointer delegate_trampoline;\n\t/* Extra argument passed to the target method in llvmonly mode */\n\tgpointer extra_arg;\n\t/* \n\t * If non-NULL, this points to a memory location which stores the address of \n\t * the compiled code of the method, or NULL if it is not yet compiled.\n\t */\n\tguint8 **method_code;\n\tgpointer interp_method;\n\t/* Interp method that is executed when invoking the delegate */\n\tgpointer interp_invoke_impl;\n\tMonoReflectionMethod *method_info;\n\tMonoReflectionMethod *original_method_info;\n\tMonoObject *data;\n\tMonoBoolean method_is_virtual;\n};\n\ntypedef struct _MonoMulticastDelegate MonoMulticastDelegate;\nstruct _MonoMulticastDelegate {\n\tMonoDelegate delegate;\n\tMonoArray *delegates;\n};\n\n/* Safely access System.MulticastDelegate from native code */\nTYPED_HANDLE_DECL (MonoMulticastDelegate);\n\nstruct _MonoReflectionField {\n\tMonoObject object;\n\tMonoClass *klass;\n\tMonoClassField *field;\n\tMonoString *name;\n\tMonoReflectionType *type;\n\tguint32 attrs;\n};\n\n/* Safely access System.Reflection.MonoField from native code */\nTYPED_HANDLE_DECL (MonoReflectionField);\n\nstruct _MonoReflectionProperty {\n\tMonoObject object;\n\tMonoClass *klass;\n\tMonoProperty *property;\n};\n\n/* Safely access System.Reflection.MonoProperty from native code */\nTYPED_HANDLE_DECL (MonoReflectionProperty);\n\n/*This is System.EventInfo*/\nstruct _MonoReflectionEvent {\n\tMonoObject object;\n#ifndef ENABLE_NETCORE\n\tMonoObject *cached_add_event;\n#endif\n};\n\n/* Safely access System.Reflection.EventInfo from native code */\nTYPED_HANDLE_DECL (MonoReflectionEvent);\n\ntypedef struct {\n\tMonoReflectionEvent object;\n\tMonoClass *klass;\n\tMonoEvent *event;\n} MonoReflectionMonoEvent;\n\n/* Safely access Systme.Reflection.MonoEvent from native code */\nTYPED_HANDLE_DECL (MonoReflectionMonoEvent);\n\ntypedef struct {\n\tMonoObject object;\n} MonoReflectionParameter;\n\n/* Safely access System.Reflection.ParameterInfo from native code */\nTYPED_HANDLE_DECL (MonoReflectionParameter);\n\nstruct _MonoReflectionMethodBody {\n\tMonoObject object;\n};\n\n/* Safely access System.Reflection.MethodBody from native code */\nTYPED_HANDLE_DECL (MonoReflectionMethodBody);\n\n/* System.RuntimeAssembly */\nstruct _MonoReflectionAssembly {\n\tMonoObject object;\n\tMonoAssembly *assembly;\n\t/* CAS related */\n\tMonoObject *evidence;\t/* Evidence */\n};\n\ntypedef struct {\n\tMonoReflectionType *utype;\n\tMonoArray *values;\n\tMonoArray *names;\n} MonoEnumInfo;\n\ntypedef struct {\n\tMonoReflectionType *parent;\n\tMonoReflectionType *ret;\n\tguint32 attrs;\n\tguint32 implattrs;\n\tguint32 callconv;\n} MonoMethodInfo;\n\ntypedef struct {\n\tMonoReflectionType *parent;\n\tMonoReflectionType *declaring_type;\n\tMonoString *name;\n\tMonoReflectionMethod *get;\n\tMonoReflectionMethod *set;\n\tguint32 attrs;\n} MonoPropertyInfo;\n\ntypedef struct {\n\tMonoReflectionType *declaring_type;\n\tMonoReflectionType *reflected_type;\n\tMonoString *name;\n\tMonoReflectionMethod *add_method;\n\tMonoReflectionMethod *remove_method;\n\tMonoReflectionMethod *raise_method;\n\tguint32 attrs;\n\tMonoArray *other_methods;\n} MonoEventInfo;\n\ntypedef struct {\n\tMonoObject *member;\n\tgint32 code_pos;\n} MonoReflectionILTokenInfo;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoArray *code;\n\tgint32 code_len;\n\tgint32 max_stack;\n\tgint32 cur_stack;\n\tMonoArray *locals;\n\tMonoArray *ex_handlers;\n\tgint32 num_token_fixups;\n\tMonoArray *token_fixups;\n} MonoReflectionILGen;\n\ntypedef struct {\n\tMonoArray *handlers;\n\tgint32 start;\n\tgint32 len;\n\tgint32 label;\n} MonoILExceptionInfo;\n\ntypedef struct {\n\tMonoObject *extype;\n\tgint32 type;\n\tgint32 start;\n\tgint32 len;\n\tgint32 filter_offset;\n} MonoILExceptionBlock;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoObject *catch_type;\n\tgint32 filter_offset;\n\tgint32 flags;\n\tgint32 try_offset;\n\tgint32 try_length;\n\tgint32 handler_offset;\n\tgint32 handler_length;\n} MonoReflectionExceptionHandlingClause;\n\n\n/* Safely access System.Reflection.ExceptionHandlingClause from native code */\nTYPED_HANDLE_DECL (MonoReflectionExceptionHandlingClause);\n\ntypedef struct {\n\tMonoObject object;\n\tMonoReflectionType *local_type;\n\tMonoBoolean is_pinned;\n\tguint16 local_index;\n} MonoReflectionLocalVariableInfo;\n\n/* Safely access System.Reflection.LocalVariableInfo from native code */\nTYPED_HANDLE_DECL (MonoReflectionLocalVariableInfo);\n\ntypedef struct {\n\t/*\n\t * Must have the same layout as MonoReflectionLocalVariableInfo, since\n\t * LocalBuilder inherits from it under net 2.0.\n\t */\n\tMonoObject object;\n\tMonoObject *type;\n\tMonoBoolean is_pinned;\n\tguint16 local_index;\n\tMonoString *name;\n} MonoReflectionLocalBuilder;\n\ntypedef struct {\n\tMonoObject object;\n\tgint32 count;\n\tgint32 type;\n\tgint32 eltype;\n\tMonoString *guid;\n\tMonoString *mcookie;\n\tMonoString *marshaltype;\n\tMonoObject *marshaltyperef;\n\tgint32 param_num;\n\tMonoBoolean has_size;\n} MonoReflectionMarshal;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoObject* methodb;\n\tMonoString *name;\n\tMonoArray *cattrs;\n\tMonoReflectionMarshal *marshal_info;\n\tguint32 attrs;\n\tint position;\n\tguint32 table_idx;\n\tMonoObject *def_value;\n} MonoReflectionParamBuilder;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoMethod *mhandle;\n\tMonoReflectionILGen *ilgen;\n\tMonoArray *parameters;\n\tguint32 attrs;\n\tguint32 iattrs;\n\tguint32 table_idx;\n\tguint32 call_conv;\n\tMonoObject *type;\n\tMonoArray *pinfo;\n\tMonoArray *cattrs;\n\tMonoBoolean init_locals;\n\tMonoArray *param_modreq;\n\tMonoArray *param_modopt;\n\tMonoArray *permissions;\n} MonoReflectionCtorBuilder;\n\n/* Safely access System.Reflection.Emit.ConstructorBuilder from native code */\nTYPED_HANDLE_DECL (MonoReflectionCtorBuilder);\n\ntypedef struct {\n\tMonoObject object;\n\tMonoMethod *mhandle;\n\tMonoObject *rtype;\n\tMonoArray *parameters;\n\tguint32 attrs;\n\tguint32 iattrs;\n\tMonoString *name;\n\tguint32 table_idx;\n\tMonoArray *code;\n\tMonoReflectionILGen *ilgen;\n\tMonoObject *type;\n\tMonoArray *pinfo;\n\tMonoArray *cattrs;\n\tMonoArray *override_methods;\n\tMonoString *dll;\n\tMonoString *dllentry;\n\tguint32 charset;\n\tguint32 extra_flags;\n\tguint32 native_cc;\n\tguint32 call_conv;\n\tMonoBoolean init_locals;\n\tMonoGenericContainer *generic_container;\n\tMonoArray *generic_params;\n\tMonoArray *return_modreq;\n\tMonoArray *return_modopt;\n\tMonoArray *param_modreq;\n\tMonoArray *param_modopt;\n\tMonoArray *permissions;\n} MonoReflectionMethodBuilder;\n\n/* Safely access System.Reflection.Emit.MethodBuilder from native code */\nTYPED_HANDLE_DECL (MonoReflectionMethodBuilder);\n\ntypedef struct {\n\tMonoObject object;\n\tMonoMethod *mhandle;\n\tMonoReflectionType *parent;\n\tMonoReflectionType *ret;\n\tMonoArray *parameters;\n\tMonoString *name;\n\tguint32 table_idx;\n\tguint32 call_conv;\n} MonoReflectionArrayMethod;\n\n/* Safely access System.Reflection.Emit.MonoArrayMethod from native code */\nTYPED_HANDLE_DECL (MonoReflectionArrayMethod);\n\ntypedef struct {\n\tMonoArray *data;\n\tMonoString *name;\n\tMonoString *filename;\n\tguint32 attrs;\n\tguint32 offset;\n\tMonoObject *stream;\n} MonoReflectionResource;\n\ntypedef struct {\n\tguint32 res_type;\n\tguint32 res_id;\n\tguint32 lang_id;\n\tMonoArray *res_data;\n} MonoReflectionWin32Resource;\n\ntypedef struct {\n\tguint32 action;\n\tMonoString *pset;\n} MonoReflectionPermissionSet;\n\ntypedef struct {\n\tMonoReflectionAssembly assembly;\n\tMonoDynamicAssembly *dynamic_assembly;\n\tMonoReflectionMethod *entry_point;\n\tMonoArray *modules;\n\tMonoString *name;\n\tMonoString *dir;\n\tMonoArray *cattrs;\n\tMonoArray *resources;\n\tMonoArray *public_key;\n\tMonoString *version;\n\tMonoString *culture;\n\tguint32 algid;\n\tguint32 flags;\n\tguint32 pekind;\n\tMonoBoolean delay_sign;\n\tguint32 access;\n\tMonoArray *loaded_modules;\n\tMonoArray *win32_resources;\n\t/* CAS related */\n\tMonoArray *permissions_minimum;\n\tMonoArray *permissions_optional;\n\tMonoArray *permissions_refused;\n\tgint32 pe_kind;\n\tgint32 machine;\n\tMonoBoolean corlib_internal;\n\tMonoArray *type_forwarders;\n\tMonoArray *pktoken; /* as hexadecimal byte[] */\n} MonoReflectionAssemblyBuilder;\n\n/* Safely access System.Reflection.Emit.AssemblyBuilder from native code */\nTYPED_HANDLE_DECL (MonoReflectionAssemblyBuilder);\n\ntypedef struct {\n\tMonoObject object;\n\tguint32 attrs;\n\tMonoObject *type;\n\tMonoString *name;\n\tMonoObject *def_value;\n\tgint32 offset;\n\tMonoReflectionType *typeb;\n\tMonoArray *rva_data;\n\tMonoArray *cattrs;\n\tMonoReflectionMarshal *marshal_info;\n\tMonoClassField *handle;\n\tMonoArray *modreq;\n\tMonoArray *modopt;\n} MonoReflectionFieldBuilder;\n\n/* Safely access System.Reflection.Emit.FieldBuilder from native code */ \nTYPED_HANDLE_DECL (MonoReflectionFieldBuilder);\n\ntypedef struct {\n\tMonoObject object;\n\tguint32 attrs;\n\tMonoString *name;\n\tMonoObject *type;\n\tMonoArray *parameters;\n\tMonoArray *cattrs;\n\tMonoObject *def_value;\n\tMonoReflectionMethodBuilder *set_method;\n\tMonoReflectionMethodBuilder *get_method;\n\tgint32 table_idx;\n\tMonoObject *type_builder;\n\tMonoArray *returnModReq;\n\tMonoArray *returnModOpt;\n\tMonoArray *paramModReq;\n\tMonoArray *paramModOpt;\n\tguint32 call_conv;\n} MonoReflectionPropertyBuilder;\n\n/* System.RuntimeModule */\nstruct _MonoReflectionModule {\n\tMonoObject\tobj;\n\tMonoImage  *image;\n\tMonoReflectionAssembly *assembly;\n\tMonoString *fqname;\n\tMonoString *name;\n\tMonoString *scopename;\n\tMonoBoolean is_resource;\n\tguint32 token;\n};\n\n/* Safely access System.Reflection.Module from native code */\nTYPED_HANDLE_DECL (MonoReflectionModule);\n\ntypedef struct {\n\tMonoReflectionModule module;\n\tMonoDynamicImage *dynamic_image;\n\tgint32     num_types;\n\tMonoArray *types;\n\tMonoArray *cattrs;\n\tMonoArray *guid;\n\tguint32    table_idx;\n\tMonoReflectionAssemblyBuilder *assemblyb;\n\tMonoArray *global_methods;\n\tMonoArray *global_fields;\n\tgboolean is_main;\n\tMonoArray *resources;\n\tGHashTable *unparented_classes;\n\tMonoArray *table_indexes;\n} MonoReflectionModuleBuilder;\n\n/* Safely acess System.Reflection.Emit.ModuleBuidler from native code */\nTYPED_HANDLE_DECL (MonoReflectionModuleBuilder);\n\ntypedef enum {\n\tMonoTypeBuilderNew = 0,\n\tMonoTypeBuilderEntered = 1,\n\tMonoTypeBuilderFinished = 2\n} MonoTypeBuilderState;\n\nstruct _MonoReflectionTypeBuilder {\n\tMonoReflectionType type;\n\tMonoString *name;\n\tMonoString *nspace;\n\tMonoObject *parent;\n\tMonoReflectionType *nesting_type;\n\tMonoArray *interfaces;\n\tgint32     num_methods;\n\tMonoArray *methods;\n\tMonoArray *ctors;\n\tMonoArray *properties;\n\tgint32     num_fields;\n\tMonoArray *fields;\n\tMonoArray *events;\n\tMonoArray *cattrs;\n\tMonoArray *subtypes;\n\tguint32 attrs;\n\tguint32 table_idx;\n\tMonoReflectionModuleBuilder *module;\n\tgint32 class_size;\n\tgint32 packing_size;\n\tMonoGenericContainer *generic_container;\n\tMonoArray *generic_params;\n\tMonoArray *permissions;\n\tMonoReflectionType *created;\n\tgint32 state;\n};\n\ntypedef struct {\n\tMonoReflectionType type;\n\tMonoReflectionType *element_type;\n\tgint32 rank;\n} MonoReflectionArrayType;\n\n/* Safely access System.Reflection.Emit.ArrayType (in DerivedTypes.cs) from native code */\nTYPED_HANDLE_DECL (MonoReflectionArrayType);\n\ntypedef struct {\n\tMonoReflectionType type;\n\tMonoReflectionType *element_type;\n} MonoReflectionDerivedType;\n\n/* Safely access System.Reflection.Emit.SymbolType and subclasses (in DerivedTypes.cs) from native code */\nTYPED_HANDLE_DECL (MonoReflectionDerivedType);\n\ntypedef struct {\n\tMonoReflectionType type;\n\tMonoReflectionTypeBuilder *tbuilder;\n\tMonoReflectionMethodBuilder *mbuilder;\n\tMonoString *name;\n\tguint32 index;\n\tMonoReflectionType *base_type;\n\tMonoArray *iface_constraints;\n\tMonoArray *cattrs;\n\tguint32 attrs;\n} MonoReflectionGenericParam;\n\n/* Safely access System.Reflection.Emit.GenericTypeParameterBuilder from native code */\nTYPED_HANDLE_DECL (MonoReflectionGenericParam);\n\ntypedef struct {\n\tMonoReflectionType type;\n\tMonoReflectionTypeBuilder *tb;\n} MonoReflectionEnumBuilder;\n\n/* Safely access System.Reflection.Emit.EnumBuilder from native code */\nTYPED_HANDLE_DECL (MonoReflectionEnumBuilder);\n\ntypedef struct _MonoReflectionGenericClass MonoReflectionGenericClass;\nstruct _MonoReflectionGenericClass {\n\tMonoReflectionType type;\n\tMonoReflectionType *generic_type; /*Can be either a MonoType or a TypeBuilder*/\n\tMonoArray *type_arguments;\n};\n\n/* Safely access System.Reflection.Emit.TypeBuilderInstantiation from native code */\nTYPED_HANDLE_DECL (MonoReflectionGenericClass);\n\ntypedef struct {\n\tMonoObject  obj;\n\tMonoString *name;\n\tMonoString *codebase;\n\tgint32 major, minor, build, revision;\n\tMonoObject  *cultureInfo;\n\tguint32     flags;\n\tguint32     hashalg;\n\tMonoObject  *keypair;\n\tMonoArray   *publicKey;\n\tMonoArray   *keyToken;\n\tguint32     versioncompat;\n\tMonoObject *version;\n\tguint32     processor_architecture;\n} MonoReflectionAssemblyName;\n\n/* Safely access System.Reflection.AssemblyName from native code */\nTYPED_HANDLE_DECL (MonoReflectionAssemblyName);\n\ntypedef struct {\n\tMonoObject  obj;\n\tMonoString *name;\n\tMonoReflectionType *type;\n\tMonoReflectionTypeBuilder *typeb;\n\tMonoArray *cattrs;\n\tMonoReflectionMethodBuilder *add_method;\n\tMonoReflectionMethodBuilder *remove_method;\n\tMonoReflectionMethodBuilder *raise_method;\n\tMonoArray *other_methods;\n\tguint32 attrs;\n\tguint32 table_idx;\n} MonoReflectionEventBuilder;\n\ntypedef struct {\n\tMonoObject  obj;\n\tMonoReflectionMethod *ctor;\n\tMonoArray *data;\n} MonoReflectionCustomAttr;\n\nTYPED_HANDLE_DECL (MonoReflectionCustomAttr);\n\n#if ENABLE_NETCORE\ntypedef struct {\n\tMonoObject object;\n\tguint32 utype;\n\tgint32 safe_array_subtype;\n\tMonoReflectionType *marshal_safe_array_user_defined_subtype;\n\tgint32 IidParameterIndex;\n\tguint32 array_subtype;\n\tgint16 size_param_index;\n\tgint32 size_const;\n\tMonoString *marshal_type;\n\tMonoReflectionType *marshal_type_ref;\n\tMonoString *marshal_cookie;\n} MonoReflectionMarshalAsAttribute;\n#else\ntypedef struct {\n\tMonoObject object;\n\tMonoString *marshal_cookie;\n\tMonoString *marshal_type;\n\tMonoReflectionType *marshal_type_ref;\n\tMonoReflectionType *marshal_safe_array_user_defined_subtype;\n\tguint32 utype;\n\tguint32 array_subtype;\n\tgint32 safe_array_subtype;\n\tgint32 size_const;\n\tgint32 IidParameterIndex;\n\tgint16 size_param_index;\n} MonoReflectionMarshalAsAttribute;\n#endif\n\n/* Safely access System.Runtime.InteropServices.MarshalAsAttribute */\nTYPED_HANDLE_DECL (MonoReflectionMarshalAsAttribute);\n\ntypedef struct {\n\tMonoObject object;\n\tgint32 call_conv;\n\tgint32 charset;\n\tMonoBoolean best_fit_mapping;\n\tMonoBoolean throw_on_unmappable;\n\tMonoBoolean set_last_error;\n} MonoReflectionUnmanagedFunctionPointerAttribute;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoString *guid;\n} MonoReflectionGuidAttribute;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoMethod *mhandle;\n\tMonoString *name;\n\tMonoReflectionType *rtype;\n\tMonoArray *parameters;\n\tguint32 attrs;\n\tguint32 call_conv;\n\tMonoReflectionModule *module;\n\tMonoBoolean skip_visibility;\n\tMonoBoolean init_locals;\n\tMonoReflectionILGen *ilgen;\n\tgint32 nrefs;\n\tMonoArray *refs;\n\tGSList *referenced_by;\n\tMonoReflectionType *owner;\n} MonoReflectionDynamicMethod;\t\n\n/* Safely access System.Reflection.Emit.DynamicMethod from native code */\nTYPED_HANDLE_DECL (MonoReflectionDynamicMethod);\n\ntypedef struct {\n\tMonoObject object;\n\tMonoReflectionModuleBuilder *module;\n\tMonoArray *arguments;\n\tguint32 type;\n\tMonoReflectionType *return_type;\n\tguint32 call_conv;\n\tguint32 unmanaged_call_conv;\n\tMonoArray *modreqs;\n\tMonoArray *modopts;\n} MonoReflectionSigHelper;\n\n/* Safely access System.Reflection.Emit.SignatureHelper from native code */\nTYPED_HANDLE_DECL (MonoReflectionSigHelper);\n\ntypedef struct {\n\tMonoObject object;\n\tMonoBoolean visible;\n} MonoReflectionComVisibleAttribute;\n\ntypedef struct {\n\tMonoObject object;\n\tMonoReflectionType *type;\n} MonoReflectionComDefaultInterfaceAttribute;\n\nenum {\n\tRESOURCE_LOCATION_EMBEDDED = 1,\n\tRESOURCE_LOCATION_ANOTHER_ASSEMBLY = 2,\n\tRESOURCE_LOCATION_IN_MANIFEST = 4\n};\n\ntypedef struct {\n\tMonoObject object;\n\tMonoReflectionAssembly *assembly;\n\tMonoString *filename;\n\tguint32 location;\n} MonoManifestResourceInfo;\n\n/* Safely access System.Reflection.ManifestResourceInfo from native code */\nTYPED_HANDLE_DECL (MonoManifestResourceInfo);\n\n/* A boxed IntPtr */\ntypedef struct {\n\tMonoObject object;\n\tgpointer m_value;\n} MonoIntPtr;\n\n/* Keep in sync with System.GenericParameterAttributes */\ntypedef enum {\n\tGENERIC_PARAMETER_ATTRIBUTE_NON_VARIANT\t\t= 0,\n\tGENERIC_PARAMETER_ATTRIBUTE_COVARIANT\t\t= 1,\n\tGENERIC_PARAMETER_ATTRIBUTE_CONTRAVARIANT\t= 2,\n\tGENERIC_PARAMETER_ATTRIBUTE_VARIANCE_MASK\t= 3,\n\n\tGENERIC_PARAMETER_ATTRIBUTE_NO_SPECIAL_CONSTRAINT\t= 0,\n\tGENERIC_PARAMETER_ATTRIBUTE_REFERENCE_TYPE_CONSTRAINT\t= 4,\n\tGENERIC_PARAMETER_ATTRIBUTE_VALUE_TYPE_CONSTRAINT\t= 8,\n\tGENERIC_PARAMETER_ATTRIBUTE_CONSTRUCTOR_CONSTRAINT\t= 16,\n\tGENERIC_PARAMETER_ATTRIBUTE_SPECIAL_CONSTRAINTS_MASK\t= 28\n} GenericParameterAttributes;\n\ntypedef struct {\n\tMonoType *type;\n\tMonoClassField *field;\n\tMonoProperty *prop;\n} CattrNamedArg;\n\n/* All MonoInternalThread instances should be pinned, so it's safe to use the raw ptr.  However\n * for uniformity, icall wrapping will make handles anyway.  So this is the method for getting the payload.\n */\nstatic inline MonoInternalThread*\nmono_internal_thread_handle_ptr (MonoInternalThreadHandle h)\n{\n\t/* The SUPPRESS here prevents a Centrinel warning due to merely seeing this\n\t * function definition.  Callees will still get a warning unless we\n\t * attach a suppress attribute to the declaration.\n\t */\n\treturn MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (h));\n}\n\ngboolean          mono_image_create_pefile (MonoReflectionModuleBuilder *module, gpointer file, MonoError *error);\nguint32       mono_image_insert_string (MonoReflectionModuleBuilderHandle module, MonoStringHandle str, MonoError *error);\nguint32       mono_image_create_token  (MonoDynamicImage *assembly, MonoObjectHandle obj, gboolean create_methodspec, gboolean register_token, MonoError *error);\nvoid          mono_dynamic_image_free (MonoDynamicImage *image);\nvoid          mono_dynamic_image_free_image (MonoDynamicImage *image);\nvoid          mono_dynamic_image_release_gc_roots (MonoDynamicImage *image);\n\nvoid        mono_reflection_setup_internal_class  (MonoReflectionTypeBuilder *tb);\n\nvoid        mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides, MonoError *error);\n\nvoid mono_reflection_destroy_dynamic_method (MonoReflectionDynamicMethod *mb);\n\nICALL_EXPORT\nvoid\nves_icall_SymbolType_create_unmanaged_type (MonoReflectionType *type);\n\nvoid        mono_reflection_register_with_runtime (MonoReflectionType *type);\n\nMonoMethodSignature * mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32 token, MonoError *error);\n\nMonoArrayHandle mono_param_get_objects_internal  (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error);\n\nMonoClass*\nmono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic);\nMonoType*\nmono_reflection_bind_generic_parameters (MonoReflectionTypeHandle type, int type_argc, MonoType **types, MonoError *error);\nvoid\nmono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, MonoArray *fields);\n\nICALL_EXPORT\nMonoReflectionEvent *\nves_icall_TypeBuilder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb);\n\nMonoReflectionMarshalAsAttributeHandle\nmono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec, MonoError *error);\n\ngpointer\nmono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);\n\ngboolean\nmono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass, MonoError *error);\n\ngboolean\nmono_image_build_metadata (MonoReflectionModuleBuilder *module, MonoError *error);\n\ngboolean\nmono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value, MonoStringHandleOut string_handle, MonoError *error);\n\ngboolean\nmono_metadata_read_constant_value (const char *blob, MonoTypeEnum type, void *value, MonoError *error);\n\nchar*\nmono_string_from_blob (const char *str, MonoError *error);\n\nvoid\nmono_release_type_locks (MonoInternalThread *thread);\n\n/**\n * mono_string_handle_length:\n * \\param s \\c MonoString\n * \\returns the length in characters of the string\n */\n#ifdef ENABLE_CHECKED_BUILD_GC\n\nint\nmono_string_handle_length (MonoStringHandle s);\n\n#else\n\n#define mono_string_handle_length(s) (MONO_HANDLE_GETVAL ((s), length))\n\n#endif\n\nchar *\nmono_string_handle_to_utf8 (MonoStringHandle s, MonoError *error);\n\nchar *\nmono_string_to_utf8_image (MonoImage *image, MonoStringHandle s, MonoError *error);\n\nMonoArrayHandle\nmono_array_clone_in_domain (MonoDomain *domain, MonoArrayHandle array, MonoError *error);\n\nMonoArray*\nmono_array_clone_checked (MonoArray *array, MonoError *error);\n\nvoid\nmono_array_full_copy (MonoArray *src, MonoArray *dest);\n\ngboolean\nmono_array_calc_byte_len (MonoClass *klass, uintptr_t len, uintptr_t *res);\n\nMonoArray*\nmono_array_new_checked (MonoDomain *domain, MonoClass *eclass, uintptr_t n, MonoError *error);\n\nMonoArray*\nmono_array_new_full_checked (MonoDomain *domain, MonoClass *array_class, uintptr_t *lengths, intptr_t *lower_bounds, MonoError *error);\n\nICALL_EXPORT\nMonoArray*\nves_icall_array_new (MonoDomain *domain, MonoClass *eclass, uintptr_t n);\n\nICALL_EXPORT\nMonoArray*\nves_icall_array_new_specific (MonoVTable *vtable, uintptr_t n);\n\n#ifndef DISABLE_REMOTING\nMonoRemoteClass*\nmono_remote_class (MonoDomain *domain, MonoStringHandle class_name, MonoClass *proxy_class, MonoError *error);\n\ngboolean\nmono_remote_class_is_interface_proxy (MonoRemoteClass *remote_class);\n\nMonoObject *\nmono_remoting_invoke (MonoObject *real_proxy, MonoMethodMessage *msg, MonoObject **exc, MonoArray **out_args, MonoError *error);\n\ngpointer\nmono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, MonoRealProxyHandle real_proxy, MonoError *error);\n\ngboolean\nmono_upgrade_remote_class (MonoDomain *domain, MonoObjectHandle tproxy, MonoClass *klass, MonoError *error);\n\nvoid*\nmono_load_remote_field_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, void **res, MonoError *error);\n\nMonoObject *\nmono_load_remote_field_new_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoError *error);\n\ngboolean\nmono_store_remote_field_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, void* val, MonoError *error);\n\ngboolean\nmono_store_remote_field_new_checked (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoObject *arg, MonoError *error);\n\n\n#endif\n\ngpointer\nmono_create_ftnptr (MonoDomain *domain, gpointer addr);\n\ngpointer\nmono_get_addr_from_ftnptr (gpointer descr);\n\nvoid\nmono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass);\n\nvoid\nmono_nullable_init_from_handle (guint8 *buf, MonoObjectHandle value, MonoClass *klass);\n\nvoid\nmono_nullable_init_unboxed (guint8 *buf, gpointer value, MonoClass *klass);\n\nMonoObject *\nmono_value_box_checked (MonoDomain *domain, MonoClass *klass, void* val, MonoError *error);\n\nMonoObjectHandle\nmono_value_box_handle (MonoDomain *domain, MonoClass *klass, gpointer val, MonoError *error);\n\nMonoObject*\nmono_nullable_box (gpointer buf, MonoClass *klass, MonoError *error);\n\nMonoObjectHandle\nmono_nullable_box_handle (gpointer buf, MonoClass *klass, MonoError *error);\n\n// A code size optimization (source and object) equivalent to MONO_HANDLE_NEW (MonoObject, NULL);\nMonoObjectHandle\nmono_new_null (void);\n\n#ifdef MONO_SMALL_CONFIG\n#define MONO_IMT_SIZE 9\n#else\n#define MONO_IMT_SIZE 19\n#endif\n\ntypedef union {\n\tint vtable_slot;\n\tgpointer target_code;\n} MonoImtItemValue;\n\ntypedef struct _MonoImtBuilderEntry {\n\tgpointer key;\n\tstruct _MonoImtBuilderEntry *next;\n\tMonoImtItemValue value;\n\tint children;\n\tguint8 has_target_code : 1;\n} MonoImtBuilderEntry;\n\ntypedef struct _MonoIMTCheckItem MonoIMTCheckItem;\n\nstruct _MonoIMTCheckItem {\n\tgpointer          key;\n\tint               check_target_idx;\n\tMonoImtItemValue  value;\n\tguint8           *jmp_code;\n\tguint8           *code_target;\n\tguint8            is_equals;\n\tguint8            compare_done;\n\tguint8            chunk_size;\n\tguint8            short_branch;\n\tguint8            has_target_code;\n};\n\ntypedef gpointer (*MonoImtTrampolineBuilder) (MonoVTable *vtable, MonoDomain *domain,\n\t\tMonoIMTCheckItem **imt_entries, int count, gpointer fail_trunk);\n\nvoid\nmono_install_imt_trampoline_builder (MonoImtTrampolineBuilder func);\n\nvoid\nmono_set_always_build_imt_trampolines (gboolean value);\n\nvoid\nmono_vtable_build_imt_slot (MonoVTable* vtable, int imt_slot);\n\nguint32\nmono_method_get_imt_slot (MonoMethod *method);\n\nvoid\nmono_method_add_generic_virtual_invocation (MonoDomain *domain, MonoVTable *vtable,\n\t\t\t\t\t\t\t\t\t\t\tgpointer *vtable_slot,\n\t\t\t\t\t\t\t\t\t\t\tMonoMethod *method, gpointer code);\n\ngpointer\nmono_method_alloc_generic_virtual_trampoline (MonoDomain *domain, int size);\n\n#define mono_method_alloc_generic_virtual_trampoline(domain, size) (g_cast (mono_method_alloc_generic_virtual_trampoline ((domain), (size))))\n\ntypedef enum {\n\tMONO_UNHANDLED_POLICY_LEGACY,\n\tMONO_UNHANDLED_POLICY_CURRENT\n} MonoRuntimeUnhandledExceptionPolicy;\n\nMonoRuntimeUnhandledExceptionPolicy\nmono_runtime_unhandled_exception_policy_get (void);\nvoid\nmono_runtime_unhandled_exception_policy_set (MonoRuntimeUnhandledExceptionPolicy policy);\n\nvoid\nmono_unhandled_exception_checked (MonoObjectHandle exc, MonoError *error);\n\nMonoVTable *\nmono_class_try_get_vtable (MonoDomain *domain, MonoClass *klass);\n\ngboolean\nmono_runtime_run_module_cctor (MonoImage *image, MonoDomain *domain, MonoError *error);\n\ngboolean\nmono_runtime_class_init_full (MonoVTable *vtable, MonoError *error);\n\nvoid\nmono_method_clear_object (MonoDomain *domain, MonoMethod *method);\n\ngsize*\nmono_class_compute_bitmap (MonoClass *klass, gsize *bitmap, int size, int offset, int *max_set, gboolean static_fields);\n\nMonoObjectHandle\nmono_object_xdomain_representation (MonoObjectHandle obj, MonoDomain *target_domain, MonoError *error);\n\ngboolean\nmono_class_is_reflection_method_or_constructor (MonoClass *klass);\n\nMonoObjectHandle\nmono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob, MonoStringHandleOut string_handle, MonoError *error);\n\ngboolean\nmono_class_has_ref_info (MonoClass *klass);\n\nMonoReflectionTypeBuilder*\nmono_class_get_ref_info_raw (MonoClass *klass);\n\nvoid\nmono_class_set_ref_info (MonoClass *klass, MonoObjectHandle obj);\n\nvoid\nmono_class_free_ref_info (MonoClass *klass);\n\nMonoObject *\nmono_object_new_pinned (MonoDomain *domain, MonoClass *klass, MonoError *error);\n\nMonoObjectHandle\nmono_object_new_pinned_handle (MonoDomain *domain, MonoClass *klass, MonoError *error);\n\nMonoObject *\nmono_object_new_specific_checked (MonoVTable *vtable, MonoError *error);\n\nICALL_EXPORT\nMonoObject *\nves_icall_object_new (MonoDomain *domain, MonoClass *klass);\n\t\nICALL_EXPORT\nMonoObject *\nves_icall_object_new_specific (MonoVTable *vtable);\n\nMonoObject *\nmono_object_new_alloc_specific_checked (MonoVTable *vtable, MonoError *error);\n\nvoid\nmono_field_get_value_internal (MonoObject *obj, MonoClassField *field, void *value);\n\nvoid\nmono_field_static_get_value_checked (MonoVTable *vt, MonoClassField *field, void *value, MonoStringHandleOut string_handle, MonoError *error);\n\nvoid\nmono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value, MonoStringHandleOut string_handle, MonoError *error);\n\nMonoMethod*\nmono_object_handle_get_virtual_method (MonoObjectHandle obj, MonoMethod *method, MonoError *error);\n\n/* exported, used by the debugger */\nMONO_API void *\nmono_vtable_get_static_field_data (MonoVTable *vt);\n\nMonoObject *\nmono_field_get_value_object_checked (MonoDomain *domain, MonoClassField *field, MonoObject *obj, MonoError *error);\n\nMonoObjectHandle\nmono_static_field_get_value_handle (MonoDomain *domain, MonoClassField *field, MonoError *error);\n\ngboolean\nmono_property_set_value_handle (MonoProperty *prop, MonoObjectHandle obj, void **params, MonoError *error);\n\nMonoObject*\nmono_property_get_value_checked (MonoProperty *prop, void *obj, void **params, MonoError *error);\n\nMonoString*\nmono_object_try_to_string (MonoObject *obj, MonoObject **exc, MonoError *error);\n\nchar *\nmono_string_to_utf8_ignore (MonoString *s);\n\ngboolean\nmono_monitor_is_il_fastpath_wrapper (MonoMethod *method);\n\nMonoStringHandle\nmono_string_is_interned_lookup (MonoStringHandle str, gboolean insert, MonoError *error);\n\n/**\n * mono_string_intern_checked:\n * \\param str String to intern\n * \\param error set on error.\n * Interns the string passed.\n * \\returns The interned string. On failure returns NULL and sets \\p error\n */\n#define mono_string_intern_checked(str, error) (mono_string_is_interned_lookup ((str), TRUE, (error)))\n\n/**\n * mono_string_is_interned_internal:\n * \\param o String to probe\n * \\returns Whether the string has been interned.\n */\n#define mono_string_is_interned_internal(str, error) (mono_string_is_interned_lookup ((str), FALSE, (error)))\n\nchar *\nmono_exception_handle_get_native_backtrace (MonoExceptionHandle exc);\n\nchar *\nmono_exception_get_managed_backtrace (MonoException *exc);\n\nvoid\nmono_copy_value (MonoType *type, void *dest, void *value, int deref_pointer);\n\nvoid\nmono_error_raise_exception_deprecated (MonoError *target_error);\n\ngboolean\nmono_error_set_pending_exception_slow (MonoError *error);\n\nstatic inline gboolean\nmono_error_set_pending_exception (MonoError *error)\n{\n\treturn is_ok (error) ? FALSE : mono_error_set_pending_exception_slow (error);\n}\n\nMonoArray *\nmono_glist_to_array (GList *list, MonoClass *eclass, MonoError *error);\n\nMonoObject *\nmono_object_new_checked (MonoDomain *domain, MonoClass *klass, MonoError *error);\n\nMonoObjectHandle\nmono_object_new_handle (MonoDomain *domain, MonoClass *klass, MonoError *error);\n\n// This function skips handling of remoting and COM.\n// \"alloc\" means \"less\".\nMonoObjectHandle\nmono_object_new_alloc_by_vtable (MonoVTable *vtable, MonoError *error);\n\nMonoObject*\nmono_object_new_mature (MonoVTable *vtable, MonoError *error);\n\nMonoObjectHandle\nmono_object_new_handle_mature (MonoVTable *vtable, MonoError *error);\n\nMonoObject *\nmono_object_clone_checked (MonoObject *obj, MonoError *error);\n\nMonoObjectHandle\nmono_object_clone_handle (MonoObjectHandle obj, MonoError *error);\n\nMonoObject *\nmono_object_isinst_checked (MonoObject *obj, MonoClass *klass, MonoError *error);\n\nMonoObjectHandle\nmono_object_handle_isinst (MonoObjectHandle obj, MonoClass *klass, MonoError *error);\n\nMonoObjectHandle\nmono_object_handle_isinst_mbyref (MonoObjectHandle obj, MonoClass *klass, MonoError *error);\n\ngboolean\nmono_object_handle_isinst_mbyref_raw (MonoObjectHandle obj, MonoClass *klass, MonoError *error);\n\nMonoStringHandle\nmono_string_new_size_handle (MonoDomain *domain, gint32 len, MonoError *error);\n\nMonoString*\nmono_string_new_len_checked (MonoDomain *domain, const char *text, guint length, MonoError *error);\n\nMonoString *\nmono_string_new_size_checked (MonoDomain *domain, gint32 len, MonoError *error);\n\nMonoString*\nmono_ldstr_checked (MonoDomain *domain, MonoImage *image, uint32_t str_index, MonoError *error);\n\nMonoStringHandle\nmono_ldstr_handle (MonoDomain *domain, MonoImage *image, uint32_t str_index, MonoError *error);\n\nMONO_PROFILER_API MonoString*\nmono_string_new_checked (MonoDomain *domain, const char *text, MonoError *merror);\n\nMonoString*\nmono_string_new_wtf8_len_checked (MonoDomain *domain, const char *text, guint length, MonoError *error);\n\nMonoString *\nmono_string_new_utf16_checked (MonoDomain *domain, const gunichar2 *text, gint32 len, MonoError *error);\n\nMonoStringHandle\nmono_string_new_utf16_handle (MonoDomain *domain, const gunichar2 *text, gint32 len, MonoError *error);\n\nMonoStringHandle\nmono_string_new_utf8_len (MonoDomain *domain, const char *text, guint length, MonoError *error);\n\nMonoString *\nmono_string_from_utf16_checked (const mono_unichar2 *data, MonoError *error);\n\nMonoString *\nmono_string_from_utf32_checked (const mono_unichar4 *data, MonoError *error);\n\nchar*\nmono_ldstr_utf8 (MonoImage *image, guint32 idx, MonoError *error);\n\nchar*\nmono_utf16_to_utf8 (const mono_unichar2 *s, gsize slength, MonoError *error);\n\nchar*\nmono_utf16_to_utf8len (const mono_unichar2 *s, gsize slength, gsize *utf8_length, MonoError *error);\n\ngboolean\nmono_runtime_object_init_checked (MonoObject *this_obj, MonoError *error);\n\nMONO_PROFILER_API MonoObject*\nmono_runtime_try_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);\n\n// The exc parameter is deliberately missing and so far this has proven to reduce code duplication.\n// In particular, if an exception is returned from underlying otherwise succeeded call,\n// is set into the MonoError with mono_error_set_exception_instance.\n// The result is that caller need only check MonoError.\nMonoObjectHandle\nmono_runtime_try_invoke_handle (MonoMethod *method, MonoObjectHandle obj, void **params, MonoError* error);\n\nMonoObject*\nmono_runtime_invoke_checked (MonoMethod *method, void *obj, void **params, MonoError *error);\n\nMonoObjectHandle\nmono_runtime_invoke_handle (MonoMethod *method, MonoObjectHandle obj, void **params, MonoError* error);\n\nvoid\nmono_runtime_invoke_handle_void (MonoMethod *method, MonoObjectHandle obj, void **params, MonoError* error);\n\nMonoObject*\nmono_runtime_try_invoke_array (MonoMethod *method, void *obj, MonoArray *params,\n\t\t\t       MonoObject **exc, MonoError *error);\n\nMonoObject*\nmono_runtime_invoke_array_checked (MonoMethod *method, void *obj, MonoArray *params,\n\t\t\t\t   MonoError *error);\n\nvoid* \nmono_compile_method_checked (MonoMethod *method, MonoError *error);\n\nMonoObject*\nmono_runtime_delegate_try_invoke (MonoObject *delegate, void **params,\n\t\t\t\t  MonoObject **exc, MonoError *error);\n\nMonoObject*\nmono_runtime_delegate_invoke_checked (MonoObject *delegate, void **params,\n\t\t\t\t      MonoError *error);\n\nMonoArrayHandle\nmono_runtime_get_main_args_handle (MonoError *error);\n\nint\nmono_runtime_run_main_checked (MonoMethod *method, int argc, char* argv[],\n\t\t\t       MonoError *error);\n\nint\nmono_runtime_try_run_main (MonoMethod *method, int argc, char* argv[],\n\t\t\t   MonoObject **exc);\n\nint\nmono_runtime_exec_main_checked (MonoMethod *method, MonoArray *args, MonoError *error);\n\nint\nmono_runtime_try_exec_main (MonoMethod *method, MonoArray *args, MonoObject **exc);\n\nMonoAssembly*\nmono_try_assembly_resolve_handle (MonoAssemblyLoadContext *alc, MonoStringHandle fname, MonoAssembly *requesting, gboolean refonly, MonoError *error);\n\ngboolean\nmono_runtime_object_init_handle (MonoObjectHandle this_obj, MonoError *error);\n\n/* GC write barriers support */\nvoid\nmono_gc_wbarrier_object_copy_handle (MonoObjectHandle obj, MonoObjectHandle src);\n\nMonoMethod*\nmono_class_get_virtual_method (MonoClass *klass, MonoMethod *method, gboolean is_proxy, MonoError *error);\n\nMonoStringHandle\nmono_string_empty_handle (MonoDomain *domain);\n\n/*\n * mono_object_get_data:\n *\n *   Return a pointer to the beginning of data inside a MonoObject.\n */\nstatic inline gpointer\nmono_object_get_data (MonoObject *o)\n{\n\treturn (guint8*)o + MONO_ABI_SIZEOF (MonoObject);\n}\n\n#define mono_handle_get_data_unsafe(handle) ((gpointer)((guint8*)MONO_HANDLE_RAW (handle) + MONO_ABI_SIZEOF (MonoObject)))\n\ngpointer\nmono_vtype_get_field_addr (gpointer vtype, MonoClassField *field);\n\n#define MONO_OBJECT_SETREF_INTERNAL(obj,fieldname,value) do {\t\\\n\t\tmono_gc_wbarrier_set_field_internal ((MonoObject*)(obj), &((obj)->fieldname), (MonoObject*)value);\t\\\n\t\t/*(obj)->fieldname = (value);*/\t\\\n\t} while (0)\n\n/* This should be used if 's' can reside on the heap */\n#define MONO_STRUCT_SETREF_INTERNAL(s,field,value) do { \\\n        mono_gc_wbarrier_generic_store_internal (&((s)->field), (MonoObject*)(value)); \\\n    } while (0)\n\nstatic inline gunichar2*\nmono_string_chars_internal (MonoString *s)\n{\n\tMONO_REQ_GC_UNSAFE_MODE;\n\treturn s->chars;\n}\n\nstatic inline int\nmono_string_length_internal (MonoString *s)\n{\n\tMONO_REQ_GC_UNSAFE_MODE;\n\treturn s->length;\n}\n\nMonoString*\nmono_string_empty_internal (MonoDomain *domain);\n\nchar *\nmono_string_to_utf8len (MonoStringHandle s, gsize *utf8len, MonoError *error);\n\nchar*\nmono_string_to_utf8_checked_internal (MonoString *string_obj, MonoError *error);\n\nmono_bool\nmono_string_equal_internal (MonoString *s1, MonoString *s2);\n\nunsigned\nmono_string_hash_internal (MonoString *s);\n\nint\nmono_object_hash_internal (MonoObject* obj);\n\nICALL_EXTERN_C\nvoid\nmono_value_copy_internal (void* dest, const void* src, MonoClass *klass);\n\nvoid\nmono_value_copy_array_internal (MonoArray *dest, int dest_idx, const void* src, int count);\n\nMONO_PROFILER_API MonoVTable* mono_object_get_vtable_internal (MonoObject *obj);\n\nMonoDomain*\nmono_object_get_domain_internal (MonoObject *obj);\n\nstatic inline gpointer\nmono_object_unbox_internal (MonoObject *obj)\n{\n\t/* add assert for valuetypes? */\n\tg_assert (m_class_is_valuetype (mono_object_class (obj)));\n\treturn mono_object_get_data (obj);\n}\n\nICALL_EXPORT\nvoid\nmono_monitor_exit_internal (MonoObject *obj);\n\nMONO_PROFILER_API unsigned mono_object_get_size_internal (MonoObject *o);\n\nMONO_PROFILER_API MonoDomain* mono_vtable_domain_internal (MonoVTable *vtable);\n\nMONO_PROFILER_API MonoClass* mono_vtable_class_internal (MonoVTable *vtable);\n\nMonoMethod*\nmono_object_get_virtual_method_internal (MonoObject *obj, MonoMethod *method);\n\nMonoMethod*\nmono_get_delegate_invoke_internal (MonoClass *klass);\n\nMonoMethod*\nmono_get_delegate_begin_invoke_internal (MonoClass *klass);\n\nMonoMethod*\nmono_get_delegate_end_invoke_internal (MonoClass *klass);\n\nvoid\nmono_unhandled_exception_internal (MonoObject *exc);\n\nvoid\nmono_print_unhandled_exception_internal (MonoObject *exc);\n\nvoid\nmono_raise_exception_internal (MonoException *ex);\n\nvoid\nmono_field_set_value_internal (MonoObject *obj, MonoClassField *field, void *value);\n\nvoid\nmono_field_static_set_value_internal (MonoVTable *vt, MonoClassField *field, void *value);\n\nvoid\nmono_field_get_value_internal (MonoObject *obj, MonoClassField *field, void *value);\n\nMonoMethod* mono_get_context_capture_method (void);\n\nguint8*\nmono_runtime_get_aotid_arr (void);\n\n/* GC handles support\n *\n * A handle can be created to refer to a managed object and either prevent it\n * from being garbage collected or moved or to be able to know if it has been\n * collected or not (weak references).\n * mono_gchandle_new () is used to prevent an object from being garbage collected\n * until mono_gchandle_free() is called. Use a TRUE value for the pinned argument to\n * prevent the object from being moved (this should be avoided as much as possible\n * and this should be used only for shorts periods of time or performance will suffer).\n * To create a weakref use mono_gchandle_new_weakref (): track_resurrection should\n * usually be false (see the GC docs for more details).\n * mono_gchandle_get_target () can be used to get the object referenced by both kinds\n * of handle: for a weakref handle, if an object has been collected, it will return NULL.\n */\nuint32_t\nmono_gchandle_new_internal (MonoObject *obj, mono_bool pinned);\n\nuint32_t\nmono_gchandle_new_weakref_internal (MonoObject *obj, mono_bool track_resurrection);\n\nICALL_EXTERN_C\nMonoObject*\nmono_gchandle_get_target_internal (uint32_t gchandle);\n\nvoid mono_gchandle_free_internal (uint32_t gchandle);\n\n/* Reference queue support\n *\n * A reference queue is used to get notifications of when objects are collected.\n * Call mono_gc_reference_queue_new to create a new queue and pass the callback that\n * will be invoked when registered objects are collected.\n * Call mono_gc_reference_queue_add to register a pair of objects and data within a queue.\n * The callback will be triggered once an object is both unreachable and finalized.\n */\nMonoReferenceQueue*\nmono_gc_reference_queue_new_internal (mono_reference_queue_callback callback);\n\nvoid\nmono_gc_reference_queue_free_internal (MonoReferenceQueue *queue);\n\nmono_bool\nmono_gc_reference_queue_add_internal (MonoReferenceQueue *queue, MonoObject *obj, void *user_data);\n\n#define mono_gc_reference_queue_add_handle(queue, obj, user_data) \\\n\t(mono_gc_reference_queue_add_internal ((queue), MONO_HANDLE_RAW (MONO_HANDLE_CAST (MonoObject, obj)), (user_data)))\n\n/* GC write barriers support */\nvoid\nmono_gc_wbarrier_set_field_internal (MonoObject *obj, void* field_ptr, MonoObject* value);\n\nvoid\nmono_gc_wbarrier_set_arrayref_internal  (MonoArray *arr, void* slot_ptr, MonoObject* value);\n\nvoid\nmono_gc_wbarrier_arrayref_copy_internal (void* dest_ptr, const void* src_ptr, int count);\n\nvoid\nmono_gc_wbarrier_generic_store_internal (void volatile* ptr, MonoObject* value);\n\nvoid\nmono_gc_wbarrier_generic_store_atomic_internal (void *ptr, MonoObject *value);\n\nICALL_EXTERN_C\nvoid\nmono_gc_wbarrier_generic_nostore_internal (void* ptr);\n\nvoid\nmono_gc_wbarrier_value_copy_internal (void* dest, const void* src, int count, MonoClass *klass);\n\nvoid\nmono_gc_wbarrier_object_copy_internal (MonoObject* obj, MonoObject *src);\n\n#endif /* __MONO_OBJECT_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/object-offsets.h",
    "content": "\n/**\n\\file\nThis is a parameterized header. It's supposed/ok to be included multiple times.\n\nInput defines: (those to be defined by the includer file)\n\nRequired:\nDECL_OFFSET(struct,field)\nDECL_OFFSET2(struct,field,offset)\nDECL_ALIGN2(name,alignment)\n\nOptional:\nUSE_CROSS_COMPILE_OFFSETS - if defined, force the cross compiler offsets to be used, otherwise\n\tthey will only be used if MONO_CROSS_COMPILE is defined\nDISABLE_METADATA_OFFSETS - Disable the definition of offsets for structures defined in metadata/.\nDISABLE_JIT_OFFSETS - Disable the definition of offsets for structures defined in mini/.\n\nThe last two are needed because metadata shouldn't include JIT offsets since the structures\nare not defined, while the JIT shouldn't include metadata offsets, since some of them\nare GC specific, and the JIT needs to remain GC agnostic.\n\nOutput defines:\n\nHAS_CROSS_COMPILER_OFFSETS - if set, it means we found some cross offsets, it doesnt mean we'll use it.\nUSED_CROSS_COMPILER_OFFSETS - if set, it means we used the cross offsets\n\nEnvironment defines (from config.h and CFLAGS):\n\nMONO_GENERATING_OFFSETS - Set by an offsets generating tool to disable the usage of any (possibly non-existing) generated header.\nMONO_OFFSETS_FILE - Name of the header file containing the offsets to be used.\n\n*/\n\n\n#undef HAS_CROSS_COMPILER_OFFSETS\n#undef USED_CROSS_COMPILER_OFFSETS\n\n#if !defined (MONO_GENERATING_OFFSETS) && defined (MONO_OFFSETS_FILE)\n#include MONO_OFFSETS_FILE\n#endif\n\n#ifndef USED_CROSS_COMPILER_OFFSETS\n\nDECL_SIZE(gint8)\nDECL_SIZE(gint16)\nDECL_SIZE(gint32)\nDECL_SIZE(gint64)\nDECL_SIZE(float)\nDECL_SIZE(double)\nDECL_SIZE(gpointer)\n\n// Offsets for structures defined in metadata/\n#ifndef DISABLE_METADATA_OFFSETS\nDECL_OFFSET(MonoObject, vtable)\nDECL_OFFSET(MonoObject, synchronisation)\n\nDECL_OFFSET(MonoClass, interface_bitmap)\nDECL_OFFSET(MonoClass, _byval_arg)\nDECL_OFFSET(MonoClass, cast_class)\nDECL_OFFSET(MonoClass, element_class)\nDECL_OFFSET(MonoClass, idepth)\nDECL_OFFSET(MonoClass, instance_size)\nDECL_OFFSET(MonoClass, interface_id)\nDECL_OFFSET(MonoClass, max_interface_id)\nDECL_OFFSET(MonoClass, parent)\nDECL_OFFSET(MonoClass, rank)\nDECL_OFFSET(MonoClass, sizes)\nDECL_OFFSET(MonoClass, supertypes)\nDECL_OFFSET(MonoClass, class_kind)\n\nDECL_OFFSET(MonoVTable, klass)\nDECL_OFFSET(MonoVTable, max_interface_id)\nDECL_OFFSET(MonoVTable, interface_bitmap)\nDECL_OFFSET(MonoVTable, vtable)\nDECL_OFFSET(MonoVTable, rank)\nDECL_OFFSET(MonoVTable, initialized)\nDECL_OFFSET(MonoVTable, flags)\nDECL_OFFSET(MonoVTable, type)\nDECL_OFFSET(MonoVTable, runtime_generic_context)\n\nDECL_OFFSET(MonoDomain, stack_overflow_ex)\n\nDECL_OFFSET(MonoDelegate, target)\nDECL_OFFSET(MonoDelegate, method_ptr)\nDECL_OFFSET(MonoDelegate, invoke_impl)\nDECL_OFFSET(MonoDelegate, method)\nDECL_OFFSET(MonoDelegate, method_code)\nDECL_OFFSET(MonoDelegate, method_is_virtual)\nDECL_OFFSET(MonoDelegate, extra_arg)\n\nDECL_OFFSET(MonoInternalThread, tid)\nDECL_OFFSET(MonoInternalThread, small_id)\nDECL_OFFSET(MonoInternalThread, static_data)\nDECL_OFFSET(MonoInternalThread, last)\n\nDECL_OFFSET(MonoMulticastDelegate, delegates)\n\nDECL_OFFSET(MonoTransparentProxy, rp)\nDECL_OFFSET(MonoTransparentProxy, remote_class)\nDECL_OFFSET(MonoTransparentProxy, custom_type_info)\n\nDECL_OFFSET(MonoRealProxy, target_domain_id)\nDECL_OFFSET(MonoRealProxy, context)\nDECL_OFFSET(MonoRealProxy, unwrapped_server)\n\nDECL_OFFSET(MonoRemoteClass, proxy_class)\n\nDECL_OFFSET(MonoArray, vector)\nDECL_OFFSET(MonoArray, max_length)\nDECL_OFFSET(MonoArray, bounds)\n\nDECL_OFFSET(MonoArrayBounds, lower_bound)\nDECL_OFFSET(MonoArrayBounds, length)\n\nDECL_OFFSET(MonoSafeHandle, handle)\n\nDECL_OFFSET(MonoHandleRef, handle)\n\nDECL_OFFSET(MonoComInteropProxy, com_object)\n\nDECL_OFFSET(MonoString, length)\nDECL_OFFSET(MonoString, chars)\n\nDECL_OFFSET(MonoException, message)\n\nDECL_OFFSET(MonoTypedRef, type)\nDECL_OFFSET(MonoTypedRef, klass)\nDECL_OFFSET(MonoTypedRef, value)\n\n//Internal structs\nDECL_OFFSET(MonoThreadsSync, status)\nDECL_OFFSET(MonoThreadsSync, nest)\n\nDECL_OFFSET(MonoProfilerCallContext, method)\nDECL_OFFSET(MonoProfilerCallContext, return_value)\nDECL_OFFSET(MonoProfilerCallContext, args)\n\n#ifdef HAVE_SGEN_GC\nDECL_OFFSET(SgenClientThreadInfo, in_critical_region)\nDECL_OFFSET(SgenThreadInfo, tlab_next)\nDECL_OFFSET(SgenThreadInfo, tlab_temp_end)\n#endif\n\n#endif //DISABLE METADATA OFFSETS\n\n// Offsets for structures defined in mini/\n#ifndef DISABLE_JIT_OFFSETS\nDECL_SIZE(MonoMethodRuntimeGenericContext)\nDECL_SIZE(MonoLMF)\nDECL_SIZE(MonoTypedRef)\nDECL_SIZE(CallContext)\nDECL_SIZE(MonoContext)\n\nDECL_OFFSET(MonoLMF, previous_lmf)\n\nDECL_OFFSET(MonoMethodRuntimeGenericContext, class_vtable)\n\nDECL_OFFSET(MonoJitTlsData, lmf)\nDECL_OFFSET(MonoJitTlsData, class_cast_from)\nDECL_OFFSET(MonoJitTlsData, class_cast_to)\n\nDECL_OFFSET(MonoGSharedVtMethodRuntimeInfo, locals_size)\nDECL_OFFSET(MonoGSharedVtMethodRuntimeInfo, entries) //XXX more to fix here\n\nDECL_OFFSET(MonoContinuation, stack_used_size)\nDECL_OFFSET(MonoContinuation, saved_stack)\nDECL_OFFSET(MonoContinuation, return_sp)\nDECL_OFFSET(MonoContinuation, lmf)\nDECL_OFFSET(MonoContinuation, return_ip)\n\nDECL_OFFSET(MonoDelegateTrampInfo, method)\nDECL_OFFSET(MonoDelegateTrampInfo, invoke_impl)\nDECL_OFFSET(MonoDelegateTrampInfo, method_ptr)\n\n// Architecture-specific offsets\n// -----------------------------\n\n#if defined(TARGET_WASM)\nDECL_OFFSET(MonoContext, wasm_ip)\nDECL_OFFSET(MonoContext, wasm_bp)\nDECL_OFFSET(MonoContext, wasm_sp)\nDECL_OFFSET(MonoContext, llvm_exc_reg)\n\nDECL_OFFSET(MonoLMF, lmf_addr)\n\n#elif defined(TARGET_X86)\nDECL_OFFSET(MonoContext, eax)\nDECL_OFFSET(MonoContext, ebx)\nDECL_OFFSET(MonoContext, ecx)\nDECL_OFFSET(MonoContext, edx)\nDECL_OFFSET(MonoContext, edi)\nDECL_OFFSET(MonoContext, esi)\nDECL_OFFSET(MonoContext, esp)\nDECL_OFFSET(MonoContext, ebp)\nDECL_OFFSET(MonoContext, eip)\n\nDECL_OFFSET(MonoLMF, method)\nDECL_OFFSET(MonoLMF, lmf_addr)\nDECL_OFFSET(MonoLMF, esp)\nDECL_OFFSET(MonoLMF, ebx)\nDECL_OFFSET(MonoLMF, edi)\nDECL_OFFSET(MonoLMF, esi)\nDECL_OFFSET(MonoLMF, ebp)\nDECL_OFFSET(MonoLMF, eip)\n#elif defined(TARGET_AMD64)\nDECL_OFFSET(MonoContext, gregs)\nDECL_OFFSET(MonoContext, fregs)\n\nDECL_OFFSET(MonoLMF, rsp)\nDECL_OFFSET(MonoLMF, rbp)\n\nDECL_OFFSET(DynCallArgs, res)\n\nDECL_OFFSET(MonoLMFTramp, ctx)\nDECL_OFFSET(MonoLMFTramp, lmf_addr)\n#elif defined(TARGET_ARM)\nDECL_OFFSET(MonoLMF, sp)\nDECL_OFFSET(MonoLMF, fp)\nDECL_OFFSET(MonoLMF, ip)\nDECL_OFFSET(MonoLMF, iregs)\nDECL_OFFSET(MonoLMF, fregs)\nDECL_OFFSET(DynCallArgs, fpregs)\nDECL_OFFSET(DynCallArgs, has_fpregs)\nDECL_OFFSET(DynCallArgs, regs)\nDECL_OFFSET(DynCallArgs, n_stackargs)\nDECL_OFFSET(SeqPointInfo, ss_tramp_addr)\n#elif defined(TARGET_ARM64)\nDECL_OFFSET(MonoLMF, pc)\nDECL_OFFSET(MonoLMF, gregs)\nDECL_OFFSET(DynCallArgs, regs)\nDECL_OFFSET(DynCallArgs, fpregs)\nDECL_OFFSET(DynCallArgs, n_stackargs)\nDECL_OFFSET(DynCallArgs, n_fpargs)\nDECL_OFFSET(DynCallArgs, n_fpret)\n#endif\n\n// Shared architecture offfsets\n// ----------------------------\n\n#if defined(TARGET_ARM) || defined(TARGET_ARM64)\nDECL_OFFSET (MonoContext, pc)\nDECL_OFFSET (MonoContext, regs)\nDECL_OFFSET (MonoContext, fregs)\n\nDECL_OFFSET(MonoLMF, lmf_addr)\n\nDECL_OFFSET(DynCallArgs, res)\nDECL_OFFSET(DynCallArgs, res2)\n#endif\n\n#if defined(TARGET_ARM)\nDECL_OFFSET(MonoLMF, method)\nDECL_OFFSET(GSharedVtCallInfo, stack_usage)\nDECL_OFFSET(GSharedVtCallInfo, vret_arg_reg)\nDECL_OFFSET(GSharedVtCallInfo, ret_marshal)\nDECL_OFFSET(GSharedVtCallInfo, vret_slot)\nDECL_OFFSET(GSharedVtCallInfo, gsharedvt_in)\n\nDECL_OFFSET(SeqPointInfo, ss_trigger_page)\n#endif\n\n#if defined(TARGET_ARM64)\nDECL_OFFSET (MonoContext, has_fregs)\n\nDECL_OFFSET(GSharedVtCallInfo, stack_usage)\nDECL_OFFSET(GSharedVtCallInfo, gsharedvt_in)\nDECL_OFFSET(GSharedVtCallInfo, ret_marshal)\nDECL_OFFSET(GSharedVtCallInfo, vret_slot)\n#endif\n\n#if defined(TARGET_AMD64) || defined(TARGET_ARM64)\nDECL_OFFSET(SeqPointInfo, ss_tramp_addr)\n#endif\n\n#if defined(TARGET_AMD64) || defined(TARGET_ARM) || defined(TARGET_ARM64)\nDECL_OFFSET(SeqPointInfo, bp_addrs)\n\nDECL_OFFSET(CallContext, gregs)\nDECL_OFFSET(CallContext, fregs)\nDECL_OFFSET(CallContext, stack_size)\nDECL_OFFSET(CallContext, stack)\n#endif\n\n#if defined(TARGET_X86)\nDECL_OFFSET(GSharedVtCallInfo, stack_usage)\nDECL_OFFSET(GSharedVtCallInfo, vret_slot)\nDECL_OFFSET(GSharedVtCallInfo, vret_arg_slot)\nDECL_OFFSET(GSharedVtCallInfo, ret_marshal)\nDECL_OFFSET(GSharedVtCallInfo, gsharedvt_in)\n#endif\n\nDECL_OFFSET(MonoFtnDesc, arg)\nDECL_OFFSET(MonoFtnDesc, addr)\n\n#endif //DISABLE_JIT_OFFSETS\n\n#endif //USED_CROSS_COMPILER_OFFSETS\n\n#undef DECL_OFFSET\n#undef DECL_OFFSET2\n#undef DECL_ALIGN2\n#undef DECL_SIZE\n#undef DECL_SIZE2\n#undef USE_CROSS_COMPILE_OFFSETS\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/object.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_CLI_OBJECT_H_\n#define _MONO_CLI_OBJECT_H_\n\n#include <mono/utils/mono-forward.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/metadata/class.h>\n#include <mono/utils/mono-error.h>\n\nMONO_BEGIN_DECLS\n\ntypedef struct _MonoString MONO_RT_MANAGED_ATTR MonoString;\ntypedef struct _MonoArray MONO_RT_MANAGED_ATTR MonoArray;\ntypedef struct _MonoReflectionMethod MONO_RT_MANAGED_ATTR MonoReflectionMethod;\ntypedef struct _MonoReflectionModule MONO_RT_MANAGED_ATTR MonoReflectionModule;\ntypedef struct _MonoReflectionField MONO_RT_MANAGED_ATTR MonoReflectionField;\ntypedef struct _MonoReflectionProperty MONO_RT_MANAGED_ATTR MonoReflectionProperty;\ntypedef struct _MonoReflectionEvent MONO_RT_MANAGED_ATTR MonoReflectionEvent;\ntypedef struct _MonoReflectionType MONO_RT_MANAGED_ATTR MonoReflectionType;\ntypedef struct _MonoDelegate MONO_RT_MANAGED_ATTR MonoDelegate;\ntypedef struct _MonoThreadsSync MonoThreadsSync;\n#ifdef ENABLE_NETCORE\ntypedef struct _MonoInternalThread MONO_RT_MANAGED_ATTR MonoThread;\n#else\ntypedef struct _MonoThread MONO_RT_MANAGED_ATTR MonoThread;\n#endif\ntypedef struct _MonoDynamicAssembly MonoDynamicAssembly;\ntypedef struct _MonoDynamicImage MonoDynamicImage;\ntypedef struct _MonoReflectionMethodBody MONO_RT_MANAGED_ATTR MonoReflectionMethodBody;\ntypedef struct _MonoAppContext MONO_RT_MANAGED_ATTR MonoAppContext;\n\nstruct _MonoObject {\n\tMonoVTable *vtable;\n\tMonoThreadsSync *synchronisation;\n};\n\ntypedef MonoObject* (*MonoInvokeFunc)\t     (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);\ntypedef void*    (*MonoCompileFunc)\t     (MonoMethod *method);\ntypedef void\t    (*MonoMainThreadFunc)    (void* user_data);\n\n#define MONO_OBJECT_SETREF(obj,fieldname,value) do {\t\\\n\t\tmono_gc_wbarrier_set_field ((MonoObject*)(obj), &((obj)->fieldname), (MonoObject*)value);\t\\\n\t\t/*(obj)->fieldname = (value);*/\t\\\n\t} while (0)\n\n/* This should be used if 's' can reside on the heap */\n#define MONO_STRUCT_SETREF(s,field,value) do { \\\n        mono_gc_wbarrier_generic_store (&((s)->field), (MonoObject*)(value)); \\\n    } while (0)\n\n#define mono_array_addr(array,type,index) ((type*)mono_array_addr_with_size ((array), sizeof (type), (index)))\n#define mono_array_get(array,type,index) ( *(type*)mono_array_addr ((array), type, (index)) ) \n#define mono_array_set(array,type,index,value)\t\\\n\tdo {\t\\\n\t\ttype *__p = (type *) mono_array_addr ((array), type, (index));\t\\\n\t\t*__p = (value);\t\\\n\t} while (0)\n#define mono_array_setref(array,index,value)\t\\\n\tdo {\t\\\n\t\tvoid **__p = (void **) mono_array_addr ((array), void*, (index));\t\\\n\t\tmono_gc_wbarrier_set_arrayref ((array), __p, (MonoObject*)(value));\t\\\n\t\t/* *__p = (value);*/\t\\\n\t} while (0)\n#define mono_array_memcpy_refs(dest,destidx,src,srcidx,count)\t\\\n\tdo {\t\\\n\t\tvoid **__p = (void **) mono_array_addr ((dest), void*, (destidx));\t\\\n\t\tvoid **__s = mono_array_addr ((src), void*, (srcidx));\t\\\n\t\tmono_gc_wbarrier_arrayref_copy (__p, __s, (count));\t\\\n\t} while (0)\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_unichar2 *mono_string_chars  (MonoString *s);\nMONO_API MONO_RT_EXTERNAL_ONLY int            mono_string_length (MonoString *s);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_object_new\t\t    (MonoDomain *domain, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoObject *\nmono_object_new_specific    (MonoVTable *vtable);\n\n/* can be used for classes without finalizer in non-profiling mode */\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoObject *\nmono_object_new_fast\t    (MonoVTable *vtable);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoObject *\nmono_object_new_alloc_specific (MonoVTable *vtable);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoObject *\nmono_object_new_from_token  (MonoDomain *domain, MonoImage *image, uint32_t token);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray*\nmono_array_new\t\t    (MonoDomain *domain, MonoClass *eclass, uintptr_t n);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray*\nmono_array_new_full\t    (MonoDomain *domain, MonoClass *array_class,\n\t\t\t     uintptr_t *lengths, intptr_t *lower_bounds);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray *\nmono_array_new_specific\t    (MonoVTable *vtable, uintptr_t n);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray*\nmono_array_clone\t    (MonoArray *array);\n\nMONO_API MONO_RT_EXTERNAL_ONLY char*\nmono_array_addr_with_size   (MonoArray *array, int size, uintptr_t idx);\n\nMONO_API MONO_RT_EXTERNAL_ONLY uintptr_t\nmono_array_length           (MonoArray *array);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoString*\nmono_string_empty\t      (MonoDomain *domain);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_empty_wrapper   (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_new_utf16\t    (MonoDomain *domain, const mono_unichar2 *text, int32_t len);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_new_size\t    (MonoDomain *domain, int32_t len);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_ldstr\t\t    (MonoDomain *domain, MonoImage *image, uint32_t str_index);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoString*\nmono_string_is_interned\t    (MonoString *str);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_intern\t    (MonoString *str);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_new\t\t    (MonoDomain *domain, const char *text);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoString*\nmono_string_new_wrapper\t    (const char *text);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_new_len\t    (MonoDomain *domain, const char *text, unsigned int length);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString*\nmono_string_new_utf32\t    (MonoDomain *domain, const mono_unichar4 *text, int32_t len);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nchar *\nmono_string_to_utf8\t    (MonoString *string_obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY char *\nmono_string_to_utf8_checked (MonoString *string_obj, MonoError *error);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_unichar2 *\nmono_string_to_utf16\t    (MonoString *string_obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_unichar4 *\nmono_string_to_utf32\t    (MonoString *string_obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoString *\nmono_string_from_utf16\t    (/*const*/ mono_unichar2 *data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoString *\nmono_string_from_utf32\t    (/*const*/ mono_unichar4 *data);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_string_equal           (MonoString *s1, MonoString *s2);\n\nMONO_API MONO_RT_EXTERNAL_ONLY unsigned int\nmono_string_hash            (MonoString *s);\n\nMONO_API MONO_RT_EXTERNAL_ONLY int\nmono_object_hash            (MonoObject* obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoString *\nmono_object_to_string (MonoObject *obj, MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_value_box\t\t    (MonoDomain *domain, MonoClass *klass, void* val);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_value_copy             (void* dest, /*const*/ void* src, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_value_copy_array       (MonoArray *dest, int dest_idx, void* src, int count);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoVTable*\nmono_object_get_vtable      (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoDomain*\nmono_object_get_domain      (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass*\nmono_object_get_class       (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void*\nmono_object_unbox\t    (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_object_clone\t    (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_object_isinst\t    (MonoObject *obj, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_object_isinst_mbyref   (MonoObject *obj, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_monitor_try_enter       (MonoObject *obj, uint32_t ms);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_monitor_enter           (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_monitor_enter_v4        (MonoObject *obj, char *lock_taken);\n\nMONO_API MONO_RT_EXTERNAL_ONLY unsigned int\nmono_object_get_size         (MonoObject *o);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_monitor_exit            (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_raise_exception\t    (MonoException *ex);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_runtime_set_pending_exception (MonoException *exc, mono_bool overwrite);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_reraise_exception\t    (MonoException *ex);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_runtime_object_init    (MonoObject *this_obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_runtime_class_init\t    (MonoVTable *vtable);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoDomain*\nmono_vtable_domain          (MonoVTable *vtable);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoClass*\nmono_vtable_class           (MonoVTable *vtable);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod*\nmono_object_get_virtual_method (MonoObject *obj, MonoMethod *method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject*\nmono_runtime_invoke\t    (MonoMethod *method, void *obj, void **params,\n\t\t\t     MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod*\nmono_get_delegate_invoke    (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod*\nmono_get_delegate_begin_invoke (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoMethod*\nmono_get_delegate_end_invoke (MonoClass *klass);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject*\nmono_runtime_delegate_invoke (MonoObject *delegate, void **params,\n\t\t\t      MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject*\nmono_runtime_invoke_array   (MonoMethod *method, void *obj, MonoArray *params,\n\t\t\t     MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void*\nmono_method_get_unmanaged_thunk (MonoMethod *method);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoArray*\nmono_runtime_get_main_args  (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_runtime_exec_managed_code (MonoDomain *domain,\n\t\t\t\tMonoMainThreadFunc main_func,\n\t\t\t\tvoid* main_args);\n\nMONO_API MONO_RT_EXTERNAL_ONLY int\nmono_runtime_run_main\t    (MonoMethod *method, int argc, char* argv[], \n\t\t\t     MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY int\nmono_runtime_exec_main\t    (MonoMethod *method, MonoArray *args,\n\t\t\t     MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY int\nmono_runtime_set_main_args  (int argc, char* argv[]);\n\n/* The following functions won't be available with mono was configured with remoting disabled. */\n/*#ifndef DISABLE_REMOTING */\nMONO_API MONO_RT_EXTERNAL_ONLY void*\nmono_load_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, void **res);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_load_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_store_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, void* val);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_store_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoObject *arg);\n\n/* #endif */\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_unhandled_exception    (MonoObject *exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_print_unhandled_exception (MonoObject *exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid*\nmono_compile_method\t   (MonoMethod *method);\n\n/* accessors for fields and properties */\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_field_set_value (MonoObject *obj, MonoClassField *field, void *value);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_field_static_set_value (MonoVTable *vt, MonoClassField *field, void *value);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_field_get_value (MonoObject *obj, MonoClassField *field, void *value);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject *\nmono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc);\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject*\nmono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc);\n\n/* GC handles support\n *\n * A handle can be created to refer to a managed object and either prevent it\n * from being garbage collected or moved or to be able to know if it has been \n * collected or not (weak references).\n * mono_gchandle_new () is used to prevent an object from being garbage collected\n * until mono_gchandle_free() is called. Use a TRUE value for the pinned argument to\n * prevent the object from being moved (this should be avoided as much as possible \n * and this should be used only for shorts periods of time or performance will suffer).\n * To create a weakref use mono_gchandle_new_weakref (): track_resurrection should\n * usually be false (see the GC docs for more details).\n * mono_gchandle_get_target () can be used to get the object referenced by both kinds\n * of handle: for a weakref handle, if an object has been collected, it will return NULL.\n */\nMONO_API MONO_RT_EXTERNAL_ONLY uint32_t     mono_gchandle_new         (MonoObject *obj, mono_bool pinned);\nMONO_API MONO_RT_EXTERNAL_ONLY uint32_t     mono_gchandle_new_weakref (MonoObject *obj, mono_bool track_resurrection);\nMONO_API MONO_RT_EXTERNAL_ONLY MonoObject*  mono_gchandle_get_target  (uint32_t gchandle);\nMONO_API MONO_RT_EXTERNAL_ONLY void         mono_gchandle_free        (uint32_t gchandle);\n\n/* Reference queue support\n *\n * A reference queue is used to get notifications of when objects are collected.\n * Call mono_gc_reference_queue_new to create a new queue and pass the callback that\n * will be invoked when registered objects are collected.\n * Call mono_gc_reference_queue_add to register a pair of objects and data within a queue.\n * The callback will be triggered once an object is both unreachable and finalized.\n */\n\ntypedef void (*mono_reference_queue_callback) (void *user_data);\ntypedef struct _MonoReferenceQueue MonoReferenceQueue;\n\nMONO_API MONO_RT_EXTERNAL_ONLY MonoReferenceQueue* mono_gc_reference_queue_new (mono_reference_queue_callback callback);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_reference_queue_free (MonoReferenceQueue *queue);\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool mono_gc_reference_queue_add (MonoReferenceQueue *queue, MonoObject *obj, void *user_data);\n\n/* GC write barriers support */\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_set_field     (MonoObject *obj, void* field_ptr, MonoObject* value);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_set_arrayref  (MonoArray *arr, void* slot_ptr, MonoObject* value);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_arrayref_copy (void* dest_ptr, /*const*/ void* src_ptr, int count);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_generic_store (void* ptr, MonoObject* value);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_generic_store_atomic (void *ptr, MonoObject *value);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_generic_nostore (void* ptr);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_value_copy    (void* dest, /*const*/ void* src, int count, MonoClass *klass);\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_wbarrier_object_copy   (MonoObject* obj, MonoObject *src);\n\nMONO_END_DECLS\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/opcodes.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_OPCODES_H__\n#define __MONO_METADATA_OPCODES_H__\n\n/*\n * opcodes.h: CIL instruction information\n *\n * Author:\n *   Paolo Molaro (lupus@ximian.com)\n *\n * (C) 2002 Ximian, Inc.\n */\n\n#include <mono/utils/mono-publib.h>\n\nMONO_BEGIN_DECLS\n\n#define MONO_CUSTOM_PREFIX 0xf0\n\n#define OPDEF(a,b,c,d,e,f,g,h,i,j) \\\n\tMONO_ ## a,\n\ntypedef enum MonoOpcodeEnum {\n\tMonoOpcodeEnum_Invalid = -1,\n#include \"mono/cil/opcode.def\"\n\tMONO_CEE_LAST\n} MonoOpcodeEnum;\n\n#undef OPDEF\n\nenum {\n\tMONO_FLOW_NEXT,\n\tMONO_FLOW_BRANCH,\n\tMONO_FLOW_COND_BRANCH,\n\tMONO_FLOW_ERROR,\n\tMONO_FLOW_CALL,\n\tMONO_FLOW_RETURN,\n\tMONO_FLOW_META\n};\n\nenum {\n\tMonoInlineNone          = 0,\n\tMonoInlineType          = 1,\n\tMonoInlineField         = 2,\n\tMonoInlineMethod        = 3,\n\tMonoInlineTok           = 4,\n\tMonoInlineString        = 5,\n\tMonoInlineSig           = 6,\n\tMonoInlineVar           = 7,\n\tMonoShortInlineVar      = 8,\n\tMonoInlineBrTarget      = 9,\n\tMonoShortInlineBrTarget = 10,\n\tMonoInlineSwitch        = 11,\n\tMonoInlineR             = 12,\n\tMonoShortInlineR        = 13,\n\tMonoInlineI             = 14,\n\tMonoShortInlineI        = 15,\n\tMonoInlineI8            = 16,\n};\n\ntypedef struct {\n\tunsigned char argument;\n\tunsigned char flow_type;\n\tunsigned short opval;\n} MonoOpcode;\n\nMONO_API_DATA const MonoOpcode mono_opcodes [];\n\nMONO_API const char*\nmono_opcode_name (int opcode);\n\nMONO_API MonoOpcodeEnum\nmono_opcode_value (const mono_byte **ip, const mono_byte *end);\n\nMONO_END_DECLS\n\n#endif /* __MONO_METADATA_OPCODES_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/pal-ios.h",
    "content": ""
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/profiler-events.h",
    "content": "/*\n * Licensed to the .NET Foundation under one or more agreements.\n * The .NET Foundation licenses this file to you under the MIT license.\n * See the LICENSE file in the project root for more information.\n */\n\n/*\n * To #include this file, #define the following macros first:\n *\n * MONO_PROFILER_EVENT_0(name, type)\n * MONO_PROFILER_EVENT_1(name, type, arg1_type, arg1_name)\n * MONO_PROFILER_EVENT_2(name, type, arg1_type, arg1_name, arg2_type, arg2_name)\n * MONO_PROFILER_EVENT_3(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name)\n * MONO_PROFILER_EVENT_4(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name)\n * MONO_PROFILER_EVENT_5(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name, arg5_type, arg5_name)\n *\n * To add new callbacks to the API, simply add a line in this file and use\n * MONO_PROFILER_RAISE to raise the event wherever.\n *\n * If you need more arguments then the current macros provide, add another\n * macro and update all areas where the macros are used. Remember that this is\n * a public header and not all users will be defining the newly added macro. So\n * to prevent errors in existing code, you must add something like this at the\n * beginning of this file:\n *\n * #ifndef MONO_PROFILER_EVENT_6\n * #define MONO_PROFILER_EVENT_6(...) # Do nothing.\n * #endif\n */\n\n#ifndef MONO_PROFILER_EVENT_5\n#define MONO_PROFILER_EVENT_5(...)\n#endif\n\nMONO_PROFILER_EVENT_0(runtime_initialized, RuntimeInitialized)\nMONO_PROFILER_EVENT_0(runtime_shutdown_begin, RuntimeShutdownBegin)\nMONO_PROFILER_EVENT_0(runtime_shutdown_end, RuntimeShutdownEnd)\n\nMONO_PROFILER_EVENT_1(context_loaded, ContextLoaded, MonoAppContext *, context)\nMONO_PROFILER_EVENT_1(context_unloaded, ContextUnloaded, MonoAppContext *, context)\n\nMONO_PROFILER_EVENT_1(domain_loading, DomainLoading, MonoDomain *, domain)\nMONO_PROFILER_EVENT_1(domain_loaded, DomainLoaded, MonoDomain *, domain)\nMONO_PROFILER_EVENT_1(domain_unloading, DomainUnloading, MonoDomain *, domain)\nMONO_PROFILER_EVENT_1(domain_unloaded, DomainUnloaded, MonoDomain *, domain)\nMONO_PROFILER_EVENT_2(domain_name, DomainName, MonoDomain *, domain, const char *, name)\n\nMONO_PROFILER_EVENT_1(jit_begin, JitBegin, MonoMethod *, method)\nMONO_PROFILER_EVENT_1(jit_failed, JitFailed, MonoMethod *, method)\nMONO_PROFILER_EVENT_2(jit_done, JitDone, MonoMethod *, method, MonoJitInfo *, jinfo)\nMONO_PROFILER_EVENT_2(jit_chunk_created, JitChunkCreated, const mono_byte *, chunk, uintptr_t, size)\nMONO_PROFILER_EVENT_1(jit_chunk_destroyed, JitChunkDestroyed, const mono_byte *, chunk)\nMONO_PROFILER_EVENT_4(jit_code_buffer, JitCodeBuffer, const mono_byte *, buffer, uint64_t, size, MonoProfilerCodeBufferType, type, const void *, data)\n\nMONO_PROFILER_EVENT_1(class_loading, ClassLoading, MonoClass *, klass)\nMONO_PROFILER_EVENT_1(class_failed, ClassFailed, MonoClass *, klass)\nMONO_PROFILER_EVENT_1(class_loaded, ClassLoaded, MonoClass *, klass)\n\nMONO_PROFILER_EVENT_1(vtable_loading, VTableLoading, MonoVTable *, vtable)\nMONO_PROFILER_EVENT_1(vtable_failed, VTableFailed, MonoVTable *, vtable)\nMONO_PROFILER_EVENT_1(vtable_loaded, VTableLoaded, MonoVTable *, vtable)\n\nMONO_PROFILER_EVENT_1(image_loading, ModuleLoading, MonoImage *, image)\nMONO_PROFILER_EVENT_1(image_failed, ModuleFailed, MonoImage *, image)\nMONO_PROFILER_EVENT_1(image_loaded, ModuleLoaded, MonoImage *, image)\nMONO_PROFILER_EVENT_1(image_unloading, ModuleUnloading, MonoImage *, image)\nMONO_PROFILER_EVENT_1(image_unloaded, ModuleUnloaded, MonoImage *, image)\n\nMONO_PROFILER_EVENT_1(assembly_loading, AssemblyLoading, MonoAssembly *, assembly)\nMONO_PROFILER_EVENT_1(assembly_loaded, AssemblyLLoaded, MonoAssembly *, assembly)\nMONO_PROFILER_EVENT_1(assembly_unloading, AssemblyLUnloading, MonoAssembly *, assembly)\nMONO_PROFILER_EVENT_1(assembly_unloaded, AssemblyLUnloaded, MonoAssembly *, assembly)\n\nMONO_PROFILER_EVENT_2(method_enter, MethodEnter, MonoMethod *, method, MonoProfilerCallContext *, context)\nMONO_PROFILER_EVENT_2(method_leave, MethodLeave, MonoMethod *, method, MonoProfilerCallContext *, context)\nMONO_PROFILER_EVENT_2(method_tail_call, MethodTailCall, MonoMethod *, method, MonoMethod *, target)\nMONO_PROFILER_EVENT_2(method_exception_leave, MethodExceptionLeave, MonoMethod *, method, MonoObject *, exception)\nMONO_PROFILER_EVENT_1(method_free, MethodFree, MonoMethod *, method)\nMONO_PROFILER_EVENT_1(method_begin_invoke, MethodBeginInvoke, MonoMethod *, method)\nMONO_PROFILER_EVENT_1(method_end_invoke, MethodEndInvoke, MonoMethod *, method)\n\nMONO_PROFILER_EVENT_1(exception_throw, ExceptionThrow, MonoObject *, exception)\nMONO_PROFILER_EVENT_4(exception_clause, ExceptionClause, MonoMethod *, method, uint32_t, index, MonoExceptionEnum, type, MonoObject *, exception)\n\nMONO_PROFILER_EVENT_3(gc_event, GCEvent2, MonoProfilerGCEvent, event, uint32_t, generation, mono_bool, is_serial)\nMONO_PROFILER_EVENT_1(gc_allocation, GCAllocation, MonoObject *, object)\nMONO_PROFILER_EVENT_2(gc_moves, GCMoves, MonoObject *const *, objects, uint64_t, count)\nMONO_PROFILER_EVENT_1(gc_resize, GCResize, uintptr_t, size)\nMONO_PROFILER_EVENT_3(gc_handle_created, GCHandleCreated, uint32_t, handle, MonoGCHandleType, type, MonoObject *, object)\nMONO_PROFILER_EVENT_2(gc_handle_deleted, GCHandleDeleted, uint32_t, handle, MonoGCHandleType, type)\nMONO_PROFILER_EVENT_0(gc_finalizing, GCFinalizing)\nMONO_PROFILER_EVENT_0(gc_finalized, GCFinalized)\nMONO_PROFILER_EVENT_1(gc_finalizing_object, GCFinalizingObject, MonoObject *, object)\nMONO_PROFILER_EVENT_1(gc_finalized_object, GCFinalizedObject, MonoObject *, object)\nMONO_PROFILER_EVENT_5(gc_root_register, RootRegister, const mono_byte *, start, uintptr_t, size, MonoGCRootSource, source, const void *, key, const char *, name)\nMONO_PROFILER_EVENT_1(gc_root_unregister, RootUnregister, const mono_byte *, start)\nMONO_PROFILER_EVENT_3(gc_roots, GCRoots, uint64_t, count, const mono_byte *const *, addresses, MonoObject *const *, objects)\n\nMONO_PROFILER_EVENT_1(monitor_contention, MonitorContention, MonoObject *, object)\nMONO_PROFILER_EVENT_1(monitor_failed, MonitorFailed, MonoObject *, object)\nMONO_PROFILER_EVENT_1(monitor_acquired, MonitorAcquired, MonoObject *, object)\n\nMONO_PROFILER_EVENT_1(thread_started, ThreadStarted, uintptr_t, tid)\nMONO_PROFILER_EVENT_1(thread_stopping, ThreadStopping, uintptr_t, tid)\nMONO_PROFILER_EVENT_1(thread_stopped, ThreadStopped, uintptr_t, tid)\nMONO_PROFILER_EVENT_1(thread_exited, ThreadExited, uintptr_t, tid)\nMONO_PROFILER_EVENT_2(thread_name, ThreadName, uintptr_t, tid, const char *, name)\n\nMONO_PROFILER_EVENT_2(sample_hit, SampleHit, const mono_byte *, ip, const void *, context)\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/profiler-legacy.h",
    "content": "/*\n * Licensed to the .NET Foundation under one or more agreements.\n * The .NET Foundation licenses this file to you under the MIT license.\n * See the LICENSE file in the project root for more information.\n */\n\n#ifndef __MONO_PROFILER_LEGACY_H__\n#define __MONO_PROFILER_LEGACY_H__\n\n#include <mono/utils/mono-publib.h>\n#include <mono/utils/mono-forward.h>\n#include <mono/metadata/object-forward.h>\n#include <mono/metadata/profiler.h>\n\n/*\n * The following code is here to maintain compatibility with a few profiler API\n * functions used by Xamarin.{Android,iOS,Mac} so that they keep working\n * regardless of which system Mono version is used.\n *\n * TODO: Remove this some day if we're OK with breaking compatibility.\n */\n\ntypedef void *MonoLegacyProfiler;\n\ntypedef void (*MonoLegacyProfileFunc) (MonoLegacyProfiler *prof);\ntypedef void (*MonoLegacyProfileThreadFunc) (MonoLegacyProfiler *prof, uintptr_t tid);\ntypedef void (*MonoLegacyProfileGCFunc) (MonoLegacyProfiler *prof, MonoProfilerGCEvent event, int generation);\ntypedef void (*MonoLegacyProfileGCResizeFunc) (MonoLegacyProfiler *prof, int64_t new_size);\ntypedef void (*MonoLegacyProfileJitResult) (MonoLegacyProfiler *prof, MonoMethod *method, MonoJitInfo *jinfo, int result);\ntypedef void (*MonoLegacyProfileAllocFunc) (MonoLegacyProfiler *prof, MonoObject *obj, MonoClass *klass);\ntypedef void (*MonoLegacyProfileMethodFunc) (MonoLegacyProfiler *prof, MonoMethod *method);\ntypedef void (*MonoLegacyProfileExceptionFunc) (MonoLegacyProfiler *prof, MonoObject *object);\ntypedef void (*MonoLegacyProfileExceptionClauseFunc) (MonoLegacyProfiler *prof, MonoMethod *method, int clause_type, int clause_num);\n\nMONO_DEPRECATED void mono_profiler_install (MonoLegacyProfiler *prof, MonoLegacyProfileFunc callback);\nMONO_DEPRECATED void mono_profiler_install_thread (MonoLegacyProfileThreadFunc start, MonoLegacyProfileThreadFunc end);\nMONO_DEPRECATED void mono_profiler_install_gc (MonoLegacyProfileGCFunc callback, MonoLegacyProfileGCResizeFunc heap_resize_callback);\nMONO_DEPRECATED void mono_profiler_install_jit_end (MonoLegacyProfileJitResult end);\nMONO_DEPRECATED void mono_profiler_set_events (int flags);\nMONO_DEPRECATED void mono_profiler_install_allocation (MonoLegacyProfileAllocFunc callback);\nMONO_DEPRECATED void mono_profiler_install_enter_leave (MonoLegacyProfileMethodFunc enter, MonoLegacyProfileMethodFunc fleave);\nMONO_DEPRECATED void mono_profiler_install_exception (MonoLegacyProfileExceptionFunc throw_callback, MonoLegacyProfileMethodFunc exc_method_leave, MonoLegacyProfileExceptionClauseFunc clause_callback);\n\n#endif // __MONO_PROFILER_LEGACY_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/profiler-private.h",
    "content": "/*\n * Licensed to the .NET Foundation under one or more agreements.\n * The .NET Foundation licenses this file to you under the MIT license.\n * See the LICENSE file in the project root for more information.\n */\n\n#ifndef __MONO_PROFILER_PRIVATE_H__\n#define __MONO_PROFILER_PRIVATE_H__\n\n#include <mono/metadata/class-internals.h>\n#include <mono/metadata/profiler.h>\n#include <mono/utils/mono-context.h>\n#include <mono/utils/mono-os-mutex.h>\n#include <mono/utils/mono-os-semaphore.h>\n#include <mono/metadata/icalls.h>\n\nstruct _MonoProfilerDesc {\n\tMonoProfilerHandle next;\n\tMonoProfiler *prof;\n\tvolatile gpointer cleanup_callback;\n\tvolatile gpointer coverage_filter;\n\tvolatile gpointer call_instrumentation_filter;\n\n#define _MONO_PROFILER_EVENT(name) \\\n\tvolatile gpointer name ## _cb;\n#define MONO_PROFILER_EVENT_0(name, type) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_1(name, type, arg1_type, arg1_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_2(name, type, arg1_type, arg1_name, arg2_type, arg2_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_3(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_4(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_5(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name, arg5_type, arg5_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#include <mono/metadata/profiler-events.h>\n#undef MONO_PROFILER_EVENT_0\n#undef MONO_PROFILER_EVENT_1\n#undef MONO_PROFILER_EVENT_2\n#undef MONO_PROFILER_EVENT_3\n#undef MONO_PROFILER_EVENT_4\n#undef MONO_PROFILER_EVENT_5\n#undef _MONO_PROFILER_EVENT\n};\n\ntypedef struct {\n\tgboolean startup_done;\n\n\tMonoProfilerHandle profilers;\n\n\tgboolean code_coverage;\n\tmono_mutex_t coverage_mutex;\n\tGHashTable *coverage_hash;\n\n\tMonoProfilerHandle sampling_owner;\n\tMonoSemType sampling_semaphore;\n\tMonoProfilerSampleMode sample_mode;\n\tguint32 sample_freq;\n\n\tgboolean allocations;\n\n\tgboolean clauses;\n\n\tgboolean call_contexts;\n\tvoid (*context_enable) (void);\n\tgpointer (*context_get_this) (MonoProfilerCallContext *);\n\tgpointer (*context_get_argument) (MonoProfilerCallContext *, guint32);\n\tgpointer (*context_get_local) (MonoProfilerCallContext *, guint32);\n\tgpointer (*context_get_result) (MonoProfilerCallContext *);\n\tvoid (*context_free_buffer) (gpointer);\n\n#define _MONO_PROFILER_EVENT(name) \\\n\tvolatile gint32 name ## _count;\n#define MONO_PROFILER_EVENT_0(name, type) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_1(name, type, arg1_type, arg1_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_2(name, type, arg1_type, arg1_name, arg2_type, arg2_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_3(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_4(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#define MONO_PROFILER_EVENT_5(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name, arg5_type, arg5_name) \\\n\t_MONO_PROFILER_EVENT(name)\n#include <mono/metadata/profiler-events.h>\n#undef MONO_PROFILER_EVENT_0\n#undef MONO_PROFILER_EVENT_1\n#undef MONO_PROFILER_EVENT_2\n#undef MONO_PROFILER_EVENT_3\n#undef MONO_PROFILER_EVENT_4\n#undef MONO_PROFILER_EVENT_5\n#undef _MONO_PROFILER_EVENT\n} MonoProfilerState;\n\nextern MonoProfilerState mono_profiler_state;\n\ntypedef struct {\n\tguchar *cil_code;\n\tguint32 count;\n} MonoProfilerCoverageInfoEntry;\n\ntypedef struct {\n\tguint32 entries;\n\tMonoProfilerCoverageInfoEntry data [MONO_ZERO_LEN_ARRAY];\n} MonoProfilerCoverageInfo;\n\nvoid mono_profiler_started (void);\nvoid mono_profiler_cleanup (void);\n\nstatic inline gboolean\nmono_profiler_installed (void)\n{\n\treturn !!mono_profiler_state.profilers;\n}\n\ngboolean mono_profiler_coverage_instrumentation_enabled (MonoMethod *method);\nMonoProfilerCoverageInfo *mono_profiler_coverage_alloc (MonoMethod *method, guint32 entries);\n\nstruct _MonoProfilerCallContext {\n\t/*\n\t * Must be the first field (the JIT relies on it). Only filled out if this\n\t * is a JIT frame; otherwise, zeroed.\n\t */\n\tMonoContext context;\n\t/*\n\t * A non-NULL MonoInterpFrameHandle if this is an interpreter frame.\n\t */\n\tgpointer interp_frame;\n\tMonoMethod *method;\n\t/*\n\t * Points to the return value for an epilogue context. For a prologue, this\n\t * is set to NULL.\n\t */\n\tgpointer return_value;\n\t/*\n\t * Points to an array of addresses of stack slots holding the arguments.\n\t */\n\tgpointer *args;\n};\n\nMonoProfilerCallInstrumentationFlags mono_profiler_get_call_instrumentation_flags (MonoMethod *method);\n\ngboolean mono_profiler_sampling_enabled (void);\nvoid mono_profiler_sampling_thread_post (void);\nvoid mono_profiler_sampling_thread_wait (void);\n\nstatic inline gboolean\nmono_profiler_allocations_enabled (void)\n{\n\treturn mono_profiler_state.allocations;\n}\n\nstatic inline gboolean\nmono_profiler_clauses_enabled (void)\n{\n\treturn mono_profiler_state.clauses;\n}\n\n#define _MONO_PROFILER_EVENT(name, ...) \\\n\tICALL_EXPORT void mono_profiler_raise_ ## name (__VA_ARGS__);\n#define MONO_PROFILER_EVENT_0(name, type) \\\n\t_MONO_PROFILER_EVENT(name, void)\n#define MONO_PROFILER_EVENT_1(name, type, arg1_type, arg1_name) \\\n\t_MONO_PROFILER_EVENT(name, arg1_type arg1_name)\n#define MONO_PROFILER_EVENT_2(name, type, arg1_type, arg1_name, arg2_type, arg2_name) \\\n\t_MONO_PROFILER_EVENT(name, arg1_type arg1_name, arg2_type arg2_name)\n#define MONO_PROFILER_EVENT_3(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name) \\\n\t_MONO_PROFILER_EVENT(name, arg1_type arg1_name, arg2_type arg2_name, arg3_type arg3_name)\n#define MONO_PROFILER_EVENT_4(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name) \\\n\t_MONO_PROFILER_EVENT(name, arg1_type arg1_name, arg2_type arg2_name, arg3_type arg3_name, arg4_type arg4_name)\n#define MONO_PROFILER_EVENT_5(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name, arg5_type, arg5_name) \\\n\t_MONO_PROFILER_EVENT(name, arg1_type arg1_name, arg2_type arg2_name, arg3_type arg3_name, arg4_type arg4_name, arg5_type arg5_name)\n#include <mono/metadata/profiler-events.h>\n#undef MONO_PROFILER_EVENT_0\n#undef MONO_PROFILER_EVENT_1\n#undef MONO_PROFILER_EVENT_2\n#undef MONO_PROFILER_EVENT_3\n#undef MONO_PROFILER_EVENT_4\n#undef MONO_PROFILER_EVENT_5\n#undef _MONO_PROFILER_EVENT\n\n/* These are the macros the rest of the runtime should use. */\n\n#define MONO_PROFILER_ENABLED(name) \\\n\tG_UNLIKELY (mono_profiler_state.name ## _count)\n\n#define MONO_PROFILER_RAISE(name, args) \\\n\tdo { \\\n\t\tif (MONO_PROFILER_ENABLED (name)) \\\n\t\t\tmono_profiler_raise_ ## name args; \\\n\t} while (0)\n\n#endif // __MONO_PROFILER_PRIVATE_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/profiler.h",
    "content": "/*\n * Licensed to the .NET Foundation under one or more agreements.\n * The .NET Foundation licenses this file to you under the MIT license.\n * See the LICENSE file in the project root for more information.\n */\n\n#ifndef __MONO_PROFILER_H__\n#define __MONO_PROFILER_H__\n\n#include <mono/metadata/appdomain.h>\n#include <mono/metadata/mono-gc.h>\n#include <mono/metadata/object.h>\n\nMONO_BEGIN_DECLS\n\n/**\n * This value will be incremented whenever breaking changes to the profiler API\n * are made. This macro is intended for use in profiler modules that wish to\n * support older versions of the profiler API.\n *\n * Version 2:\n * - Major overhaul of the profiler API.\n * Version 3:\n * - Added mono_profiler_enable_clauses (). This must now be called to enable\n *   raising exception_clause events.\n * - The exception argument to exception_clause events can now be NULL for\n *   finally clauses invoked in the non-exceptional case.\n * - The type argument to exception_clause events will now correctly indicate\n *   that the catch portion of the clause is being executed in the case of\n *   try-filter-catch clauses.\n * - Removed the iomap_report event.\n * - Removed the old gc_event event and renamed gc_event2 to gc_event.\n */\n#define MONO_PROFILER_API_VERSION 3\n\ntypedef struct _MonoProfiler MonoProfiler;\ntypedef struct _MonoProfilerDesc *MonoProfilerHandle;\n\ntypedef void (*MonoProfilerCleanupCallback) (MonoProfiler *prof);\n\nMONO_API void mono_profiler_load (const char *desc);\nMONO_API MonoProfilerHandle mono_profiler_create (MonoProfiler *prof);\nMONO_API void mono_profiler_set_cleanup_callback (MonoProfilerHandle handle, MonoProfilerCleanupCallback cb);\n\ntypedef struct {\n\tMonoMethod *method;\n\tuint32_t il_offset;\n\tuint32_t counter;\n\tconst char *file_name;\n\tuint32_t line;\n\tuint32_t column;\n} MonoProfilerCoverageData;\n\ntypedef mono_bool (*MonoProfilerCoverageFilterCallback) (MonoProfiler *prof, MonoMethod *method);\ntypedef void (*MonoProfilerCoverageCallback) (MonoProfiler *prof, const MonoProfilerCoverageData *data);\n\nMONO_API mono_bool mono_profiler_enable_coverage (void);\nMONO_API void mono_profiler_set_coverage_filter_callback (MonoProfilerHandle handle, MonoProfilerCoverageFilterCallback cb);\nMONO_API mono_bool mono_profiler_get_coverage_data (MonoProfilerHandle handle, MonoMethod *method, MonoProfilerCoverageCallback cb);\n\ntypedef enum {\n\t/**\n\t * Do not perform sampling. Will make the sampling thread sleep until the\n\t * sampling mode is changed to one of the below modes.\n\t */\n\tMONO_PROFILER_SAMPLE_MODE_NONE = 0,\n\t/**\n\t * Try to base sampling frequency on process activity. Falls back to\n\t * MONO_PROFILER_SAMPLE_MODE_REAL if such a clock is not available.\n\t */\n\tMONO_PROFILER_SAMPLE_MODE_PROCESS = 1,\n\t/**\n\t * Base sampling frequency on wall clock time. Uses a monotonic clock when\n\t * available (all major platforms).\n\t */\n\tMONO_PROFILER_SAMPLE_MODE_REAL = 2,\n} MonoProfilerSampleMode;\n\nMONO_API mono_bool mono_profiler_enable_sampling (MonoProfilerHandle handle);\nMONO_API mono_bool mono_profiler_set_sample_mode (MonoProfilerHandle handle, MonoProfilerSampleMode mode, uint32_t freq);\nMONO_API mono_bool mono_profiler_get_sample_mode (MonoProfilerHandle handle, MonoProfilerSampleMode *mode, uint32_t *freq);\n\nMONO_API mono_bool mono_profiler_enable_allocations (void);\nMONO_API mono_bool mono_profiler_enable_clauses (void);\n\ntypedef struct _MonoProfilerCallContext MonoProfilerCallContext;\n\ntypedef enum {\n\t/**\n\t * Do not instrument calls.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_NONE = 0,\n\t/**\n\t * Instrument method entries.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_ENTER = 1 << 1,\n\t/**\n\t * Also capture a call context for method entries.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_ENTER_CONTEXT = 1 << 2,\n\t/**\n\t * Instrument method exits.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_LEAVE = 1 << 3,\n\t/**\n\t * Also capture a call context for method exits.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_LEAVE_CONTEXT = 1 << 4,\n\t/**\n\t * Instrument method exits as a result of a tail call.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_TAIL_CALL = 1 << 5,\n\t/**\n\t * Instrument exceptional method exits.\n\t */\n\tMONO_PROFILER_CALL_INSTRUMENTATION_EXCEPTION_LEAVE = 1 << 6,\n} MonoProfilerCallInstrumentationFlags;\n\ntypedef MonoProfilerCallInstrumentationFlags (*MonoProfilerCallInstrumentationFilterCallback) (MonoProfiler *prof, MonoMethod *method);\n\nMONO_API void mono_profiler_set_call_instrumentation_filter_callback (MonoProfilerHandle handle, MonoProfilerCallInstrumentationFilterCallback cb);\nMONO_API mono_bool mono_profiler_enable_call_context_introspection (void);\nMONO_API void *mono_profiler_call_context_get_this (MonoProfilerCallContext *context);\nMONO_API void *mono_profiler_call_context_get_argument (MonoProfilerCallContext *context, uint32_t position);\nMONO_API void *mono_profiler_call_context_get_local (MonoProfilerCallContext *context, uint32_t position);\nMONO_API void *mono_profiler_call_context_get_result (MonoProfilerCallContext *context);\nMONO_API void mono_profiler_call_context_free_buffer (void *buffer);\n\ntypedef enum {\n\t/**\n\t * The \\c data parameter is a \\c MonoMethod pointer.\n\t */\n\tMONO_PROFILER_CODE_BUFFER_METHOD = 0,\n\t/**\n\t * \\deprecated No longer used.\n\t */\n\tMONO_PROFILER_CODE_BUFFER_METHOD_TRAMPOLINE = 1,\n\t/**\n\t * The \\c data parameter is a \\c MonoMethod pointer.\n\t */\n\tMONO_PROFILER_CODE_BUFFER_UNBOX_TRAMPOLINE = 2,\n\tMONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE = 3,\n\tMONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE = 4,\n\t/**\n\t * The \\c data parameter is a C string.\n\t */\n\tMONO_PROFILER_CODE_BUFFER_SPECIFIC_TRAMPOLINE = 5,\n\tMONO_PROFILER_CODE_BUFFER_HELPER = 6,\n\t/**\n\t * \\deprecated No longer used.\n\t */\n\tMONO_PROFILER_CODE_BUFFER_MONITOR = 7,\n\tMONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE = 8,\n\tMONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING = 9,\n} MonoProfilerCodeBufferType;\n\ntypedef enum {\n\tMONO_GC_EVENT_PRE_STOP_WORLD = 6,\n\t/**\n\t * When this event arrives, the GC and suspend locks are acquired.\n\t */\n\tMONO_GC_EVENT_PRE_STOP_WORLD_LOCKED = 10,\n\tMONO_GC_EVENT_POST_STOP_WORLD = 7,\n\tMONO_GC_EVENT_START = 0,\n\tMONO_GC_EVENT_END = 5,\n\tMONO_GC_EVENT_PRE_START_WORLD = 8,\n\t/**\n\t * When this event arrives, the GC and suspend locks are released.\n\t */\n\tMONO_GC_EVENT_POST_START_WORLD_UNLOCKED = 11,\n\tMONO_GC_EVENT_POST_START_WORLD = 9,\n} MonoProfilerGCEvent;\n\n/*\n * The macros below will generate the majority of the callback API. Refer to\n * mono/metadata/profiler-events.h for a list of callbacks. They are expanded\n * like so:\n *\n * typedef void (*MonoProfilerRuntimeInitializedCallback (MonoProfiler *prof);\n * MONO_API void mono_profiler_set_runtime_initialized_callback (MonoProfiler *prof, MonoProfilerRuntimeInitializedCallback cb);\n *\n * typedef void (*MonoProfilerRuntimeShutdownCallback (MonoProfiler *prof);\n * MONO_API void mono_profiler_set_runtime_shutdown_callback (MonoProfiler *prof, MonoProfilerRuntimeShutdownCallback cb);\n *\n * typedef void (*MonoProfilerContextLoadedCallback (MonoProfiler *prof);\n * MONO_API void mono_profiler_set_context_loaded_callback (MonoProfiler *prof, MonoProfilerContextLoadedCallback cb);\n *\n * typedef void (*MonoProfilerContextUnloadedCallback (MonoProfiler *prof);\n * MONO_API void mono_profiler_set_context_unloaded_callback (MonoProfiler *prof, MonoProfilerContextUnloadedCallback cb);\n *\n * Etc.\n *\n * To remove a callback, pass NULL instead of a valid function pointer.\n * Callbacks can be changed at any point, but note that doing so is inherently\n * racy with respect to threads that aren't suspended, i.e. you may still see a\n * call from another thread right after you change a callback.\n *\n * These functions are async safe.\n */\n\n#define _MONO_PROFILER_EVENT(type, ...) \\\n\ttypedef void (*MonoProfiler ## type ## Callback) (__VA_ARGS__);\n#define MONO_PROFILER_EVENT_0(name, type) \\\n\t\t_MONO_PROFILER_EVENT(type, MonoProfiler *prof)\n#define MONO_PROFILER_EVENT_1(name, type, arg1_type, arg1_name) \\\n\t\t_MONO_PROFILER_EVENT(type, MonoProfiler *prof, arg1_type arg1_name)\n#define MONO_PROFILER_EVENT_2(name, type, arg1_type, arg1_name, arg2_type, arg2_name) \\\n\t\t_MONO_PROFILER_EVENT(type, MonoProfiler *prof, arg1_type arg1_name, arg2_type arg2_name)\n#define MONO_PROFILER_EVENT_3(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name) \\\n\t\t_MONO_PROFILER_EVENT(type, MonoProfiler *prof, arg1_type arg1_name, arg2_type arg2_name, arg3_type arg3_name)\n#define MONO_PROFILER_EVENT_4(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name) \\\n\t\t_MONO_PROFILER_EVENT(type, MonoProfiler *prof, arg1_type arg1_name, arg2_type arg2_name, arg3_type arg3_name, arg4_type arg4_name)\n#define MONO_PROFILER_EVENT_5(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name, arg5_type, arg5_name) \\\n\t\t_MONO_PROFILER_EVENT(type, MonoProfiler *prof, arg1_type arg1_name, arg2_type arg2_name, arg3_type arg3_name, arg4_type arg4_name, arg5_type arg5_name)\n#include <mono/metadata/profiler-events.h>\n#undef MONO_PROFILER_EVENT_0\n#undef MONO_PROFILER_EVENT_1\n#undef MONO_PROFILER_EVENT_2\n#undef MONO_PROFILER_EVENT_3\n#undef MONO_PROFILER_EVENT_4\n#undef MONO_PROFILER_EVENT_5\n#undef _MONO_PROFILER_EVENT\n\n#define _MONO_PROFILER_EVENT(name, type) \\\n\tMONO_API void mono_profiler_set_ ## name ## _callback (MonoProfilerHandle handle, MonoProfiler ## type ## Callback cb);\n#define MONO_PROFILER_EVENT_0(name, type) \\\n\t_MONO_PROFILER_EVENT(name, type)\n#define MONO_PROFILER_EVENT_1(name, type, arg1_type, arg1_name) \\\n\t_MONO_PROFILER_EVENT(name, type)\n#define MONO_PROFILER_EVENT_2(name, type, arg1_type, arg1_name, arg2_type, arg2_name) \\\n\t_MONO_PROFILER_EVENT(name, type)\n#define MONO_PROFILER_EVENT_3(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name) \\\n\t_MONO_PROFILER_EVENT(name, type)\n#define MONO_PROFILER_EVENT_4(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name) \\\n\t_MONO_PROFILER_EVENT(name, type)\n#define MONO_PROFILER_EVENT_5(name, type, arg1_type, arg1_name, arg2_type, arg2_name, arg3_type, arg3_name, arg4_type, arg4_name, arg5_type, arg5_name) \\\n\t_MONO_PROFILER_EVENT(name, type)\n#include <mono/metadata/profiler-events.h>\n#undef MONO_PROFILER_EVENT_0\n#undef MONO_PROFILER_EVENT_1\n#undef MONO_PROFILER_EVENT_2\n#undef MONO_PROFILER_EVENT_3\n#undef MONO_PROFILER_EVENT_4\n#undef MONO_PROFILER_EVENT_5\n#undef _MONO_PROFILER_EVENT\n\nMONO_END_DECLS\n\n#endif // __MONO_PROFILER_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/property-bag.h",
    "content": "/**\n * \\file\n * Linearizable property bag.\n *\n * Authors:\n *   Rodrigo Kumpera (kumpera@gmail.com)\n *\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_PROPERTY_BAG_H__\n#define __MONO_METADATA_PROPERTY_BAG_H__\n\n#include <mono/utils/mono-compiler.h>\n\ntypedef struct _MonoPropertyBagItem MonoPropertyBagItem;\n\nstruct _MonoPropertyBagItem {\n\tMonoPropertyBagItem *next;\n\tint tag;\n};\n\ntypedef struct {\n\tMonoPropertyBagItem *head;\n} MonoPropertyBag;\n\nvoid* mono_property_bag_get (MonoPropertyBag *bag, int tag);\nvoid* mono_property_bag_add (MonoPropertyBag *bag, void *value);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/rand.h",
    "content": "/**\n * \\file\n * System.Security.Cryptography.RNGCryptoServiceProvider support\n *\n * Author:\n *      Mark Crichton (crichton@gimp.org)\n *\tSebastien Pouliot (sebastien@ximian.com)\n *\n * (C) 2001 Ximian, Inc.\n * Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_METADATA_RAND_H_\n#define _MONO_METADATA_RAND_H_\n\n#include <glib.h>\n#include <mono/metadata/object.h>\n#include \"mono/utils/mono-compiler.h\"\n#include <mono/metadata/icalls.h>\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/reflection-cache.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_REFLECTION_CACHE_H__\n#define __MONO_METADATA_REFLECTION_CACHE_H__\n\n#include <glib.h>\n#include <mono/metadata/domain-internals.h>\n#include <mono/metadata/handle.h>\n#include <mono/metadata/mono-hash.h>\n#include <mono/metadata/mempool.h>\n#include <mono/utils/mono-error-internals.h>\n\n/*\n * We need to return always the same object for MethodInfo, FieldInfo etc..\n * but we need to consider the reflected type.\n * type uses a different hash, since it uses custom hash/equal functions.\n */\n\ntypedef struct {\n\tgpointer item;\n\tMonoClass *refclass;\n} ReflectedEntry;\n\ngboolean\nmono_reflected_equal (gconstpointer a, gconstpointer b);\n\nguint\nmono_reflected_hash (gconstpointer a);\n\nstatic inline ReflectedEntry*\nalloc_reflected_entry (MonoDomain *domain)\n{\n\tif (!mono_gc_is_moving ())\n\t\treturn g_new0 (ReflectedEntry, 1);\n\telse\n\t\treturn (ReflectedEntry *)mono_mempool_alloc (domain->mp, sizeof (ReflectedEntry));\n}\n\nstatic inline void\nfree_reflected_entry (ReflectedEntry *entry)\n{\n\tif (!mono_gc_is_moving ())\n\t\tg_free (entry);\n}\n\nstatic inline MonoObject*\ncache_object (MonoDomain *domain, MonoClass *klass, gpointer item, MonoObject* o)\n{\n\tMonoObject *obj;\n\tReflectedEntry pe;\n\tpe.item = item;\n\tpe.refclass = klass;\n\n\tmono_domain_lock (domain);\n\tif (!domain->refobject_hash)\n\t\tdomain->refobject_hash = mono_conc_g_hash_table_new_type (mono_reflected_hash, mono_reflected_equal, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, \"Domain Reflection Object Table\");\n\n\tobj = (MonoObject*) mono_conc_g_hash_table_lookup (domain->refobject_hash, &pe);\n\tif (obj == NULL) {\n\t\tReflectedEntry *e = alloc_reflected_entry (domain);\n\t\te->item = item;\n\t\te->refclass = klass;\n\t\tmono_conc_g_hash_table_insert (domain->refobject_hash, e, o);\n\t\tobj = o;\n\t}\n\tmono_domain_unlock (domain);\n\treturn obj;\n}\n\n\nstatic inline MonoObjectHandle\ncache_object_handle (MonoDomain *domain, MonoClass *klass, gpointer item, MonoObjectHandle o)\n{\n\tReflectedEntry pe;\n\tpe.item = item;\n\tpe.refclass = klass;\n\n\tmono_domain_lock (domain);\n\tif (!domain->refobject_hash)\n\t\tdomain->refobject_hash = mono_conc_g_hash_table_new_type (mono_reflected_hash, mono_reflected_equal, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, \"Domain Reflection Object Table\");\n\n\tMonoObjectHandle obj = MONO_HANDLE_NEW (MonoObject, (MonoObject*)mono_conc_g_hash_table_lookup (domain->refobject_hash, &pe));\n\tif (MONO_HANDLE_IS_NULL (obj)) {\n\t\tReflectedEntry *e = alloc_reflected_entry (domain);\n\t\te->item = item;\n\t\te->refclass = klass;\n\t\tmono_conc_g_hash_table_insert (domain->refobject_hash, e, MONO_HANDLE_RAW (o));\n\t\tMONO_HANDLE_ASSIGN (obj, o);\n\t}\n\tmono_domain_unlock (domain);\n\treturn obj;\n}\n\n#define CACHE_OBJECT(t,p,o,k) ((t) (cache_object (domain, (k), (p), (o))))\n#define CACHE_OBJECT_HANDLE(t,p,o,k) (MONO_HANDLE_CAST (t, cache_object_handle (domain, (k), (p), (o))))\n\nstatic inline MonoObjectHandle\ncheck_object_handle (MonoDomain* domain, MonoClass *klass, gpointer item)\n{\n\tReflectedEntry e;\n\te.item = item;\n\te.refclass = klass;\n\tMonoConcGHashTable *hash = domain->refobject_hash;\n\tif (!hash)\n\t\treturn MONO_HANDLE_NEW (MonoObject, NULL);\n\n\treturn MONO_HANDLE_NEW (MonoObject, (MonoObject*)mono_conc_g_hash_table_lookup (hash, &e));\n}\n\n\ntypedef MonoObjectHandle (*ReflectionCacheConstructFunc_handle) (MonoDomain*, MonoClass*, gpointer, gpointer, MonoError *);\n\nstatic inline MonoObjectHandle\ncheck_or_construct_handle (MonoDomain *domain, MonoClass *klass, gpointer item, gpointer user_data, MonoError *error, ReflectionCacheConstructFunc_handle construct)\n{\n\terror_init (error);\n\tMonoObjectHandle obj = check_object_handle (domain, klass, item);\n\tif (!MONO_HANDLE_IS_NULL (obj))\n\t\treturn obj;\n\tMONO_HANDLE_ASSIGN (obj, construct (domain, klass, item, user_data, error));\n\treturn_val_if_nok (error, NULL_HANDLE);\n\tif (MONO_HANDLE_IS_NULL (obj))\n\t\treturn obj;\n\t/* note no caching if there was an error in construction */\n\treturn cache_object_handle (domain, klass, item, obj);\n}\n\n#define CHECK_OR_CONSTRUCT_HANDLE(t,p,k,construct,ud) \\\n\t(MONO_HANDLE_CAST (t, check_or_construct_handle ( \\\n\t\tdomain, (k), (p), (ud), error, (ReflectionCacheConstructFunc_handle) (construct))))\n\n#endif /*__MONO_METADATA_REFLECTION_CACHE_H__*/\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/reflection-internals.h",
    "content": "/**\n * \\file\n * Copyright 2014 Xamarin Inc\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_REFLECTION_INTERNALS_H__\n#define __MONO_METADATA_REFLECTION_INTERNALS_H__\n\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/reflection.h>\n#include <mono/metadata/class-internals.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/mono-error.h>\n\n/* Safely access System.Reflection.Assembly from native code */\nTYPED_HANDLE_DECL (MonoReflectionAssembly)\n\n/* Safely access System.Reflection.Emit.TypeBuilder from native code */\nTYPED_HANDLE_DECL (MonoReflectionTypeBuilder)\n\nMonoReflectionAssemblyHandle\nmono_domain_try_type_resolve_name (MonoDomain *domain, MonoAssembly *assembly, MonoStringHandle name, MonoError *error);\n\n#ifndef ENABLE_NETCORE\nMonoReflectionAssemblyHandle\nmono_domain_try_type_resolve_typebuilder (MonoDomain *domain, MonoReflectionTypeBuilderHandle typebuilder, MonoError *error);\n#endif\n\nMonoReflectionTypeBuilderHandle\nmono_class_get_ref_info (MonoClass *klass);\n\ngboolean\nmono_reflection_parse_type_checked (char *name, MonoTypeNameParse *info, MonoError *error);\n\ngboolean\nmono_reflection_is_usertype (MonoReflectionTypeHandle ref);\n\nMonoReflectionType*\nmono_reflection_type_resolve_user_types (MonoReflectionType *type, MonoError *error);\n\nMonoType *\nmono_reflection_type_handle_mono_type (MonoReflectionTypeHandle ref_type, MonoError *error);\n\nMonoType*\nmono_reflection_get_type_checked (MonoAssemblyLoadContext *alc, MonoImage *rootimage, MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase, gboolean search_mscorlib, gboolean *type_resolve, MonoError *error);\n\nMonoType*\nmono_reflection_type_from_name_checked (char *name, MonoAssemblyLoadContext *alc, MonoImage *image, MonoError *error);\n\nguint32\nmono_reflection_get_token_checked (MonoObjectHandle obj, MonoError *error);\n\nMonoObject*\nmono_custom_attrs_get_attr_checked (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass, MonoError *error);\n\nMonoCustomAttrInfo*\nmono_reflection_get_custom_attrs_info_checked (MonoObjectHandle obj, MonoError *error);\n\nMonoArrayHandle\nmono_reflection_get_custom_attrs_data_checked (MonoObjectHandle obj, MonoError *error);\n\nMonoArrayHandle\nmono_reflection_get_custom_attrs_by_type_handle (MonoObjectHandle obj, MonoClass *attr_klass, MonoError *error);\n\nMonoArrayHandle\nmono_reflection_get_custom_attrs_blob_checked (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *propValues, MonoArray *fields, MonoArray* fieldValues, MonoError *error);\n\nMonoCustomAttrInfo*\nmono_custom_attrs_from_index_checked    (MonoImage *image, uint32_t idx, gboolean ignore_missing, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_method_checked   (MonoMethod *method, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_class_checked   \t(MonoClass *klass, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_assembly_checked\t(MonoAssembly *assembly, gboolean ignore_missing, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_property_checked\t(MonoClass *klass, MonoProperty *property, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_event_checked\t(MonoClass *klass, MonoEvent *event, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_field_checked\t(MonoClass *klass, MonoClassField *field, MonoError *error);\nMonoCustomAttrInfo*\nmono_custom_attrs_from_param_checked\t(MonoMethod *method, uint32_t param, MonoError *error);\n\n\nchar*\nmono_identifier_unescape_type_name_chars (char* identifier);\n\nMonoImage *\nmono_find_dynamic_image_owner (void *ptr);\n\nMonoReflectionAssemblyHandle\nmono_assembly_get_object_handle (MonoDomain *domain, MonoAssembly *assembly, MonoError *error);\n\nMonoReflectionType*\nmono_type_get_object_checked (MonoDomain *domain, MonoType *type, MonoError *error);\n\nMonoReflectionTypeHandle\nmono_type_get_object_handle (MonoDomain *domain, MonoType *type, MonoError *error);\n\nMonoReflectionField*\nmono_field_get_object_checked (MonoDomain *domain, MonoClass *klass, MonoClassField *field, MonoError *error);\n\nMonoReflectionFieldHandle\nmono_field_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoClassField *field, MonoError *error);\n\nMonoReflectionMethod*\nmono_method_get_object_checked (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error);\n\nMonoReflectionMethodHandle\nmono_method_get_object_handle (MonoDomain *domain, MonoMethod *method, MonoClass *refclass, MonoError *error);\n\nMonoReflectionProperty*\nmono_property_get_object_checked (MonoDomain *domain, MonoClass *klass, MonoProperty *property, MonoError *error);\n\nMonoReflectionPropertyHandle\nmono_property_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoProperty *property, MonoError *error);\n\nMonoReflectionEventHandle\nmono_event_get_object_handle (MonoDomain *domain, MonoClass *klass, MonoEvent *event, MonoError *error);\n\nMonoReflectionModuleHandle\nmono_module_get_object_handle (MonoDomain *domain, MonoImage *image, MonoError *error);\n\nMonoReflectionModuleHandle\nmono_module_file_get_object_handle (MonoDomain *domain, MonoImage *image, int table_index, MonoError *error);\n\nMonoReflectionMethodBodyHandle\nmono_method_body_get_object_handle (MonoDomain *domain, MonoMethod *method, MonoError *error);\n\nMonoClass *\nmono_class_from_mono_type_handle (MonoReflectionTypeHandle h);\n\nMonoMethod*\nmono_runtime_get_caller_no_system_or_reflection (void);\n\nMonoAssembly*\nmono_runtime_get_caller_from_stack_mark (MonoStackCrawlMark *stack_mark);\n\nvoid\nmono_reflection_get_param_info_member_and_pos (MonoReflectionParameterHandle p, MonoObjectHandle member_impl, int *out_position);\n\n#endif /* __MONO_METADATA_REFLECTION_INTERNALS_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/reflection.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __METADATA_REFLECTION_H__\n#define __METADATA_REFLECTION_H__\n\n#include <mono/utils/mono-publib.h>\n#include <mono/metadata/object.h>\n\nMONO_BEGIN_DECLS\n\ntypedef struct MonoTypeNameParse MonoTypeNameParse;\n\ntypedef struct {\n\tMonoMethod *ctor;\n\tuint32_t     data_size;\n\tconst mono_byte* data;\n} MonoCustomAttrEntry;\n\ntypedef struct {\n\tint num_attrs;\n\tint cached;\n\tMonoImage *image;\n\tMonoCustomAttrEntry attrs [MONO_ZERO_LEN_ARRAY];\n} MonoCustomAttrInfo;\n\n#define MONO_SIZEOF_CUSTOM_ATTR_INFO (offsetof (MonoCustomAttrInfo, attrs))\n\n/* \n * Information which isn't in the MonoMethod structure is stored here for\n * dynamic methods.\n */\ntypedef struct {\n\tchar **param_names;\n\tMonoMarshalSpec **param_marshall;\n\tMonoCustomAttrInfo **param_cattr;\n\tuint8_t** param_defaults;\n\tuint32_t *param_default_types;\n\tchar *dllentry, *dll;\n} MonoReflectionMethodAux;\n\ntypedef enum {\n\tResolveTokenError_OutOfRange,\n\tResolveTokenError_BadTable,\n\tResolveTokenError_Other\n} MonoResolveTokenError;\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nint           mono_reflection_parse_type (char *name, MonoTypeNameParse *info);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoType*     mono_reflection_get_type   (MonoImage* image, MonoTypeNameParse *info, mono_bool ignorecase, mono_bool *type_resolve);\nMONO_API void          mono_reflection_free_type_info (MonoTypeNameParse *info);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoType*     mono_reflection_type_from_name (char *name, MonoImage *image);\nMONO_API MONO_RT_EXTERNAL_ONLY\nuint32_t      mono_reflection_get_token (MonoObject *obj);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionModule*   mono_module_get_object   (MonoDomain *domain, MonoImage *image);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionModule*   mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_index);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionType*     mono_type_get_object     (MonoDomain *domain, MonoType *type);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionMethod*   mono_method_get_object   (MonoDomain *domain, MonoMethod *method, MonoClass *refclass);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionField*    mono_field_get_object    (MonoDomain *domain, MonoClass *klass, MonoClassField *field);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionEvent*    mono_event_get_object    (MonoDomain *domain, MonoClass *klass, MonoEvent *event);\n/* note: this one is slightly different: we keep the whole array of params in the cache */\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray* mono_param_get_objects  (MonoDomain *domain, MonoMethod *method);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoReflectionMethodBody* mono_method_body_get_object (MonoDomain *domain, MonoMethod *method);\n\nMONO_API MonoObject *mono_get_dbnull_object (MonoDomain *domain);\n\nMONO_API MonoArray*  mono_reflection_get_custom_attrs_by_type (MonoObject *obj, MonoClass *attr_klass, MonoError *error);\nMONO_API MonoArray*  mono_reflection_get_custom_attrs (MonoObject *obj);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray*  mono_reflection_get_custom_attrs_data (MonoObject *obj);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray*  mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_reflection_get_custom_attrs_info (MonoObject *obj);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoArray*  mono_custom_attrs_construct (MonoCustomAttrInfo *cinfo);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_index    (MonoImage *image, uint32_t idx);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_method   (MonoMethod *method);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_class    (MonoClass *klass);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_assembly (MonoAssembly *assembly);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_property (MonoClass *klass, MonoProperty *property);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_event    (MonoClass *klass, MonoEvent *event);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_field    (MonoClass *klass, MonoClassField *field);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoCustomAttrInfo* mono_custom_attrs_from_param    (MonoMethod *method, uint32_t param);\nMONO_API mono_bool           mono_custom_attrs_has_attr      (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass);\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoObject*         mono_custom_attrs_get_attr      (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass);\nMONO_API void                mono_custom_attrs_free          (MonoCustomAttrInfo *ainfo);\n\n\n#define MONO_DECLSEC_ACTION_MIN\t\t0x1\n#define MONO_DECLSEC_ACTION_MAX\t\t0x12\n\nenum {\n\tMONO_DECLSEC_FLAG_REQUEST \t\t\t= 0x00000001,\n\tMONO_DECLSEC_FLAG_DEMAND\t\t\t= 0x00000002,\n\tMONO_DECLSEC_FLAG_ASSERT\t\t\t= 0x00000004,\n\tMONO_DECLSEC_FLAG_DENY\t\t\t\t= 0x00000008,\n\tMONO_DECLSEC_FLAG_PERMITONLY\t\t\t= 0x00000010,\n\tMONO_DECLSEC_FLAG_LINKDEMAND\t\t\t= 0x00000020,\n\tMONO_DECLSEC_FLAG_INHERITANCEDEMAND\t\t= 0x00000040,\n\tMONO_DECLSEC_FLAG_REQUEST_MINIMUM\t\t= 0x00000080,\n\tMONO_DECLSEC_FLAG_REQUEST_OPTIONAL\t\t= 0x00000100,\n\tMONO_DECLSEC_FLAG_REQUEST_REFUSE\t\t= 0x00000200,\n\tMONO_DECLSEC_FLAG_PREJIT_GRANT\t\t\t= 0x00000400,\n\tMONO_DECLSEC_FLAG_PREJIT_DENY\t\t\t= 0x00000800,\n\tMONO_DECLSEC_FLAG_NONCAS_DEMAND\t\t\t= 0x00001000,\n\tMONO_DECLSEC_FLAG_NONCAS_LINKDEMAND\t\t= 0x00002000,\n\tMONO_DECLSEC_FLAG_NONCAS_INHERITANCEDEMAND\t= 0x00004000,\n\tMONO_DECLSEC_FLAG_LINKDEMAND_CHOICE\t\t= 0x00008000,\n\tMONO_DECLSEC_FLAG_INHERITANCEDEMAND_CHOICE\t= 0x00010000,\n\tMONO_DECLSEC_FLAG_DEMAND_CHOICE\t\t\t= 0x00020000\n};\n\nMONO_API uint32_t mono_declsec_flags_from_method (MonoMethod *method);\nMONO_API uint32_t mono_declsec_flags_from_class (MonoClass *klass);\nMONO_API uint32_t mono_declsec_flags_from_assembly (MonoAssembly *assembly);\n\n/* this structure MUST be kept in synch with RuntimeDeclSecurityEntry\n * located in /mcs/class/corlib/System.Security/SecurityFrame.cs */\ntypedef struct {\n\tchar *blob;\t\t\t\t/* pointer to metadata blob */\n\tuint32_t size;\t\t\t\t/* size of the metadata blob */\n\tuint32_t index;\n} MonoDeclSecurityEntry;\n\ntypedef struct {\n\tMonoDeclSecurityEntry demand;\n\tMonoDeclSecurityEntry noncasdemand;\n\tMonoDeclSecurityEntry demandchoice;\n} MonoDeclSecurityActions;\n\nMONO_API MonoBoolean mono_declsec_get_demands (MonoMethod *callee, MonoDeclSecurityActions* demands);\nMONO_API MonoBoolean mono_declsec_get_linkdemands (MonoMethod *callee, MonoDeclSecurityActions* klass, MonoDeclSecurityActions* cmethod);\nMONO_API MonoBoolean mono_declsec_get_inheritdemands_class (MonoClass *klass, MonoDeclSecurityActions* demands);\nMONO_API MonoBoolean mono_declsec_get_inheritdemands_method (MonoMethod *callee, MonoDeclSecurityActions* demands);\n\nMONO_API MonoBoolean mono_declsec_get_method_action (MonoMethod *method, uint32_t action, MonoDeclSecurityEntry *entry);\nMONO_API MonoBoolean mono_declsec_get_class_action (MonoClass *klass, uint32_t action, MonoDeclSecurityEntry *entry);\nMONO_API MonoBoolean mono_declsec_get_assembly_action (MonoAssembly *assembly, uint32_t action, MonoDeclSecurityEntry *entry);\n\nMONO_API MONO_RT_EXTERNAL_ONLY\nMonoType* mono_reflection_type_get_type (MonoReflectionType *reftype);\n\nMONO_API MonoAssembly* mono_reflection_assembly_get_assembly (MonoReflectionAssembly *refassembly);\n\nMONO_END_DECLS\n\n#endif /* __METADATA_REFLECTION_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/remoting.h",
    "content": "/**\n * \\file\n * Remoting support\n *\n * (C) 2014 Xamarin, Inc.  http://www.xamarin.com\n *\n */\n\n#ifndef __MONO_REMOTING_H__\n#define __MONO_REMOTING_H__\n\n#include \"config.h\"\n#include <mono/metadata/class.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/class-internals.h>\n\nvoid mono_remoting_init (void);\n\n#ifndef DISABLE_REMOTING\n\nMonoMethod *\nmono_marshal_get_remoting_invoke (MonoMethod *method, MonoError *error);\n\nMonoMethod *\nmono_marshal_get_xappdomain_invoke (MonoMethod *method, MonoError *error);\n\nMonoMethod *\nmono_marshal_get_remoting_invoke_for_target (MonoMethod *method, MonoRemotingTarget target_type, MonoError *error);\n\nMonoMethod *\nmono_marshal_get_remoting_invoke_with_check (MonoMethod *method, MonoError *error);\n\nMonoMethod *\nmono_marshal_get_stfld_wrapper (MonoType *type);\n\nMonoMethod *\nmono_marshal_get_ldfld_wrapper (MonoType *type);\n\nMonoMethod *\nmono_marshal_get_ldflda_wrapper (MonoType *type);\n\nMonoMethod *\nmono_marshal_get_proxy_cancast (MonoClass *klass);\n\n#endif\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/row-indexes.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_ROW_INDEXES_H__\n#define __MONO_METADATA_ROW_INDEXES_H__\n\n/*\n * The last entry in the enum is used to give the number\n * of columns in the row.\n */\n\nenum {\n\tMONO_ASSEMBLY_HASH_ALG,\n\tMONO_ASSEMBLY_MAJOR_VERSION,\n\tMONO_ASSEMBLY_MINOR_VERSION,\n\tMONO_ASSEMBLY_BUILD_NUMBER,\n\tMONO_ASSEMBLY_REV_NUMBER,\n\tMONO_ASSEMBLY_FLAGS,\n\tMONO_ASSEMBLY_PUBLIC_KEY,\n\tMONO_ASSEMBLY_NAME,\n\tMONO_ASSEMBLY_CULTURE,\n\tMONO_ASSEMBLY_SIZE\n};\n\nenum {\n\tMONO_ASSEMBLYOS_PLATFORM,\n\tMONO_ASSEMBLYOS_MAJOR_VERSION,\n\tMONO_ASSEMBLYOS_MINOR_VERSION,\n\tMONO_ASSEMBLYOS_SIZE\n};\n\nenum {\n\tMONO_ASSEMBLY_PROCESSOR,\n\tMONO_ASSEMBLY_PROCESSOR_SIZE\n};\n\nenum {\n\tMONO_ASSEMBLYREF_MAJOR_VERSION,\n\tMONO_ASSEMBLYREF_MINOR_VERSION,\n\tMONO_ASSEMBLYREF_BUILD_NUMBER,\n\tMONO_ASSEMBLYREF_REV_NUMBER,\n\tMONO_ASSEMBLYREF_FLAGS,\n\tMONO_ASSEMBLYREF_PUBLIC_KEY,\n\tMONO_ASSEMBLYREF_NAME,\n\tMONO_ASSEMBLYREF_CULTURE,\n\tMONO_ASSEMBLYREF_HASH_VALUE,\n\tMONO_ASSEMBLYREF_SIZE\n};\n\nenum {\n\tMONO_ASSEMBLYREFOS_PLATFORM,\n\tMONO_ASSEMBLYREFOS_MAJOR_VERSION,\n\tMONO_ASSEMBLYREFOS_MINOR_VERSION,\n\tMONO_ASSEMBLYREFOS_ASSEMBLYREF,\n\tMONO_ASSEMBLYREFOS_SIZE\n};\n\nenum {\n\tMONO_ASSEMBLYREFPROC_PROCESSOR,\n\tMONO_ASSEMBLYREFPROC_ASSEMBLYREF,\n\tMONO_ASSEMBLYREFPROC_SIZE\n};\n\nenum {\n\tMONO_CLASS_LAYOUT_PACKING_SIZE,\n\tMONO_CLASS_LAYOUT_CLASS_SIZE,\n\tMONO_CLASS_LAYOUT_PARENT,\n\tMONO_CLASS_LAYOUT_SIZE\n};\n\nenum {\n\tMONO_CONSTANT_TYPE,\n\tMONO_CONSTANT_PADDING,\n\tMONO_CONSTANT_PARENT,\n\tMONO_CONSTANT_VALUE,\n\tMONO_CONSTANT_SIZE\n};\n\nenum {\n\tMONO_CUSTOM_ATTR_PARENT,\n\tMONO_CUSTOM_ATTR_TYPE,\n\tMONO_CUSTOM_ATTR_VALUE,\n\tMONO_CUSTOM_ATTR_SIZE\n};\n\nenum {\n\tMONO_DECL_SECURITY_ACTION,\n\tMONO_DECL_SECURITY_PARENT,\n\tMONO_DECL_SECURITY_PERMISSIONSET,\n\tMONO_DECL_SECURITY_SIZE\n};\n\nenum {\n\tMONO_EVENT_MAP_PARENT,\n\tMONO_EVENT_MAP_EVENTLIST,\n\tMONO_EVENT_MAP_SIZE\n};\n\nenum {\n\tMONO_EVENT_FLAGS,\n\tMONO_EVENT_NAME,\n\tMONO_EVENT_TYPE,\n\tMONO_EVENT_SIZE\n};\n\nenum {\n\tMONO_EVENT_POINTER_EVENT,\n\tMONO_EVENT_POINTER_SIZE\n};\n\nenum {\n\tMONO_EXP_TYPE_FLAGS,\n\tMONO_EXP_TYPE_TYPEDEF,\n\tMONO_EXP_TYPE_NAME,\n\tMONO_EXP_TYPE_NAMESPACE,\n\tMONO_EXP_TYPE_IMPLEMENTATION,\n\tMONO_EXP_TYPE_SIZE\n};\n\nenum {\n\tMONO_FIELD_FLAGS,\n\tMONO_FIELD_NAME,\n\tMONO_FIELD_SIGNATURE,\n\tMONO_FIELD_SIZE\n};\n\nenum {\n\tMONO_FIELD_LAYOUT_OFFSET,\n\tMONO_FIELD_LAYOUT_FIELD,\n\tMONO_FIELD_LAYOUT_SIZE\n};\n\nenum {\n\tMONO_FIELD_MARSHAL_PARENT,\n\tMONO_FIELD_MARSHAL_NATIVE_TYPE,\n\tMONO_FIELD_MARSHAL_SIZE\n};\n\nenum {\n\tMONO_FIELD_POINTER_FIELD,\n\tMONO_FIELD_POINTER_SIZE\n};\n\nenum {\n\tMONO_FIELD_RVA_RVA,\n\tMONO_FIELD_RVA_FIELD,\n\tMONO_FIELD_RVA_SIZE\n};\n\nenum {\n\tMONO_FILE_FLAGS,\n\tMONO_FILE_NAME,\n\tMONO_FILE_HASH_VALUE,\n\tMONO_FILE_SIZE\n};\n\nenum {\n\tMONO_IMPLMAP_FLAGS,\n\tMONO_IMPLMAP_MEMBER,\n\tMONO_IMPLMAP_NAME,\n\tMONO_IMPLMAP_SCOPE,\n\tMONO_IMPLMAP_SIZE\n};\n\nenum {\n\tMONO_INTERFACEIMPL_CLASS,\n\tMONO_INTERFACEIMPL_INTERFACE,\n\tMONO_INTERFACEIMPL_SIZE\n};\n\nenum {\n\tMONO_MANIFEST_OFFSET,\n\tMONO_MANIFEST_FLAGS,\n\tMONO_MANIFEST_NAME,\n\tMONO_MANIFEST_IMPLEMENTATION,\n\tMONO_MANIFEST_SIZE\n};\n\nenum {\n\tMONO_MEMBERREF_CLASS,\n\tMONO_MEMBERREF_NAME,\n\tMONO_MEMBERREF_SIGNATURE,\n\tMONO_MEMBERREF_SIZE\n};\n\nenum {\n\tMONO_METHOD_RVA,\n\tMONO_METHOD_IMPLFLAGS,\n\tMONO_METHOD_FLAGS,\n\tMONO_METHOD_NAME,\n\tMONO_METHOD_SIGNATURE,\n\tMONO_METHOD_PARAMLIST,\n\tMONO_METHOD_SIZE\n};\n\nenum {\n\tMONO_METHODIMPL_CLASS,\n\tMONO_METHODIMPL_BODY,\n\tMONO_METHODIMPL_DECLARATION,\n\tMONO_METHODIMPL_SIZE\n};\n\nenum {\n\tMONO_METHOD_POINTER_METHOD,\n\tMONO_METHOD_POINTER_SIZE\n};\n\nenum {\n\tMONO_METHOD_SEMA_SEMANTICS,\n\tMONO_METHOD_SEMA_METHOD,\n\tMONO_METHOD_SEMA_ASSOCIATION,\n\tMONO_METHOD_SEMA_SIZE\n};\n\nenum {\n\tMONO_MODULE_GENERATION,\n\tMONO_MODULE_NAME,\n\tMONO_MODULE_MVID,\n\tMONO_MODULE_ENC,\n\tMONO_MODULE_ENCBASE,\n\tMONO_MODULE_SIZE\n};\n\nenum {\n\tMONO_MODULEREF_NAME,\n\tMONO_MODULEREF_SIZE\n};\n\nenum {\n\tMONO_NESTED_CLASS_NESTED,\n\tMONO_NESTED_CLASS_ENCLOSING,\n\tMONO_NESTED_CLASS_SIZE\n};\n\nenum {\n\tMONO_PARAM_FLAGS,\n\tMONO_PARAM_SEQUENCE,\n\tMONO_PARAM_NAME,\n\tMONO_PARAM_SIZE\n};\n\nenum {\n\tMONO_PARAM_POINTER_PARAM,\n\tMONO_PARAM_POINTER_SIZE\n};\n\nenum {\n\tMONO_PROPERTY_FLAGS,\n\tMONO_PROPERTY_NAME,\n\tMONO_PROPERTY_TYPE,\n\tMONO_PROPERTY_SIZE\n};\n\nenum {\n\tMONO_PROPERTY_POINTER_PROPERTY,\n\tMONO_PROPERTY_POINTER_SIZE\n};\n\nenum {\n\tMONO_PROPERTY_MAP_PARENT,\n\tMONO_PROPERTY_MAP_PROPERTY_LIST,\n\tMONO_PROPERTY_MAP_SIZE\n};\n\nenum {\n\tMONO_STAND_ALONE_SIGNATURE,\n\tMONO_STAND_ALONE_SIGNATURE_SIZE\n};\n\nenum {\n\tMONO_TYPEDEF_FLAGS,\n\tMONO_TYPEDEF_NAME,\n\tMONO_TYPEDEF_NAMESPACE,\n\tMONO_TYPEDEF_EXTENDS,\n\tMONO_TYPEDEF_FIELD_LIST,\n\tMONO_TYPEDEF_METHOD_LIST,\n\tMONO_TYPEDEF_SIZE\n};\n\nenum {\n\tMONO_TYPEREF_SCOPE,\n\tMONO_TYPEREF_NAME,\n\tMONO_TYPEREF_NAMESPACE,\n\tMONO_TYPEREF_SIZE\n};\n\nenum {\n\tMONO_TYPESPEC_SIGNATURE,\n\tMONO_TYPESPEC_SIZE\n};\n\nenum {\n\tMONO_GENERICPARAM_NUMBER,\n\tMONO_GENERICPARAM_FLAGS,\n\tMONO_GENERICPARAM_OWNER,\n\tMONO_GENERICPARAM_NAME,\n\t\n\tMONO_GENERICPARAM_SIZE\n};\n\nenum {\n\tMONO_METHODSPEC_METHOD,\n\tMONO_METHODSPEC_SIGNATURE,\n\tMONO_METHODSPEC_SIZE\n};\n\nenum {\n\tMONO_GENPARCONSTRAINT_GENERICPAR,\n\tMONO_GENPARCONSTRAINT_CONSTRAINT,\n\tMONO_GENPARCONSTRAINT_SIZE\n};\n\nenum {\n\tMONO_DOCUMENT_NAME,\n\tMONO_DOCUMENT_HASHALG,\n\tMONO_DOCUMENT_HASH,\n\tMONO_DOCUMENT_LANGUAGE,\n\tMONO_DOCUMENT_SIZE\n};\n\nenum {\n\tMONO_METHODBODY_DOCUMENT,\n\tMONO_METHODBODY_SEQ_POINTS,\n\tMONO_METHODBODY_SIZE\n};\n\nenum {\n\tMONO_LOCALSCOPE_METHOD,\n\tMONO_LOCALSCOPE_IMPORTSCOPE,\n\tMONO_LOCALSCOPE_VARIABLELIST,\n\tMONO_LOCALSCOPE_CONSTANTLIST,\n\tMONO_LOCALSCOPE_STARTOFFSET,\n\tMONO_LOCALSCOPE_LENGTH,\n\tMONO_LOCALSCOPE_SIZE\n};\n\nenum {\n\tMONO_LOCALVARIABLE_ATTRIBUTES,\n\tMONO_LOCALVARIABLE_INDEX,\n\tMONO_LOCALVARIABLE_NAME,\n\tMONO_LOCALVARIABLE_SIZE\n};\n\nenum {\n\tMONO_CUSTOMDEBUGINFORMATION_PARENT,\n\tMONO_CUSTOMDEBUGINFORMATION_KIND,\n\tMONO_CUSTOMDEBUGINFORMATION_VALUE,\n\tMONO_CUSTOMDEBUGINFORMATION_SIZE\n};\n\n/*\n * Coded Tokens\n * The _BITS entry is for the bits used in the token.\n * The _MASK entry is for mask the index out.\n */\n\nenum {\n\tMONO_TYPEDEFORREF_TYPEDEF,\n\tMONO_TYPEDEFORREF_TYPEREF,\n\tMONO_TYPEDEFORREF_TYPESPEC,\n\tMONO_TYPEDEFORREF_BITS = 2,\n\tMONO_TYPEDEFORREF_MASK = 3\n};\n\nenum {\n\tMONO_HASCONSTANT_FIEDDEF,\n\tMONO_HASCONSTANT_PARAM,\n\tMONO_HASCONSTANT_PROPERTY,\n\tMONO_HASCONSTANT_BITS = 2,\n\tMONO_HASCONSTANT_MASK = 3\n};\n\nenum {\n\tMONO_CUSTOM_ATTR_METHODDEF,\n\tMONO_CUSTOM_ATTR_FIELDDEF,\n\tMONO_CUSTOM_ATTR_TYPEREF,\n\tMONO_CUSTOM_ATTR_TYPEDEF,\n\tMONO_CUSTOM_ATTR_PARAMDEF,\n\tMONO_CUSTOM_ATTR_INTERFACE,\n\tMONO_CUSTOM_ATTR_MEMBERREF,\n\tMONO_CUSTOM_ATTR_MODULE,\n\tMONO_CUSTOM_ATTR_PERMISSION,\n\tMONO_CUSTOM_ATTR_PROPERTY,\n\tMONO_CUSTOM_ATTR_EVENT,\n\tMONO_CUSTOM_ATTR_SIGNATURE,\n\tMONO_CUSTOM_ATTR_MODULEREF,\n\tMONO_CUSTOM_ATTR_TYPESPEC,\n\tMONO_CUSTOM_ATTR_ASSEMBLY,\n\tMONO_CUSTOM_ATTR_ASSEMBLYREF,\n\tMONO_CUSTOM_ATTR_FILE,\n\tMONO_CUSTOM_ATTR_EXP_TYPE,\n\tMONO_CUSTOM_ATTR_MANIFEST,\n\tMONO_CUSTOM_ATTR_GENERICPAR,\n\tMONO_CUSTOM_ATTR_GENERICPARAMCONSTRAINT,\n\tMONO_CUSTOM_ATTR_BITS = 5,\n\tMONO_CUSTOM_ATTR_MASK = 0x1F\n};\n\nenum {\n\tMONO_HAS_FIELD_MARSHAL_FIELDSREF,\n\tMONO_HAS_FIELD_MARSHAL_PARAMDEF,\n\tMONO_HAS_FIELD_MARSHAL_BITS = 1,\n\tMONO_HAS_FIELD_MARSHAL_MASK = 1\n};\n\nenum {\n\tMONO_HAS_DECL_SECURITY_TYPEDEF,\n\tMONO_HAS_DECL_SECURITY_METHODDEF,\n\tMONO_HAS_DECL_SECURITY_ASSEMBLY,\n\tMONO_HAS_DECL_SECURITY_BITS = 2,\n\tMONO_HAS_DECL_SECURITY_MASK = 3\n};\n\nenum {\n\tMONO_MEMBERREF_PARENT_TYPEDEF, /* not used */\n\tMONO_MEMBERREF_PARENT_TYPEREF,\n\tMONO_MEMBERREF_PARENT_MODULEREF,\n\tMONO_MEMBERREF_PARENT_METHODDEF,\n\tMONO_MEMBERREF_PARENT_TYPESPEC,\n\tMONO_MEMBERREF_PARENT_BITS = 3,\n\tMONO_MEMBERREF_PARENT_MASK = 7\n};\n\nenum {\n\tMONO_HAS_SEMANTICS_EVENT,\n\tMONO_HAS_SEMANTICS_PROPERTY,\n\tMONO_HAS_SEMANTICS_BITS = 1,\n\tMONO_HAS_SEMANTICS_MASK = 1\n};\n\nenum {\n\tMONO_METHODDEFORREF_METHODDEF,\n\tMONO_METHODDEFORREF_METHODREF,\n\tMONO_METHODDEFORREF_BITS = 1,\n\tMONO_METHODDEFORREF_MASK = 1\n};\n\nenum {\n\tMONO_MEMBERFORWD_FIELDDEF,\n\tMONO_MEMBERFORWD_METHODDEF,\n\tMONO_MEMBERFORWD_BITS = 1,\n\tMONO_MEMBERFORWD_MASK = 1\n};\n\nenum {\n\tMONO_IMPLEMENTATION_FILE,\n\tMONO_IMPLEMENTATION_ASSEMBLYREF,\n\tMONO_IMPLEMENTATION_EXP_TYPE,\n\tMONO_IMPLEMENTATION_BITS = 2,\n\tMONO_IMPLEMENTATION_MASK = 3\n};\n\nenum {\n\tMONO_CUSTOM_ATTR_TYPE_TYPEREF, /* not used */\n\tMONO_CUSTOM_ATTR_TYPE_TYPEDEF, /* not used */\n\tMONO_CUSTOM_ATTR_TYPE_METHODDEF,\n\tMONO_CUSTOM_ATTR_TYPE_MEMBERREF,\n\tMONO_CUSTOM_ATTR_TYPE_STRING, /* not used */\n\tMONO_CUSTOM_ATTR_TYPE_BITS = 3,\n\tMONO_CUSTOM_ATTR_TYPE_MASK = 7\n};\n\nenum {\n\tMONO_RESOLUTION_SCOPE_MODULE,\n\tMONO_RESOLUTION_SCOPE_MODULEREF,\n\tMONO_RESOLUTION_SCOPE_ASSEMBLYREF,\n\tMONO_RESOLUTION_SCOPE_TYPEREF,\n\tMONO_RESOLUTION_SCOPE_BITS = 2,\n\tMONO_RESOLUTION_SCOPE_MASK = 3\n};\n\n/* Kept for compatibility since this is a public header file */\nenum {\n\tMONO_RESOLTION_SCOPE_MODULE,\n\tMONO_RESOLTION_SCOPE_MODULEREF,\n\tMONO_RESOLTION_SCOPE_ASSEMBLYREF,\n\tMONO_RESOLTION_SCOPE_TYPEREF,\n\tMONO_RESOLTION_SCOPE_BITS = 2,\n\tMONO_RESOLTION_SCOPE_MASK = 3\n};\n\nenum {\n\tMONO_TYPEORMETHOD_TYPE,\n\tMONO_TYPEORMETHOD_METHOD,\n\tMONO_TYPEORMETHOD_BITS = 1,\n\tMONO_TYPEORMETHOD_MASK = 1\n};\n\n#endif /* __MONO_METADATA_ROW_INDEXES_H__ */\n\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/runtime.h",
    "content": "/**\n * \\file\n * Runtime functions\n *\n * Author:\n *\tJonathan Pryor\n *\n * (C) 2010 Novell, Inc.\n */\n\n#ifndef _MONO_METADATA_RUNTIME_H_\n#define _MONO_METADATA_RUNTIME_H_\n\n#include <glib.h>\n#include <mono/metadata/metadata.h>\n#include <mono/utils/mono-publib.h>\n#include <mono/utils/mono-compiler.h>\n\ngboolean mono_runtime_try_shutdown (void);\n\nvoid mono_runtime_init_tls (void);\n\nMONO_PROFILER_API char* mono_runtime_get_aotid (void);\n\n#endif /* _MONO_METADATA_RUNTIME_H_ */\n\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/security-core-clr.h",
    "content": "/**\n * \\file\n * CoreCLR security\n *\n * Author:\n *\tMark Probst <mark.probst@gmail.com>\n *\n * (C) 2007, 2010 Novell, Inc\n */\n\n#ifndef _MONO_METADATA_SECURITY_CORE_CLR_H_\n#define _MONO_METADATA_SECURITY_CORE_CLR_H_\n\n#include <glib.h>\n#include <mono/metadata/reflection.h>\n#include <mono/utils/mono-compiler.h>\n\ntypedef enum {\n\t/* We compare these values as integers, so the order must not\n\t   be changed. */\n\tMONO_SECURITY_CORE_CLR_TRANSPARENT = 0,\n\tMONO_SECURITY_CORE_CLR_SAFE_CRITICAL,\n\tMONO_SECURITY_CORE_CLR_CRITICAL\n} MonoSecurityCoreCLRLevel;\n\ntypedef enum {\n\t//The following flags can be used in combination, and control specific behaviour of the CoreCLR securit system.\n\n\t//Default coreclr behaviour, as used in moonlight.\n\tMONO_SECURITY_CORE_CLR_OPTIONS_DEFAULT = 0,\n\n\t//Allow transparent code to execute methods and access fields that are not in platformcode,\n\t//even if those methods and fields are private or otherwise not visible to the calling code.\n\tMONO_SECURITY_CORE_CLR_OPTIONS_RELAX_REFLECTION = 1,\n\n\t//Allow delegates to be created that point at methods that are not in platformcode,\n\t//even if those methods and fields are private or otherwise not visible to the calling code.\n\tMONO_SECURITY_CORE_CLR_OPTIONS_RELAX_DELEGATE = 2\n} MonoSecurityCoreCLROptions;\n\nextern gboolean mono_security_core_clr_test;\n\nextern void mono_security_core_clr_check_inheritance (MonoClass *klass);\nextern void mono_security_core_clr_check_override (MonoClass *klass, MonoMethod *override, MonoMethod *base);\n\nextern gboolean\nmono_security_core_clr_ensure_reflection_access_field (MonoClassField *field, MonoError *error);\nextern gboolean\nmono_security_core_clr_ensure_reflection_access_method (MonoMethod *method, MonoError *error);\nextern gboolean mono_security_core_clr_ensure_delegate_creation (MonoMethod *method, MonoError *error);\nextern MonoException* mono_security_core_clr_ensure_dynamic_method_resolved_object (gpointer ref, MonoClass *handle_class);\n\nextern gboolean mono_security_core_clr_can_access_internals (MonoImage *accessing, MonoImage* accessed);\n\nextern MonoException* mono_security_core_clr_is_field_access_allowed (MonoMethod *caller, MonoClassField *field);\nextern MonoException* mono_security_core_clr_is_call_allowed (MonoMethod *caller, MonoMethod *callee);\n\nextern MonoSecurityCoreCLRLevel mono_security_core_clr_class_level (MonoClass *klass);\nextern MonoSecurityCoreCLRLevel mono_security_core_clr_field_level (MonoClassField *field, gboolean with_class_level);\nextern MonoSecurityCoreCLRLevel mono_security_core_clr_method_level (MonoMethod *method, gboolean with_class_level);\n\nextern gboolean mono_security_core_clr_is_platform_image (MonoImage *image);\nextern gboolean mono_security_core_clr_determine_platform_image (MonoImage *image);\n\nMONO_API gboolean mono_security_core_clr_require_elevated_permissions (void);\n\nMONO_API void mono_security_core_clr_set_options (MonoSecurityCoreCLROptions options);\nMONO_API MonoSecurityCoreCLROptions mono_security_core_clr_get_options (void);\n\n#endif\t/* _MONO_METADATA_SECURITY_CORE_CLR_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/security-manager.h",
    "content": "/**\n * \\file\n * Security Manager\n *\n * Author:\n *\tSebastien Pouliot  <sebastien@ximian.com>\n *\n * Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_METADATA_SECURITY_MANAGER_H_\n#define _MONO_METADATA_SECURITY_MANAGER_H_\n\n#include <string.h>\n\n#include \"object.h\"\n#include \"metadata-internals.h\"\n#include \"domain-internals.h\"\n#include \"tokentype.h\"\n#include \"threads.h\"\n#include \"marshal.h\"\n#include \"image.h\"\n#include \"reflection.h\"\n#include \"tabledefs.h\"\n#include <mono/metadata/icalls.h>\n\n/* Definitions */\n\n#define MONO_ECMA_KEY_LENGTH\t\t\t16\n#define MONO_PUBLIC_KEY_HEADER_LENGTH\t\t32\n#define MONO_MINIMUM_PUBLIC_KEY_LENGTH\t\t48\n#define MONO_DEFAULT_PUBLIC_KEY_LENGTH\t\t128\n\n#define MONO_PUBLIC_KEY_BIT_SIZE(x)\t\t((x - MONO_PUBLIC_KEY_HEADER_LENGTH) << 3)\n\nenum {\n\tMONO_METADATA_SECURITY_OK\t\t= 0x00,\n\tMONO_METADATA_INHERITANCEDEMAND_CLASS\t= 0x01,\n\tMONO_METADATA_INHERITANCEDEMAND_METHOD\t= 0x02\n};\n\ntypedef enum {\n\tMONO_SECURITY_MODE_NONE,\n\tMONO_SECURITY_MODE_CORE_CLR,\n} MonoSecurityMode;\n\n/* Structures */\n\ntypedef struct {\n\tMonoClass *securitymanager;\t\t/* System.Security.SecurityManager */\n} MonoSecurityManager;\n\ngboolean mono_is_ecma_key (const char *publickey, int size);\n\nMonoSecurityManager* mono_security_manager_get_methods (void);\n\n/* Security mode */\nvoid mono_security_set_mode (MonoSecurityMode mode);\nMonoSecurityMode mono_security_get_mode (void);\n\n/* internal calls */\nICALL_EXPORT\nMonoBoolean ves_icall_System_Security_SecurityManager_get_SecurityEnabled (void);\n\nICALL_EXPORT\nvoid ves_icall_System_Security_SecurityManager_set_SecurityEnabled (MonoBoolean value);\n\n#ifndef DISABLE_SECURITY\n#define mono_security_core_clr_enabled() (mono_security_get_mode () == MONO_SECURITY_MODE_CORE_CLR)\n#else\n#define mono_security_core_clr_enabled() (FALSE)\n#endif\n\n#endif /* _MONO_METADATA_SECURITY_MANAGER_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/security.h",
    "content": "/**\n * \\file\n * Security internal calls\n *\n * Author:\n *\tSebastien Pouliot  <sebastien@ximian.com>\n *\n * (C) 2004 Novell (http://www.novell.com)\n */\n\n\n#ifndef _MONO_METADATA_SECURITY_H_\n#define _MONO_METADATA_SECURITY_H_\n\n#include <glib.h>\n#include <mono/metadata/object.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/mono-error.h>\n#include <mono/utils/mono-publib.h>\n#include <mono/metadata/icalls.h>\n#include \"reflection-internals.h\"\n\n/* System.Security.Principal.WindowsIdentity */\ngpointer\nmono_security_principal_windows_identity_get_current_token (MonoError *error);\n\n#endif /* _MONO_METADATA_SECURITY_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/seq-points-data.h",
    "content": "/**\n * \\file\n * Copyright 2015 Xamarin Inc\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n \n#ifndef __MONO_SEQ_POINTS_DATA_H__\n#define __MONO_SEQ_POINTS_DATA_H__\n\n#include <glib.h>\n\n#define MONO_SEQ_POINT_FLAG_NONEMPTY_STACK 1\n#define MONO_SEQ_POINT_FLAG_EXIT_IL 2\n#define MONO_SEQ_POINT_FLAG_NESTED_CALL 4\n\n/* IL offsets used to mark the sequence points belonging to method entry/exit events */\n#define METHOD_ENTRY_IL_OFFSET -1\n#define METHOD_EXIT_IL_OFFSET 0xffffff\n\n#define SEQ_POINT_AOT_EXT \".msym\"\n\n/* Native offset used to mark seq points in dead code */\n#define SEQ_POINT_NATIVE_OFFSET_DEAD_CODE -1 \n\ntypedef struct {\n\tint il_offset, native_offset, flags;\n\t/* Offset of indexes of successor sequence points on the compressed buffer */\n\tint next_offset;\n\t/* Number of entries in next */\n\tint next_len;\n} SeqPoint;\n\ntypedef struct MonoSeqPointInfo {\n\tint dummy [1];\n} MonoSeqPointInfo;\n\ntypedef struct {\n\tSeqPoint seq_point;\n\tguint8* ptr;\n\tguint8* begin;\n\tguint8* end;\n\tgboolean has_debug_data;\n} SeqPointIterator;\n\nvoid\nmono_seq_point_info_free (gpointer info);\n\ngboolean\nmono_seq_point_iterator_next (SeqPointIterator* it);\n\nvoid\nmono_seq_point_iterator_init (SeqPointIterator* it, MonoSeqPointInfo* info);\n\nvoid\nmono_seq_point_init_next (MonoSeqPointInfo* info, SeqPoint sp, SeqPoint* next);\n\nint\nmono_seq_point_info_write (MonoSeqPointInfo* info, guint8* buffer);\n\nint\nmono_seq_point_info_read (MonoSeqPointInfo** info, guint8* buffer, gboolean copy);\n\nint\nmono_seq_point_info_get_write_size (MonoSeqPointInfo* info);\n\ngboolean\nmono_seq_point_info_add_seq_point (GByteArray* array, SeqPoint *sp, SeqPoint *last_seq_point, GSList *next, gboolean has_debug_data);\n\nMonoSeqPointInfo*\nmono_seq_point_info_new (int len, gboolean alloc_data, guint8 *data, gboolean has_debug_data, int *out_size);\n\ngboolean\nmono_seq_point_find_prev_by_native_offset (MonoSeqPointInfo* info, int native_offset, SeqPoint* seq_point);\n\ngboolean\nmono_seq_point_find_next_by_native_offset (MonoSeqPointInfo* info, int native_offset, SeqPoint* seq_point);\n\ngboolean\nmono_seq_point_find_by_il_offset (MonoSeqPointInfo* info, int il_offset, SeqPoint* seq_point);\n\n/*\n * SeqPointData struct and functions\n * This is used to store/load/use sequence point from a file\n */\n\ntypedef struct {\n\tguint32 method_token;\n\tguint32 method_index;\n\tMonoSeqPointInfo* seq_points;\n\tgboolean free_seq_points;\n} SeqPointDataEntry;\n\ntypedef struct {\n\tSeqPointDataEntry* entries;\n\tint entry_count;\n\tint entry_capacity;\n} SeqPointData;\n\nvoid\nmono_seq_point_data_init (SeqPointData *data, int entry_capacity);\n\nvoid\nmono_seq_point_data_free (SeqPointData *data);\n\ngboolean\nmono_seq_point_data_read (SeqPointData *data, char *path);\n\ngboolean\nmono_seq_point_data_write (SeqPointData *data, char *path);\n\nvoid\nmono_seq_point_data_add (SeqPointData *data, guint32 methodToken, guint32 methodIndex, MonoSeqPointInfo* info);\n\ngboolean\nmono_seq_point_data_get (SeqPointData *data, guint32 methodToken, guint32 methodIndex, MonoSeqPointInfo** info);\n\ngboolean\nmono_seq_point_data_get_il_offset (char *path, guint32 methodToken, guint32 methodIndex, guint32 native_offset, guint32 *il_offset);\n\n#endif /* __MONO_SEQ_POINTS_DATA_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-bridge-internals.h",
    "content": "/**\n * \\file\n * The cross-GC bridge.\n *\n * Copyright (C) 2015 Xamarin Inc\n *\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef __MONO_SGENBRIDGEINTERNAL_H__\n#define __MONO_SGENBRIDGEINTERNAL_H__\n\n#include \"config.h\"\n\n#ifdef HAVE_SGEN_GC\n\n#include \"mono/utils/mono-compiler.h\"\n\n#include \"mono/sgen/sgen-gc.h\"\n#include \"mono/metadata/sgen-bridge.h\"\n\nextern volatile gboolean mono_bridge_processing_in_progress;\nextern MonoGCBridgeCallbacks mono_bridge_callbacks;\n\ngboolean sgen_need_bridge_processing (void);\nvoid sgen_bridge_reset_data (void);\nvoid sgen_bridge_processing_stw_step (void);\nvoid sgen_bridge_processing_finish (int generation);\ngboolean sgen_is_bridge_object (GCObject *obj);\nMonoGCBridgeObjectKind sgen_bridge_class_kind (MonoClass *klass);\nvoid sgen_bridge_register_finalized_object (GCObject *object);\nvoid sgen_bridge_describe_pointer (GCObject *object);\n\ngboolean sgen_is_bridge_object (GCObject *obj);\nvoid sgen_mark_bridge_object (GCObject *obj);\n\ngboolean sgen_bridge_handle_gc_param (const char *opt);\ngboolean sgen_bridge_handle_gc_debug (const char *opt);\nvoid sgen_bridge_print_gc_debug_usage (void);\n\ntypedef struct {\n\tchar *dump_prefix;\n\tgboolean accounting;\n\tgboolean scc_precise_merge; // Used by Tarjan\n\t// Disables reporting SCCs with no bridge objects on tarjan. Used when comparing outputs\n\t// of two bridge processors, in order to keep consistency.\n\tgboolean disable_non_bridge_scc;\n} SgenBridgeProcessorConfig;\n\ntypedef struct {\n\tvoid (*reset_data) (void);\n\tvoid (*processing_stw_step) (void);\n\tvoid (*processing_build_callback_data) (int generation);\n\tvoid (*processing_after_callback) (int generation);\n\tMonoGCBridgeObjectKind (*class_kind) (MonoClass *klass);\n\tvoid (*register_finalized_object) (GCObject *object);\n\tvoid (*describe_pointer) (GCObject *object);\n\n\t/* Should be called once, immediately after init */\n\tvoid (*set_config) (const SgenBridgeProcessorConfig *);\n\n\t/*\n\t * These are set by processing_build_callback_data().\n\t */\n\tint num_sccs;\n\tMonoGCBridgeSCC **api_sccs;\n\n\tint num_xrefs;\n\tMonoGCBridgeXRef *api_xrefs;\n} SgenBridgeProcessor;\n\nvoid sgen_old_bridge_init (SgenBridgeProcessor *collector);\nvoid sgen_new_bridge_init (SgenBridgeProcessor *collector);\nvoid sgen_tarjan_bridge_init (SgenBridgeProcessor *collector);\nvoid sgen_set_bridge_implementation (const char *name);\nvoid sgen_bridge_set_dump_prefix (const char *prefix);\nvoid sgen_init_bridge (void);\n\n#endif\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-bridge.h",
    "content": "/**\n * \\file\n * Copyright 2011 Novell, Inc.\n * \n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n/*\n * The bridge is a mechanism for SGen to let clients override the death of some\n * unreachable objects.  We use it in monodroid to do garbage collection across\n * the Mono and Java heaps.\n *\n * The client (Monodroid) can designate some objects as \"bridged\", which means\n * that they participate in the bridge processing step once SGen considers them\n * unreachable, i.e., dead.  Bridged objects must be registered for\n * finalization.\n *\n * When SGen is done marking, it puts together a list of all dead bridged\n * objects.  This is passed to the bridge processor, which does an analysis to\n * simplify the graph: It replaces strongly-connected components with single\n * nodes, and may remove nodes corresponding to components which do not contain\n * bridged objects.\n *\n * The output of the SCC analysis is passed to the client's `cross_references()`\n * callback.  This consists of 2 arrays, an array of SCCs (MonoGCBridgeSCC),\n * and an array of \"xrefs\" (edges between SCCs, MonoGCBridgeXRef).  Edges are\n * encoded as pairs of \"API indices\", ie indexes in the SCC array.  The client\n * is expected to set the `is_alive` flag on those strongly connected components\n * that it wishes to be kept alive.\n *\n * In monodroid each bridged object has a corresponding Java mirror object.  In\n * the bridge callback it reifies the Mono object graph in the Java heap so that\n * the full, combined object graph is now instantiated on the Java side.  Then\n * it triggers a Java GC, waits for it to finish, and checks which of the Java\n * mirror objects are still alive.  For those it sets the `is_alive` flag and\n * returns from the callback.\n *\n * The SCC analysis is done while the world is stopped, but the callback is made\n * with the world running again.  Weak links to bridged objects and other\n * objects reachable from them are kept until the callback returns, at which\n * point all links to bridged objects that don't have `is_alive` set are nulled.\n * Note that weak links to non-bridged objects reachable from bridged objects\n * are not nulled.  This might be considered a bug.\n *\n * There are three different implementations of the bridge processor, each of\n * which implements 8 callbacks (see SgenBridgeProcessor).  The implementations\n * differ in the algorithm they use to compute the \"simplified\" SCC graph.\n */\n\n#ifndef _MONO_SGEN_BRIDGE_H_\n#define _MONO_SGEN_BRIDGE_H_\n\n#include <mono/utils/mono-publib.h>\n\nMONO_BEGIN_DECLS\n\nenum {\n\tSGEN_BRIDGE_VERSION = 5\n};\n\t\ntypedef enum {\n\t/* Instances of this class should be scanned when computing the transitive dependency among bridges. E.g. List<object>*/\n\tGC_BRIDGE_TRANSPARENT_CLASS,\n\t/* Instances of this class should not be scanned when computing the transitive dependency among bridges. E.g. String*/\n\tGC_BRIDGE_OPAQUE_CLASS,\n\t/* Instances of this class should be bridged and have their dependency computed. */\n\tGC_BRIDGE_TRANSPARENT_BRIDGE_CLASS,\n\t/* Instances of this class should be bridged but no dependencies should not be calculated. */\n\tGC_BRIDGE_OPAQUE_BRIDGE_CLASS,\n} MonoGCBridgeObjectKind;\n\ntypedef struct {\n\tmono_bool is_alive;\t/* to be set by the cross reference callback */\n\tint num_objs;\n\tMonoObject *objs [MONO_ZERO_LEN_ARRAY];\n} MonoGCBridgeSCC;\n\ntypedef struct {\n\tint src_scc_index;\n\tint dst_scc_index;\n} MonoGCBridgeXRef;\n\ntypedef struct {\n\tint bridge_version;\n\t/*\n\t * Tells the runtime which classes to even consider when looking for\n\t * bridged objects.  If subclasses are to be considered as well, the\n\t * subclass check must be done in the callback.\n\t */\n\tMonoGCBridgeObjectKind (*bridge_class_kind) (MonoClass *klass);\n\t/*\n\t * This is only called on objects for whose classes\n\t * `bridge_class_kind()` returned `XXX_BRIDGE_CLASS`.\n\t */\n\tmono_bool (*is_bridge_object) (MonoObject *object);\n\tvoid (*cross_references) (int num_sccs, MonoGCBridgeSCC **sccs, int num_xrefs, MonoGCBridgeXRef *xrefs);\n} MonoGCBridgeCallbacks;\n\n/*\n * Note: This may be called at any time, but cannot be called concurrently\n * with (during and on a separate thread from) sgen init. Callers are\n * responsible for enforcing this.\n */\nMONO_API void mono_gc_register_bridge_callbacks (MonoGCBridgeCallbacks *callbacks);\n\nMONO_API void mono_gc_wait_for_bridge_processing (void);\n\nMONO_END_DECLS\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-client-mono.h",
    "content": "/**\n * \\file\n * Mono's client definitions for SGen.\n *\n * Copyright (C) 2014 Xamarin Inc\n *\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifdef SGEN_DEFINE_OBJECT_VTABLE\n\n#include \"sgen/sgen-archdep.h\"\n#include \"utils/mono-threads.h\"\n#include \"utils/mono-mmap.h\"\n#include \"metadata/object-internals.h\"\n\ntypedef MonoObject GCObject;\ntypedef MonoVTable* GCVTable;\n\nstatic inline GCVTable\nSGEN_LOAD_VTABLE_UNCHECKED (GCObject *obj)\n{\n\treturn obj->vtable;\n}\n\nstatic inline SgenDescriptor\nsgen_vtable_get_descriptor (GCVTable vtable)\n{\n\treturn (SgenDescriptor)vtable->gc_descr;\n}\n\ntypedef struct _SgenClientThreadInfo SgenClientThreadInfo;\nstruct _SgenClientThreadInfo {\n\tMonoThreadInfo info;\n\n\t/*\n\t * `skip` is set to TRUE when STW fails to suspend a thread, most probably because\n\t * the underlying thread is dead.\n\t*/\n\tgboolean skip, suspend_done;\n\tvolatile int in_critical_region;\n\n#ifdef SGEN_POSIX_STW\n\t/* This is -1 until the first suspend. */\n\tint signal;\n\t/* FIXME: kill this, we only use signals on systems that have rt-posix, which doesn't have issues with duplicates. */\n\tunsigned int stop_count; /* to catch duplicate signals. */\n#endif\n\n\tgpointer runtime_data;\n\n\tvoid *stack_end;\n\tvoid *stack_start;\n\tvoid *stack_start_limit;\n\n\tMonoContext ctx;\t\t/* ditto */\n};\n\n#else\n\n#include \"metadata/profiler-private.h\"\n#include \"utils/dtrace.h\"\n#include \"utils/mono-counters.h\"\n#include \"utils/mono-logger-internals.h\"\n#include \"utils/mono-time.h\"\n#include \"utils/mono-os-semaphore.h\"\n#include \"metadata/sgen-bridge-internals.h\"\n\nextern void mono_sgen_register_moved_object (void *obj, void *destination);\nextern void mono_sgen_gc_event_moves (void);\nextern void mono_sgen_gc_event_resize (void);\n\nextern void mono_sgen_init_stw (void);\n\nenum {\n\tINTERNAL_MEM_EPHEMERON_LINK = INTERNAL_MEM_FIRST_CLIENT,\n\tINTERNAL_MEM_MOVED_OBJECT,\n\tINTERNAL_MEM_MAX\n};\n\nstatic inline mword\nsgen_mono_array_size (GCVTable vtable, MonoArray *array, mword *bounds_size, mword descr)\n{\n\tmword size, size_without_bounds;\n\tint element_size;\n\n\tif ((descr & DESC_TYPE_MASK) == DESC_TYPE_VECTOR)\n\t\telement_size = ((descr) >> VECTOR_ELSIZE_SHIFT) & MAX_ELEMENT_SIZE;\n\telse\n\t\telement_size = m_class_get_sizes (vtable->klass).element_size;\n\n\tsize_without_bounds = size = MONO_SIZEOF_MONO_ARRAY + (mword)element_size * mono_array_length_internal (array);\n\n\tif (G_UNLIKELY (array->bounds)) {\n\t\tsize += sizeof (mono_array_size_t) - 1;\n\t\tsize &= ~(sizeof (mono_array_size_t) - 1);\n\t\tsize += sizeof (MonoArrayBounds) * m_class_get_rank (vtable->klass);\n\t}\n\n\tif (bounds_size)\n\t\t*bounds_size = size - size_without_bounds;\n\treturn size;\n}\n\n#define SGEN_CLIENT_OBJECT_HEADER_SIZE\t\t(sizeof (GCObject))\n#define SGEN_CLIENT_MINIMUM_OBJECT_SIZE\t\tSGEN_CLIENT_OBJECT_HEADER_SIZE\n\nstatic mword /*__attribute__ ((__noinline__)) not sure if this hint is a good idea*/\nsgen_client_slow_object_get_size (GCVTable vtable, GCObject* o)\n{\n\tMonoClass *klass = ((MonoVTable*)vtable)->klass;\n\n\t/*\n\t * We depend on mono_string_length_fast and\n\t * mono_array_length_internal not using the object's vtable.\n\t */\n\tif (klass == mono_defaults.string_class) {\n\t\treturn MONO_SIZEOF_MONO_STRING + 2 * mono_string_length_fast ((MonoString*) o) + 2;\n\t} else if (m_class_get_rank (klass)) {\n\t\treturn sgen_mono_array_size (vtable, (MonoArray*)o, NULL, 0);\n\t} else {\n\t\t/* from a created object: the class must be inited already */\n\t\treturn m_class_get_instance_size (klass);\n\t}\n}\n\n/*\n * This function can be called on an object whose first word, the\n * vtable field, is not intact.  This is necessary for the parallel\n * collector.\n */\nstatic MONO_NEVER_INLINE mword\nsgen_client_par_object_get_size (GCVTable vtable, GCObject* o)\n{\n\tSgenDescriptor descr = sgen_vtable_get_descriptor (vtable);\n\tmword type = descr & DESC_TYPE_MASK;\n\n\tif (type == DESC_TYPE_RUN_LENGTH || type == DESC_TYPE_SMALL_PTRFREE) {\n\t\tmword size = descr & 0xfff8;\n\t\tSGEN_ASSERT (9, size >= sizeof (MonoObject), \"Run length object size to small\");\n\t\treturn size;\n\t} else if (descr == SGEN_DESC_STRING) {\n\t\treturn G_STRUCT_OFFSET (MonoString, chars) + 2 * mono_string_length_fast ((MonoString*) o) + 2;\n\t} else if (type == DESC_TYPE_VECTOR) {\n\t\treturn sgen_mono_array_size (vtable, (MonoArray*)o, NULL, descr);\n\t}\n\n\treturn sgen_client_slow_object_get_size (vtable, o);\n}\n\nstatic MONO_ALWAYS_INLINE size_t G_GNUC_UNUSED\nsgen_client_array_element_size (GCVTable gc_vtable)\n{\n\tMonoVTable *vt = (MonoVTable*)gc_vtable;\n\treturn mono_array_element_size (vt->klass);\n}\n\nstatic MONO_ALWAYS_INLINE G_GNUC_UNUSED char*\nsgen_client_array_data_start (GCObject *obj)\n{\n\treturn (char*)(obj) +  G_STRUCT_OFFSET (MonoArray, vector);\n}\n\nstatic MONO_ALWAYS_INLINE size_t G_GNUC_UNUSED\nsgen_client_array_length (GCObject *obj)\n{\n\treturn mono_array_length_internal ((MonoArray*)obj);\n}\n\nstatic MONO_ALWAYS_INLINE gboolean G_GNUC_UNUSED\nsgen_client_object_is_array_fill (GCObject *o)\n{\n\treturn ((MonoObject*)o)->synchronisation == GINT_TO_POINTER (-1);\n}\n\nstatic MONO_ALWAYS_INLINE void G_GNUC_UNUSED\nsgen_client_pre_copy_checks (char *destination, GCVTable gc_vtable, void *obj, mword objsize)\n{\n\tMonoVTable *vt = (MonoVTable*)gc_vtable;\n\tSGEN_ASSERT (9, m_class_is_inited (vt->klass), \"vtable %p for class %s:%s was not initialized\", vt, m_class_get_name_space (vt->klass), m_class_get_name (vt->klass));\n}\n\nstatic MONO_ALWAYS_INLINE void G_GNUC_UNUSED\nsgen_client_update_copied_object (char *destination, GCVTable gc_vtable, void *obj, mword objsize)\n{\n\tMonoVTable *vt = (MonoVTable*)gc_vtable;\n\tif (G_UNLIKELY (vt->rank && ((MonoArray*)obj)->bounds)) {\n\t\tMonoArray *array = (MonoArray*)destination;\n\t\tarray->bounds = (MonoArrayBounds*)((char*)destination + ((char*)((MonoArray*)obj)->bounds - (char*)obj));\n\t\tSGEN_LOG (9, \"Array instance %p: size: %lu, rank: %d, length: %lu\", array, (unsigned long)objsize, vt->rank, (unsigned long)mono_array_length_internal (array));\n\t}\n\n\tif (MONO_PROFILER_ENABLED (gc_moves))\n\t\tmono_sgen_register_moved_object (obj, destination);\n}\n\n#ifdef XDOMAIN_CHECKS_IN_WBARRIER\nextern gboolean sgen_mono_xdomain_checks;\n\n#define sgen_client_wbarrier_generic_nostore_check(ptr) do {\t\t\\\n\t\t/* FIXME: ptr_in_heap must be called with the GC lock held */ \\\n\t\tif (sgen_mono_xdomain_checks && *(MonoObject**)ptr && ptr_in_heap (ptr)) { \\\n\t\t\tchar *start = find_object_for_ptr (ptr);\t\\\n\t\t\tMonoObject *value = *(MonoObject**)ptr;\t\t\\\n\t\t\tLOCK_GC;\t\t\t\t\t\\\n\t\t\tSGEN_ASSERT (0, start, \"Write barrier outside an object?\"); \\\n\t\t\tif (start) {\t\t\t\t\t\\\n\t\t\t\tMonoObject *obj = (MonoObject*)start;\t\\\n\t\t\t\tif (obj->vtable->domain != value->vtable->domain) \\\n\t\t\t\t\tSGEN_ASSERT (0, is_xdomain_ref_allowed (ptr, start, obj->vtable->domain), \"Cross-domain ref not allowed\"); \\\n\t\t\t}\t\t\t\t\t\t\\\n\t\t\tUNLOCK_GC;\t\t\t\t\t\\\n\t\t}\t\t\t\t\t\t\t\\\n\t} while (0)\n#else\n#define sgen_client_wbarrier_generic_nostore_check(ptr)\n#endif\n\nstatic gboolean G_GNUC_UNUSED\nsgen_client_object_has_critical_finalizer (GCObject *obj)\n{\n\tMonoClass *klass;\n\n\tif (!mono_defaults.critical_finalizer_object)\n\t\treturn FALSE;\n\n\tklass = SGEN_LOAD_VTABLE (obj)->klass;\n\n\treturn mono_class_has_parent_fast (klass, mono_defaults.critical_finalizer_object);\n}\n\nconst char* sgen_client_vtable_get_namespace (GCVTable vtable);\nconst char* sgen_client_vtable_get_name (GCVTable vtable);\n\nstatic gboolean G_GNUC_UNUSED\nsgen_client_bridge_need_processing (void)\n{\n\treturn sgen_need_bridge_processing ();\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_bridge_reset_data (void)\n{\n\tsgen_bridge_reset_data ();\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_bridge_processing_stw_step (void)\n{\n\tsgen_bridge_processing_stw_step ();\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_bridge_wait_for_processing (void)\n{\n\tmono_gc_wait_for_bridge_processing ();\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_bridge_processing_finish (int generation)\n{\n\tsgen_bridge_processing_finish (generation);\n}\n\nstatic gboolean G_GNUC_UNUSED\nsgen_client_bridge_is_bridge_object (GCObject *obj)\n{\n\treturn sgen_is_bridge_object (obj);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_bridge_register_finalized_object (GCObject *object)\n{\n\tsgen_bridge_register_finalized_object (object);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_collection_requested (int generation, size_t requested_size, gboolean force)\n{\n\tMONO_GC_REQUESTED (generation, requested_size, force);\n}\n\nvoid\nsgen_client_binary_protocol_collection_begin (int minor_gc_count, int generation);\n\nvoid\nsgen_client_binary_protocol_collection_end (int minor_gc_count, int generation, long long num_objects_scanned, long long num_unique_objects_scanned);\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_concurrent_start (void)\n{\n\tMONO_GC_CONCURRENT_START_BEGIN (GENERATION_OLD);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_concurrent_update (void)\n{\n\tMONO_GC_CONCURRENT_UPDATE_FINISH_BEGIN (GENERATION_OLD, sgen_get_major_collector ()->get_and_reset_num_major_objects_marked ());\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_concurrent_finish (void)\n{\n\tMONO_GC_CONCURRENT_UPDATE_FINISH_BEGIN (GENERATION_OLD, sgen_get_major_collector ()->get_and_reset_num_major_objects_marked ());\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_sweep_begin (int generation, int full_sweep)\n{\n\tMONO_GC_SWEEP_BEGIN (generation, full_sweep);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_sweep_end (int generation, int full_sweep)\n{\n\tMONO_GC_SWEEP_END (generation, full_sweep);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_world_stopping (int generation, long long timestamp, gpointer thread)\n{\n\tMONO_GC_WORLD_STOP_BEGIN ();\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_world_stopped (int generation, long long timestamp, long long total_major_cards, long long marked_major_cards, long long total_los_cards, long long marked_los_cards)\n{\n\tMONO_GC_WORLD_STOP_END ();\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_world_restarting (int generation, long long timestamp, long long total_major_cards, long long marked_major_cards, long long total_los_cards, long long marked_los_cards)\n{\n\tMONO_GC_WORLD_RESTART_BEGIN (generation);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_world_restarted (int generation, long long timestamp)\n{\n\tMONO_GC_WORLD_RESTART_END (generation);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_block_alloc (gpointer addr, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_block_free (gpointer addr, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_block_set_state (gpointer addr, size_t size, int old, int new_)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_mark_start (int generation)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_mark_end (int generation)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_reclaim_start (int generation)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_reclaim_end (int generation)\n{\n}\n\nstatic void\nmono_binary_protocol_alloc_generic (gpointer obj, gpointer vtable, size_t size, gboolean pinned)\n{\n#ifdef ENABLE_DTRACE\n\tconst char *name_space = sgen_client_vtable_get_namespace ((GCVTable)vtable);\n\tconst char *name = sgen_client_vtable_get_name ((GCVTable)vtable);\n\n\tif (sgen_ptr_in_nursery (obj)) {\n\t\tif (G_UNLIKELY (MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ()))\n\t\t\tMONO_GC_NURSERY_OBJ_ALLOC ((mword)obj, size, name_space, name);\n\t} else {\n\t\tif (size > SGEN_MAX_SMALL_OBJ_SIZE) {\n\t\t\tif (G_UNLIKELY (MONO_GC_MAJOR_OBJ_ALLOC_LARGE_ENABLED ()))\n\t\t\t\tMONO_GC_MAJOR_OBJ_ALLOC_LARGE ((mword)obj, size, name_space, name);\n\t\t} else if (pinned) {\n\t\t\tMONO_GC_MAJOR_OBJ_ALLOC_PINNED ((mword)obj, size, name_space, name);\n\t\t}\n\t}\n#endif\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_alloc (gpointer obj, gpointer vtable, size_t size, gpointer provenance)\n{\n\tmono_binary_protocol_alloc_generic (obj, vtable, size, FALSE);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_alloc_pinned (gpointer obj, gpointer vtable, size_t size, gpointer provenance)\n{\n\tmono_binary_protocol_alloc_generic (obj, vtable, size, TRUE);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_alloc_degraded (gpointer obj, gpointer vtable, size_t size, gpointer provenance)\n{\n\tMONO_GC_MAJOR_OBJ_ALLOC_DEGRADED ((mword)obj, size, sgen_client_vtable_get_namespace ((GCVTable)vtable), sgen_client_vtable_get_name ((GCVTable)vtable));\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_card_scan (gpointer start, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_pin_stage (gpointer addr_ptr, gpointer addr)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_cement_stage (gpointer addr)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_pin (gpointer obj, gpointer vtable, size_t size)\n{\n#ifdef ENABLE_DTRACE\n\tif (G_UNLIKELY (MONO_GC_OBJ_PINNED_ENABLED ())) {\n\t\tint gen = sgen_ptr_in_nursery (obj) ? GENERATION_NURSERY : GENERATION_OLD;\n\t\tMONO_GC_OBJ_PINNED ((mword)obj,\n\t\t\t\tsgen_safe_object_get_size ((GCObject*)obj),\n\t\t\t\tsgen_client_vtable_get_namespace ((GCVTable)vtable), sgen_client_vtable_get_name ((GCVTable)vtable), gen);\n\t}\n#endif\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_mark (gpointer obj, gpointer vtable, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_scan_begin (gpointer obj, gpointer vtable, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_scan_vtype_begin (gpointer obj, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_scan_process_reference (gpointer obj, gpointer ptr, gpointer value)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_scan_stack (gpointer thread, gpointer stack_start, gpointer stack_end, int skip_reason)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_wbarrier (gpointer ptr, gpointer value, gpointer value_vtable)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_cement (gpointer ptr, gpointer vtable, size_t size)\n{\n#ifdef ENABLE_DTRACE\n\tif (G_UNLIKELY (MONO_GC_OBJ_CEMENTED_ENABLED())) {\n\t\tMONO_GC_OBJ_CEMENTED ((mword)ptr, sgen_safe_object_get_size ((GCObject*)ptr),\n\t\t\t\tsgen_client_vtable_get_namespace ((GCVTable)vtable), sgen_client_vtable_get_name ((GCVTable)vtable));\n\t}\n#endif\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_copy (gpointer from, gpointer to, gpointer vtable, size_t size)\n{\n#ifdef ENABLE_DTRACE\n\tif (G_UNLIKELY (MONO_GC_OBJ_MOVED_ENABLED ())) {\n\t\tint dest_gen = sgen_ptr_in_nursery (to) ? GENERATION_NURSERY : GENERATION_OLD;\n\t\tint src_gen = sgen_ptr_in_nursery (from) ? GENERATION_NURSERY : GENERATION_OLD;\n\t\tMONO_GC_OBJ_MOVED ((mword)to, (mword)from, dest_gen, src_gen, size, sgen_client_vtable_get_namespace ((GCVTable)vtable), sgen_client_vtable_get_name ((GCVTable)vtable));\n\t}\n#endif\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_global_remset (gpointer ptr, gpointer value, gpointer value_vtable)\n{\n#ifdef ENABLE_DTRACE\n\tif (G_UNLIKELY (MONO_GC_GLOBAL_REMSET_ADD_ENABLED ())) {\n\t\tMONO_GC_GLOBAL_REMSET_ADD ((mword)ptr, (mword)value, sgen_safe_object_get_size ((GCObject*)value),\n\t\t\t\tsgen_client_vtable_get_namespace ((GCVTable)value_vtable), sgen_client_vtable_get_name ((GCVTable)value_vtable));\n\t}\n#endif\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_mod_union_remset (gpointer obj, gpointer ptr, gpointer value, gpointer value_vtable)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_ptr_update (gpointer ptr, gpointer old_value, gpointer new_value, gpointer vtable, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_cleanup (gpointer ptr, gpointer vtable, size_t size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_dislink_add (gpointer link, gpointer obj, gboolean track)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_dislink_update (gpointer link, gpointer obj, gboolean track)\n{\n#ifdef ENABLE_DTRACE\n\tif (MONO_GC_WEAK_UPDATE_ENABLED ()) {\n\t\tGCVTable vt = obj ? SGEN_LOAD_VTABLE (obj) : NULL;\n\t\tMONO_GC_WEAK_UPDATE ((mword)link,\n\t\t\t\t(mword)obj,\n\t\t\t\tobj ? sgen_safe_object_get_size ((GCObject*)obj) : 0u,\n\t\t\t\tobj ? sgen_client_vtable_get_namespace (vt) : NULL,\n\t\t\t\tobj ? sgen_client_vtable_get_name (vt) : NULL,\n\t\t\t\ttrack ? 1 : 0);\n\t}\n#endif\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_dislink_remove (gpointer link, gboolean track)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_empty (gpointer start, size_t size)\n{\n\tif (sgen_ptr_in_nursery (start))\n\t\tMONO_GC_NURSERY_SWEPT ((mword)start, size);\n\telse\n\t\tMONO_GC_MAJOR_SWEPT ((mword)start, size);\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_thread_suspend (gpointer thread, gpointer stopped_ip)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_thread_restart (gpointer thread)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_thread_register (gpointer thread)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_thread_unregister (gpointer thread)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_missing_remset (gpointer obj, gpointer obj_vtable, int offset, gpointer value, gpointer value_vtable, gboolean value_pinned)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_cement_reset (void)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_domain_unload_begin (gpointer domain)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_domain_unload_end (gpointer domain)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_gray_enqueue (gpointer queue, gpointer cursor, gpointer value)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_gray_dequeue (gpointer queue, gpointer cursor, gpointer value)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_major_card_table_scan_start (long long timestamp, gboolean mod_union)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_major_card_table_scan_end (long long timestamp, gboolean mod_union)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_los_card_table_scan_start (long long timestamp, gboolean mod_union)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_los_card_table_scan_end (long long timestamp, gboolean mod_union)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_finish_gray_stack_start (long long timestamp, int generation)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_finish_gray_stack_end (long long timestamp, int generation)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_worker_finish (long long timestamp, gboolean forced)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_evacuating_blocks (size_t block_size)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_concurrent_sweep_end (long long timestamp)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_header (long long check, int version, int ptr_size, gboolean little_endian)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_pin_stats (int objects_pinned_in_nursery, size_t bytes_pinned_in_nursery, int objects_pinned_in_major, size_t bytes_pinned_in_major)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_root_registered (char *start, size_t size, MonoGCRootSource source, void *key, const char *msg)\n{\n\tMONO_PROFILER_RAISE (gc_root_register, ((const mono_byte *) start, size, source, key, msg));\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_root_deregistered (char *start)\n{\n\tMONO_PROFILER_RAISE (gc_root_unregister, ((const mono_byte *) start));\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_worker_finish_stats (int worker_index, int generation, gboolean forced, long long major_scan, long long los_scan, long long work_time)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_collection_end_stats (long long major_scan, long long los_scan, long long finish_stack)\n{\n}\n\nstatic void G_GNUC_UNUSED\nsgen_client_binary_protocol_ephemeron_ref (gpointer list, gpointer key, gpointer val)\n{\n}\n\n#define TLAB_ACCESS_INIT\tSgenThreadInfo *__thread_info__ = mono_tls_get_sgen_thread_info ()\n#define IN_CRITICAL_REGION (__thread_info__->client_info.in_critical_region)\n\n/* Enter must be visible before anything is done in the critical region. */\n#define ENTER_CRITICAL_REGION do { mono_atomic_store_acquire (&IN_CRITICAL_REGION, 1); } while (0)\n\n/* Exit must make sure all critical regions stores are visible before it signal the end of the region. \n * We don't need to emit a full barrier since we\n */\n#define EXIT_CRITICAL_REGION  do { mono_atomic_store_release (&IN_CRITICAL_REGION, 0); } while (0)\n\n#ifndef DISABLE_CRITICAL_REGION\n/*\n * We can only use a critical region in the managed allocator if the JIT supports OP_ATOMIC_STORE_I4.\n *\n * TODO: Query the JIT instead of this ifdef hack.\n */\n#if defined (TARGET_X86) || defined (TARGET_AMD64) || (defined (TARGET_ARM) && defined (HAVE_ARMV7)) || defined (TARGET_ARM64) || defined (TARGET_RISCV)\n#define MANAGED_ALLOCATOR_CAN_USE_CRITICAL_REGION\n#endif\n#endif\n\n#define SGEN_TV_DECLARE(name) gint64 name\n#define SGEN_TV_GETTIME(tv) tv = mono_100ns_ticks ()\n#define SGEN_TV_ELAPSED(start,end) ((gint64)(end-start))\n\nguint64 mono_time_since_last_stw (void);\n\ngboolean sgen_has_critical_method (void);\ngboolean sgen_is_critical_method (MonoMethod *method);\n\nvoid sgen_set_use_managed_allocator (gboolean flag);\ngboolean sgen_is_managed_allocator (MonoMethod *method);\ngboolean sgen_has_managed_allocator (void);\n\nvoid sgen_scan_for_registered_roots_in_domain (MonoDomain *domain, int root_type);\nvoid sgen_null_links_for_domain (MonoDomain *domain);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-dynarray.h",
    "content": "/**\n * \\file\n * Copyright 2016 Xamarin, Inc.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n // Growable array implementation used by sgen-new-bridge and sgen-tarjan-bridge.\n\ntypedef struct {\n\tint size;\n\tint capacity;\t\t/* if negative, data points to another DynArray's data */\n\tchar *data;\n} DynArray;\n\n/*Specializations*/\n\n// IntArray supports an optimization (in sgen-new-bridge.c): If capacity is less than 0 it is a \"copy\" and does not own its buffer.\ntypedef struct {\n\tDynArray array;\n} DynIntArray;\n\n// PtrArray supports an optimization: If size is equal to 1 it is a \"singleton\" and data points to the single held item, not to a buffer.\ntypedef struct {\n\tDynArray array;\n} DynPtrArray;\n\ntypedef struct {\n\tDynArray array;\n} DynSCCArray;\n\nstatic void\ndyn_array_init (DynArray *da)\n{\n\tda->size = 0;\n\tda->capacity = 0;\n\tda->data = NULL;\n}\n\nstatic void\ndyn_array_uninit (DynArray *da, int elem_size)\n{\n\tif (da->capacity < 0) {\n\t\tdyn_array_init (da);\n\t\treturn;\n\t}\n\n\tif (da->capacity == 0)\n\t\treturn;\n\n\tsgen_free_internal_dynamic (da->data, elem_size * da->capacity, INTERNAL_MEM_BRIDGE_DATA);\n\tda->data = NULL;\n}\n\nstatic void\ndyn_array_empty (DynArray *da)\n{\n\tif (da->capacity < 0)\n\t\tdyn_array_init (da);\n\telse\n\t\tda->size = 0;\n}\n\nstatic char *\ndyn_array_ensure_capacity_internal (DynArray *da, int capacity, int elem_size)\n{\n\tif (da->capacity <= 0)\n\t\tda->capacity = 2;\n\twhile (capacity > da->capacity)\n\t\tda->capacity *= 2;\n\n\treturn (char *)sgen_alloc_internal_dynamic (elem_size * da->capacity, INTERNAL_MEM_BRIDGE_DATA, TRUE);\n}\n\nstatic void\ndyn_array_ensure_capacity (DynArray *da, int capacity, int elem_size)\n{\n\tint old_capacity = da->capacity;\n\tchar *new_data;\n\n\tg_assert (capacity > 0);\n\n\tif (capacity <= old_capacity)\n\t\treturn;\n\n\tnew_data = dyn_array_ensure_capacity_internal (da, capacity, elem_size);\n\tmemcpy (new_data, da->data, elem_size * da->size);\n\tif (old_capacity > 0)\n\t\tsgen_free_internal_dynamic (da->data, elem_size * old_capacity, INTERNAL_MEM_BRIDGE_DATA);\n\tda->data = new_data;\n}\n\nstatic gboolean\ndyn_array_is_copy (DynArray *da)\n{\n\treturn da->capacity < 0;\n}\n\nstatic void\ndyn_array_ensure_independent (DynArray *da, int elem_size)\n{\n\tif (!dyn_array_is_copy (da))\n\t\treturn;\n\tdyn_array_ensure_capacity (da, da->size, elem_size);\n\tg_assert (da->capacity > 0);\n}\n\nstatic void*\ndyn_array_add (DynArray *da, int elem_size)\n{\n\tvoid *p;\n\n\tdyn_array_ensure_capacity (da, da->size + 1, elem_size);\n\n\tp = da->data + da->size * elem_size;\n\t++da->size;\n\treturn p;\n}\n\nstatic void\ndyn_array_copy (DynArray *dst, DynArray *src, int elem_size)\n{\n\tdyn_array_uninit (dst, elem_size);\n\n\tif (src->size == 0)\n\t\treturn;\n\n\tdst->size = src->size;\n\tdst->capacity = -1;\n\tdst->data = src->data;\n}\n\n/* int */\nstatic inline void\ndyn_array_int_init (DynIntArray *da)\n{\n\tdyn_array_init (&da->array);\n}\n\nstatic inline void\ndyn_array_int_uninit (DynIntArray *da)\n{\n\tdyn_array_uninit (&da->array, sizeof (int));\n}\n\nstatic inline int\ndyn_array_int_size (DynIntArray *da)\n{\n\treturn da->array.size;\n}\n\n#ifdef NEW_XREFS\nstatic void\ndyn_array_int_empty (DynIntArray *da)\n{\n\tdyn_array_empty (&da->array);\n}\n#endif\n\nstatic inline void\ndyn_array_int_add (DynIntArray *da, int x)\n{\n\tint *p = (int *)dyn_array_add (&da->array, sizeof (int));\n\t*p = x;\n}\n\nstatic inline int\ndyn_array_int_get (DynIntArray *da, int x)\n{\n\treturn ((int*)da->array.data)[x];\n}\n\n#ifdef NEW_XREFS\nstatic void\ndyn_array_int_set (DynIntArray *da, int idx, int val)\n{\n\t((int*)da->array.data)[idx] = val;\n}\n#endif\n\nstatic inline void\ndyn_array_int_ensure_independent (DynIntArray *da)\n{\n\tdyn_array_ensure_independent (&da->array, sizeof (int));\n}\n\nstatic inline void\ndyn_array_int_copy (DynIntArray *dst, DynIntArray *src)\n{\n\tdyn_array_copy (&dst->array, &src->array, sizeof (int));\n}\n\nstatic inline gboolean\ndyn_array_int_is_copy (DynIntArray *da)\n{\n\treturn dyn_array_is_copy (&da->array);\n}\n\n/* ptr */\n\nstatic inline void\ndyn_array_ptr_init (DynPtrArray *da)\n{\n\tdyn_array_init (&da->array);\n}\n\nstatic void\ndyn_array_ptr_uninit (DynPtrArray *da)\n{\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (da->array.capacity == 1)\n\t\tdyn_array_ptr_init (da);\n\telse\n#endif\n\t\tdyn_array_uninit (&da->array, sizeof (void*));\n}\n\nstatic int\ndyn_array_ptr_size (DynPtrArray *da)\n{\n\treturn da->array.size;\n}\n\nstatic void\ndyn_array_ptr_empty (DynPtrArray *da)\n{\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (da->array.capacity == 1)\n\t\tdyn_array_ptr_init (da);\n\telse\n#endif\n\t\tdyn_array_empty (&da->array);\n}\n\nstatic void*\ndyn_array_ptr_get (DynPtrArray *da, int x)\n{\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (da->array.capacity == 1) {\n\t\tg_assert (x == 0);\n\t\treturn da->array.data;\n\t}\n#endif\n\treturn ((void**)da->array.data)[x];\n}\n\nstatic inline void\ndyn_array_ptr_set (DynPtrArray *da, int x, void *ptr)\n{\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (da->array.capacity == 1) {\n\t\tg_assert (x == 0);\n\t\tda->array.data = (char*)ptr;\n\t} else\n#endif\n\t{\n\t\t((void**)da->array.data)[x] = ptr;\n\t}\n}\n\nstatic void\ndyn_array_ptr_add (DynPtrArray *da, void *ptr)\n{\n\tvoid **p;\n\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (da->array.capacity == 0) {\n\t\tda->array.capacity = 1;\n\t\tda->array.size = 1;\n\t\tp = (void**)&da->array.data;\n\t} else if (da->array.capacity == 1) {\n\t\tvoid *ptr0 = da->array.data;\n\t\tvoid **p0;\n\t\tdyn_array_init (&da->array);\n\t\tp0 = (void **)dyn_array_add (&da->array, sizeof (void*));\n\t\t*p0 = ptr0;\n\t\tp = (void **)dyn_array_add (&da->array, sizeof (void*));\n\t} else\n#endif\n\t{\n\t\tp = (void **)dyn_array_add (&da->array, sizeof (void*));\n\t}\n\t*p = ptr;\n}\n\n#define dyn_array_ptr_push dyn_array_ptr_add\n\nstatic void*\ndyn_array_ptr_pop (DynPtrArray *da)\n{\n\tint size = da->array.size;\n\tvoid *p;\n\tg_assert (size > 0);\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (da->array.capacity == 1) {\n\t\tp = dyn_array_ptr_get (da, 0);\n\t\tdyn_array_init (&da->array);\n\t} else\n#endif\n\t{\n\t\tg_assert (da->array.capacity > 1);\n\t\tdyn_array_ensure_independent (&da->array, sizeof (void*));\n\t\tp = dyn_array_ptr_get (da, size - 1);\n\t\t--da->array.size;\n\t}\n\treturn p;\n}\n\nstatic void\ndyn_array_ptr_ensure_capacity (DynPtrArray *da, int capacity)\n{\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\tif (capacity == 1 && da->array.capacity < 1) {\n\t\tda->array.capacity = 1;\n\t} else if (da->array.capacity == 1) // TODO size==1\n\t{\n\t\tif (capacity > 1)\n\t\t{\n\t\t\tvoid *ptr = dyn_array_ptr_get (da, 0);\n\t\t\tda->array.data = dyn_array_ensure_capacity_internal(&da->array, capacity, sizeof (void*));\n\t\t\tdyn_array_ptr_set (da, 0, ptr);\n\t\t}\n\t}\n#endif\n\t{\n\t\tdyn_array_ensure_capacity (&da->array, capacity, sizeof (void*));\n\t}\n}\n\nstatic inline void\ndyn_array_ptr_set_all (DynPtrArray *dst, DynPtrArray *src)\n{\n\tconst int copysize = src->array.size;\n\tif (copysize > 0) {\n\t\tdyn_array_ptr_ensure_capacity (dst, copysize);\n\n#ifdef OPTIMIZATION_SINGLETON_DYN_ARRAY\n\t\tif (copysize == 1) {\n\t\t\tdyn_array_ptr_set (dst, 0, dyn_array_ptr_get (src, 0));\n\t\t} else\n#endif\n\t\t{\n\t\t\tmemcpy (dst->array.data, src->array.data, copysize * sizeof (void*));\n\t\t}\n\t}\n\tdst->array.size = src->array.size;\n}\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-mono-ilgen.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_SGEN_MONO_ILGEN_H__\n#define __MONO_SGEN_MONO_ILGEN_H__\n\n#include \"config.h\"\n\nMONO_API void\nmono_sgen_mono_ilgen_init (void);\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-mono.h",
    "content": "/**\n * \\file\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_SGEN_MONO_H__\n#define __MONO_SGEN_MONO_H__\n\n#define MONO_SGEN_MONO_CALLBACKS_VERSION 1\n\ntypedef struct {\n\tint version;\n\tvoid (*emit_nursery_check) (MonoMethodBuilder *mb, gboolean is_concurrent);\n\tvoid (*emit_managed_allocator) (MonoMethodBuilder *mb, gboolean slowpath, gboolean profiler, int atype);\n} MonoSgenMonoCallbacks;\n\nvoid\nmono_install_sgen_mono_callbacks (MonoSgenMonoCallbacks *cb);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sgen-toggleref.h",
    "content": "/**\n * \\file\n * toggleref support for sgen\n *\n * Copyright 2011 Xamarin, Inc.\n *\n * Author:\n *  Rodrigo Kumpera (kumpera@gmail.com)\n * \n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_SGEN_TOGGLEREF_H_\n#define _MONO_SGEN_TOGGLEREF_H_\n\n#include <mono/utils/mono-publib.h>\n\n/* GC toggle ref support */\n\ntypedef enum {\n\tMONO_TOGGLE_REF_DROP,\n\tMONO_TOGGLE_REF_STRONG,\n\tMONO_TOGGLE_REF_WEAK\n} MonoToggleRefStatus;\n\nMONO_API void mono_gc_toggleref_register_callback (MonoToggleRefStatus (*proccess_toggleref) (MonoObject *obj));\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_gc_toggleref_add (MonoObject *object, mono_bool strong_ref);\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/sre-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_SRE_INTERNALS_H__\n#define __MONO_METADATA_SRE_INTERNALS_H__\n\n#include <mono/metadata/object-internals.h>\n\n/* Keep in sync with System.Reflection.Emit.AssemblyBuilderAccess */\nenum MonoAssemblyBuilderAccess {\n\tMonoAssemblyBuilderAccess_Run = 1,                /* 0b0001 */\n\tMonoAssemblyBuilderAccess_Save = 2,               /* 0b0010 */\n\tMonoAssemblyBuilderAccess_RunAndSave = 3,         /* Run | Save */\n\tMonoAssemblyBuilderAccess_ReflectionOnly = 6,     /* Refonly | Save */\n\tMonoAssemblyBuilderAccess_RunAndCollect = 9,      /* Collect | Run */\n};\n\ntypedef struct _ArrayMethod ArrayMethod;\n\ntypedef struct {\n\tguint32 owner;\n\tMonoReflectionGenericParam *gparam;\n} GenericParamTableEntry;\n\ntypedef struct {\n\tMonoReflectionILGen *ilgen;\n\tMonoReflectionType *rtype;\n\tMonoArray *parameters;\n\tMonoArray *generic_params;\n\tMonoGenericContainer *generic_container;\n\tMonoArray *pinfo;\n\tMonoArray *opt_types;\n\tguint32 attrs;\n\tguint32 iattrs;\n\tguint32 call_conv;\n\tguint32 *table_idx; /* note: it's a pointer */\n\tMonoArray *code;\n\tMonoObject *type;\n\tMonoString *name;\n\tMonoBoolean init_locals;\n\tMonoBoolean skip_visibility;\n\tMonoArray *return_modreq;\n\tMonoArray *return_modopt;\n\tMonoArray *param_modreq;\n\tMonoArray *param_modopt;\n\tMonoArray *permissions;\n\tMonoMethod *mhandle;\n\tguint32 nrefs;\n\tgpointer *refs;\n\t/* for PInvoke */\n\tint charset, extra_flags, native_cc;\n\tMonoString *dll, *dllentry;\n} ReflectionMethodBuilder; /* FIXME raw pointers to managed objects */\n\nvoid\nmono_reflection_emit_init (void);\n\nvoid\nmono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, MonoError *error);\n\ngpointer\nmono_image_g_malloc0 (MonoImage *image, guint size);\n\n#define mono_image_g_malloc0(image, size) (g_cast (mono_image_g_malloc0 ((image), (size))))\n\ngboolean\nmono_is_sre_type_builder (MonoClass *klass);\n\ngboolean\nmono_is_sre_generic_instance (MonoClass *klass);\n\ngboolean\nmono_is_sre_method_on_tb_inst (MonoClass *klass);\n\ngboolean\nmono_is_sre_ctor_builder (MonoClass *klass);\n\ngboolean\nmono_is_sre_ctor_on_tb_inst (MonoClass *klass);\n\ngboolean\nmono_is_sr_mono_cmethod (MonoClass *klass);\n\ngboolean\nmono_is_sr_mono_property (MonoClass *klass);\n\nMonoType*\nmono_reflection_type_get_handle (MonoReflectionType *ref, MonoError *error);\n\ngpointer\nmono_reflection_resolve_object (MonoImage *image, MonoObject *obj, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);\n\ngpointer\nmono_reflection_resolve_object_handle (MonoImage *image, MonoObjectHandle obj, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);\n\nMonoType* mono_type_array_get_and_resolve (MonoArrayHandle array, int idx, MonoError* error);\n\nvoid\nmono_sre_array_method_free (ArrayMethod *am);\n\nvoid\nmono_sre_generic_param_table_entry_free (GenericParamTableEntry *entry);\n\ngboolean\nmono_reflection_methodbuilder_from_method_builder (ReflectionMethodBuilder *rmb, MonoReflectionMethodBuilder *mb,\n\t\t\t\t\t\t   MonoError *error);\ngboolean\nmono_reflection_methodbuilder_from_ctor_builder (ReflectionMethodBuilder *rmb, MonoReflectionCtorBuilder *mb,\n\t\t\t\t\t\t MonoError *error);\n\t\t\t\t\t\t\t    \nguint32\nmono_reflection_resolution_scope_from_image (MonoDynamicImage *assembly, MonoImage *image);\n\nguint32 mono_reflection_method_count_clauses (MonoReflectionILGen *ilgen);\n\n\n/* sre-encode */\n\nguint32\nmono_dynimage_encode_field_signature (MonoDynamicImage *assembly, MonoReflectionFieldBuilder *fb, MonoError *error);\n\nguint32\nmono_dynimage_encode_constant (MonoDynamicImage *assembly, MonoObject *val, MonoTypeEnum *ret_type);\n\nguint32\nmono_dynimage_encode_locals (MonoDynamicImage *assembly, MonoReflectionILGen *ilgen, MonoError *error);\n\nguint32\nmono_dynimage_encode_fieldref_signature (MonoDynamicImage *assembly, MonoImage *field_image, MonoType *type);\n\nguint32\nmono_dynimage_encode_method_signature (MonoDynamicImage *assembly, MonoMethodSignature *sig);\n\nguint32\nmono_dynimage_encode_method_builder_signature (MonoDynamicImage *assembly, ReflectionMethodBuilder *mb,\n\t\t\t\t\t       MonoError *error);\n\nguint32\nmono_dynimage_encode_generic_method_sig (MonoDynamicImage *assembly, MonoGenericContext *context);\n\nguint32\nmono_dynimage_encode_typedef_or_ref_full (MonoDynamicImage *assembly, MonoType *type, gboolean try_typespec);\n\nguint32\nmono_dynimage_encode_reflection_sighelper (MonoDynamicImage *assembly, MonoReflectionSigHelperHandle helper,\n\t\t\t\t\t   MonoError *error);\n\n/* sre-encode, without DISABLE_REFLECTION_EMIT_SAVE (o.w. g_assert_not_reached ()) */\n\nguint32\nmono_dynimage_save_encode_marshal_blob (MonoDynamicImage *assembly, MonoReflectionMarshal *minfo, MonoError *error);\n\nguint32\nmono_dynimage_save_encode_property_signature (MonoDynamicImage *assembly, MonoReflectionPropertyBuilder *fb, MonoError *error);\n\nguint32\nmono_image_get_methodref_token (MonoDynamicImage *assembly, MonoMethod *method, gboolean create_typespec);\n\n#endif  /* __MONO_METADATA_SRE_INTERNALS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/string-icalls.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_CLI_STRING_ICALLS_H_\n#define _MONO_CLI_STRING_ICALLS_H_\n\n/*\n * string-icalls.h: String internal calls for the corlib\n *\n * Author:\n *   Patrik Torstensson (patrik.torstensson@labs2.com)\n *\n * (C) 2001 Ximian, Inc.\n */\n\n#include <glib.h>\n#include <mono/metadata/class.h>\n#include <mono/metadata/object.h>\n#include \"mono/utils/mono-compiler.h\"\n#include <mono/metadata/icalls.h>\n\nICALL_EXPORT\nvoid\nves_icall_System_String_ctor_RedirectToCreateString (void);\n\nICALL_EXPORT\nint\nves_icall_System_String_GetLOSLimit (void);\n\n#endif /* _MONO_CLI_STRING_ICALLS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/tabledefs.h",
    "content": "/**\n * \\file\n * This file contains the various definitions for constants\n * found on the metadata tables\n *\n * Author:\n *   Miguel de Icaza (miguel@ximian.com)\n *\n * (C) 2001 Ximian, Inc.\n *\n * From the ECMA documentation\n */\n \n#ifndef _MONO_METADATA_TABLEDEFS_H_\n#define _MONO_METADATA_TABLEDEFS_H_\n\n/*\n * 22.1.1  Values for AssemblyHashAlgorithm \n */\n\nenum {\n\tASSEMBLY_HASH_NONE,\n\tASSEMBLY_HASH_MD5  = 0x8003,\n\tASSEMBLY_HASH_SHA1 = 0x8004\n};\n\n/*\n * 22.1.4 Flags for Event.EventAttributes\n */\n\nenum {\n\tEVENT_SPECIALNAME   = 0x0200,\n\tEVENT_RTSPECIALNAME = 0x0400\n};\n\n/*\n * 22.1.6 Flags for FileAttributes\n */\n\nenum {\n\tFILE_CONTAINS_METADATA      = 0,\n\tFILE_CONTAINS_NO_METADATA   = 1\n};\n\n/* keep in synch with System.Security.Permissions.SecurityAction enum \n   (except for the special non-CAS cases) */\nenum {\n\tSECURITY_ACTION_DEMAND        = 2,\n\tSECURITY_ACTION_ASSERT        = 3,\n\tSECURITY_ACTION_DENY          = 4,\n\tSECURITY_ACTION_PERMITONLY    = 5,\n\tSECURITY_ACTION_LINKDEMAND    = 6,\n\tSECURITY_ACTION_INHERITDEMAND = 7,\n\tSECURITY_ACTION_REQMIN        = 8,\n\tSECURITY_ACTION_REQOPT        = 9,\n\tSECURITY_ACTION_REQREFUSE     = 10,\n\t/* Special cases (non CAS permissions) */\n\tSECURITY_ACTION_NONCASDEMAND        = 13,\n\tSECURITY_ACTION_NONCASLINKDEMAND    = 14,\n\tSECURITY_ACTION_NONCASINHERITANCE   = 15,\n\t/* Fx 2.0 actions (for both CAS and non-CAS permissions) */\n\tSECURITY_ACTION_LINKDEMANDCHOICE    = 16,\n\tSECURITY_ACTION_INHERITDEMANDCHOICE = 17,\n\tSECURITY_ACTION_DEMANDCHOICE        = 18\n};\n\n/*\n *\n * 22.1.8 Flags for ManifestResource\n */\n#define MANIFEST_RESOURCE_VISIBILITY_MASK    0x00000007\n#define MANIFEST_RESOURCE_PUBLIC             0x00000001\n#define MANIFEST_RESOURCE_PRIVATE            0x00000002\n\n/*\n * Field Attributes (21.1.5).\n */\n\n#define FIELD_ATTRIBUTE_FIELD_ACCESS_MASK     0x0007\n#define FIELD_ATTRIBUTE_COMPILER_CONTROLLED   0x0000\n#define FIELD_ATTRIBUTE_PRIVATE               0x0001\n#define FIELD_ATTRIBUTE_FAM_AND_ASSEM         0x0002\n#define FIELD_ATTRIBUTE_ASSEMBLY              0x0003\n#define FIELD_ATTRIBUTE_FAMILY                0x0004\n#define FIELD_ATTRIBUTE_FAM_OR_ASSEM          0x0005\n#define FIELD_ATTRIBUTE_PUBLIC                0x0006\n\n#define FIELD_ATTRIBUTE_STATIC                0x0010\n#define FIELD_ATTRIBUTE_INIT_ONLY             0x0020\n#define FIELD_ATTRIBUTE_LITERAL               0x0040\n#define FIELD_ATTRIBUTE_NOT_SERIALIZED        0x0080\n#define FIELD_ATTRIBUTE_SPECIAL_NAME          0x0200\n#define FIELD_ATTRIBUTE_PINVOKE_IMPL          0x2000\n\n/* For runtime use only */\n#define FIELD_ATTRIBUTE_RESERVED_MASK         0x9500\n#define FIELD_ATTRIBUTE_RT_SPECIAL_NAME       0x0400\n#define FIELD_ATTRIBUTE_HAS_FIELD_MARSHAL     0x1000\n#define FIELD_ATTRIBUTE_HAS_DEFAULT           0x8000\n#define FIELD_ATTRIBUTE_HAS_FIELD_RVA         0x0100\n\n/*\n * Type Attributes (21.1.13).\n */\n#define TYPE_ATTRIBUTE_VISIBILITY_MASK       0x00000007\n#define TYPE_ATTRIBUTE_NOT_PUBLIC            0x00000000\n#define TYPE_ATTRIBUTE_PUBLIC                0x00000001\n#define TYPE_ATTRIBUTE_NESTED_PUBLIC         0x00000002\n#define TYPE_ATTRIBUTE_NESTED_PRIVATE        0x00000003\n#define TYPE_ATTRIBUTE_NESTED_FAMILY         0x00000004\n#define TYPE_ATTRIBUTE_NESTED_ASSEMBLY       0x00000005\n#define TYPE_ATTRIBUTE_NESTED_FAM_AND_ASSEM  0x00000006\n#define TYPE_ATTRIBUTE_NESTED_FAM_OR_ASSEM   0x00000007\n\n#define TYPE_ATTRIBUTE_LAYOUT_MASK           0x00000018\n#define TYPE_ATTRIBUTE_AUTO_LAYOUT           0x00000000\n#define TYPE_ATTRIBUTE_SEQUENTIAL_LAYOUT     0x00000008\n#define TYPE_ATTRIBUTE_EXPLICIT_LAYOUT       0x00000010\n\n#define TYPE_ATTRIBUTE_CLASS_SEMANTIC_MASK   0x00000020\n#define TYPE_ATTRIBUTE_CLASS                 0x00000000\n#define TYPE_ATTRIBUTE_INTERFACE             0x00000020\n\n#define TYPE_ATTRIBUTE_ABSTRACT              0x00000080\n#define TYPE_ATTRIBUTE_SEALED                0x00000100\n#define TYPE_ATTRIBUTE_SPECIAL_NAME          0x00000400\n\n#define TYPE_ATTRIBUTE_IMPORT                0x00001000\n#define TYPE_ATTRIBUTE_SERIALIZABLE          0x00002000\n#define TYPE_ATTRIBUTE_WINDOWS_RUNTIME       0x00004000\n\n\n#define TYPE_ATTRIBUTE_STRING_FORMAT_MASK    0x00030000\n#define TYPE_ATTRIBUTE_ANSI_CLASS            0x00000000\n#define TYPE_ATTRIBUTE_UNICODE_CLASS         0x00010000\n#define TYPE_ATTRIBUTE_AUTO_CLASS            0x00020000\n\n#define TYPE_ATTRIBUTE_BEFORE_FIELD_INIT     0x00100000\n#define TYPE_ATTRIBUTE_FORWARDER             0x00200000\n\n#define TYPE_ATTRIBUTE_RESERVED_MASK         0x00040800\n#define TYPE_ATTRIBUTE_RT_SPECIAL_NAME       0x00000800\n#define TYPE_ATTRIBUTE_HAS_SECURITY          0x00040000\n\n/*\n * Method Attributes (22.1.9)\n */\n\n#define METHOD_IMPL_ATTRIBUTE_CODE_TYPE_MASK       0x0003\n#define METHOD_IMPL_ATTRIBUTE_IL                   0x0000\n#define METHOD_IMPL_ATTRIBUTE_NATIVE               0x0001\n#define METHOD_IMPL_ATTRIBUTE_OPTIL                0x0002\n#define METHOD_IMPL_ATTRIBUTE_RUNTIME              0x0003\n\n#define METHOD_IMPL_ATTRIBUTE_MANAGED_MASK         0x0004\n#define METHOD_IMPL_ATTRIBUTE_UNMANAGED            0x0004\n#define METHOD_IMPL_ATTRIBUTE_MANAGED              0x0000\n\n#define METHOD_IMPL_ATTRIBUTE_FORWARD_REF          0x0010\n#define METHOD_IMPL_ATTRIBUTE_PRESERVE_SIG         0x0080\n#define METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL        0x1000\n#define METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED         0x0020\n#define METHOD_IMPL_ATTRIBUTE_NOINLINING           0x0008\n#define METHOD_IMPL_ATTRIBUTE_NOOPTIMIZATION       0x0040\n#define METHOD_IMPL_ATTRIBUTE_MAX_METHOD_IMPL_VAL  0xffff\n#define METHOD_IMPL_ATTRIBUTE_AGGRESSIVE_INLINING  0x0100\n\n#define METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK        0x0007\n#define METHOD_ATTRIBUTE_COMPILER_CONTROLLED       0x0000\n#define METHOD_ATTRIBUTE_PRIVATE                   0x0001\n#define METHOD_ATTRIBUTE_FAM_AND_ASSEM             0x0002\n#define METHOD_ATTRIBUTE_ASSEM                     0x0003\n#define METHOD_ATTRIBUTE_FAMILY                    0x0004\n#define METHOD_ATTRIBUTE_FAM_OR_ASSEM              0x0005\n#define METHOD_ATTRIBUTE_PUBLIC                    0x0006\n\n#define METHOD_ATTRIBUTE_STATIC                    0x0010\n#define METHOD_ATTRIBUTE_FINAL                     0x0020\n#define METHOD_ATTRIBUTE_VIRTUAL                   0x0040\n#define METHOD_ATTRIBUTE_HIDE_BY_SIG               0x0080\n\n#define METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK        0x0100\n#define METHOD_ATTRIBUTE_REUSE_SLOT                0x0000\n#define METHOD_ATTRIBUTE_NEW_SLOT                  0x0100\n\n#define METHOD_ATTRIBUTE_STRICT                    0x0200\n#define METHOD_ATTRIBUTE_ABSTRACT                  0x0400\n#define METHOD_ATTRIBUTE_SPECIAL_NAME              0x0800\n\n#define METHOD_ATTRIBUTE_PINVOKE_IMPL              0x2000\n#define METHOD_ATTRIBUTE_UNMANAGED_EXPORT          0x0008\n\n#define METHOD_ATTRIBUTE_REQSECOBJ                 0x8000\n\n/*\n * For runtime use only\n */\n#define METHOD_ATTRIBUTE_RESERVED_MASK             0xd000\n#define METHOD_ATTRIBUTE_RT_SPECIAL_NAME           0x1000\n#define METHOD_ATTRIBUTE_HAS_SECURITY              0x4000\n#define METHOD_ATTRIBUTE_REQUIRE_SEC_OBJECT        0x8000\n\n\n/*\n * Method Semantics ([MethodSemanticAttributes]) 22.1.10\n */\n\n#define METHOD_SEMANTIC_SETTER    0x0001\n#define METHOD_SEMANTIC_GETTER    0x0002\n#define METHOD_SEMANTIC_OTHER     0x0004\n#define METHOD_SEMANTIC_ADD_ON    0x0008\n#define METHOD_SEMANTIC_REMOVE_ON 0x0010\n#define METHOD_SEMANTIC_FIRE      0x0020\n\n/*\n * Flags for Params (22.1.12)\n */\n#define PARAM_ATTRIBUTE_IN                 0x0001\n#define PARAM_ATTRIBUTE_OUT                0x0002\n#define PARAM_ATTRIBUTE_OPTIONAL           0x0010\n#define PARAM_ATTRIBUTE_RESERVED_MASK      0xf000\n#define PARAM_ATTRIBUTE_HAS_DEFAULT        0x1000\n#define PARAM_ATTRIBUTE_HAS_FIELD_MARSHAL  0x2000\n#define PARAM_ATTRIBUTE_UNUSED             0xcfe0\n\n/*\n * 22.1.12 PropertyAttributes\n */\n#define PROPERTY_ATTRIBUTE_SPECIAL_NAME    0x0200\n#define PROPERTY_ATTRIBUTE_RESERVED_MASK   0xf400\n#define PROPERTY_ATTRIBUTE_RT_SPECIAL_NAME 0x0400\n#define PROPERTY_ATTRIBUTE_HAS_DEFAULT     0x1000\n#define PROPERTY_ATTRIBUTE_UNUSED          0xe9ff\n\n/*\n * 22.1.7 Flags for ImplMap [PInvokeAttributes]\n */\n#define PINVOKE_ATTRIBUTE_NO_MANGLE           0x0001\n#define PINVOKE_ATTRIBUTE_CHAR_SET_MASK       0x0006\n#define PINVOKE_ATTRIBUTE_CHAR_SET_NOT_SPEC   0x0000\n#define PINVOKE_ATTRIBUTE_CHAR_SET_ANSI       0x0002\n#define PINVOKE_ATTRIBUTE_CHAR_SET_UNICODE    0x0004\n#define PINVOKE_ATTRIBUTE_CHAR_SET_AUTO       0x0006\n#define PINVOKE_ATTRIBUTE_BEST_FIT_ENABLED    0x0010\n#define PINVOKE_ATTRIBUTE_BEST_FIT_DISABLED   0x0020\n#define PINVOKE_ATTRIBUTE_BEST_FIT_MASK       0x0030\n#define PINVOKE_ATTRIBUTE_SUPPORTS_LAST_ERROR 0x0040\n#define PINVOKE_ATTRIBUTE_CALL_CONV_MASK      0x0700\n#define PINVOKE_ATTRIBUTE_CALL_CONV_WINAPI    0x0100\n#define PINVOKE_ATTRIBUTE_CALL_CONV_CDECL     0x0200\n#define PINVOKE_ATTRIBUTE_CALL_CONV_STDCALL   0x0300\n#define PINVOKE_ATTRIBUTE_CALL_CONV_THISCALL  0x0400\n#define PINVOKE_ATTRIBUTE_CALL_CONV_FASTCALL  0x0500\n#define PINVOKE_ATTRIBUTE_THROW_ON_UNMAPPABLE_ENABLED    0x1000\n#define PINVOKE_ATTRIBUTE_THROW_ON_UNMAPPABLE_DISABLED   0x2000\n#define PINVOKE_ATTRIBUTE_THROW_ON_UNMAPPABLE_MASK       0x3000\n#define PINVOKE_ATTRIBUTE_BEST_FIT_MASK       0x0030\n#define PINVOKE_ATTRIBUTE_CALL_CONV_GENERIC   0x0010\n#define PINVOKE_ATTRIBUTE_CALL_CONV_GENERICINST 0x000a\n\n/**\n * 21.5 AssemblyRefs\n */\n#define ASSEMBLYREF_FULL_PUBLIC_KEY_FLAG      0x00000001\n#define ASSEMBLYREF_RETARGETABLE_FLAG         0x00000100\n#define ASSEMBLYREF_ENABLEJITCOMPILE_TRACKING_FLAG 0x00008000\n#define ASSEMBLYREF_DISABLEJITCOMPILE_OPTIMIZER_FLAG 0x00004000\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/threadpool-io.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_THREADPOOL_IO_H_\n#define _MONO_METADATA_THREADPOOL_IO_H_\n\n#include <config.h>\n#include <glib.h>\n\n#ifndef ENABLE_NETCORE\n\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/icalls.h>\n\ntypedef struct _MonoIOSelectorJob MonoIOSelectorJob;\n\nTYPED_HANDLE_DECL (MonoIOSelectorJob);\n\nICALL_EXPORT\nvoid\nves_icall_System_IOSelector_Remove (gpointer handle);\n\nvoid\nmono_threadpool_io_remove_socket (int fd);\nvoid\nmono_threadpool_io_remove_domain_jobs (MonoDomain *domain);\nvoid\nmono_threadpool_io_cleanup (void);\n\n#endif /* ENABLE_NETCORE */\n\n#endif /* _MONO_METADATA_THREADPOOL_IO_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/threadpool-worker.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_THREADPOOL_WORKER_H\n#define _MONO_METADATA_THREADPOOL_WORKER_H\n\n#include <config.h>\n#include <glib.h>\n\n#ifndef ENABLE_NETCORE\n\ntypedef void (*MonoThreadPoolWorkerCallback)(void);\n\nvoid\nmono_threadpool_worker_init (MonoThreadPoolWorkerCallback callback);\n\nvoid\nmono_threadpool_worker_cleanup (void);\n\nvoid\nmono_threadpool_worker_request (void);\n\ngboolean\nmono_threadpool_worker_notify_completed (void);\n\ngint32\nmono_threadpool_worker_get_min (void);\ngboolean\nmono_threadpool_worker_set_min (gint32 value);\n\ngint32\nmono_threadpool_worker_get_max (void);\ngboolean\nmono_threadpool_worker_set_max (gint32 value);\n\nvoid\nmono_threadpool_worker_set_suspended (gboolean suspended);\n\n#endif /* ENABLE_NETCORE */\n\n#endif /* _MONO_METADATA_THREADPOOL_WORKER_H */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/threadpool.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_THREADPOOL_H_\n#define _MONO_METADATA_THREADPOOL_H_\n\n#include <config.h>\n#include <glib.h>\n\n#include <mono/metadata/exception.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/icalls.h>\n\nvoid\nmono_threadpool_cleanup (void);\n\nMonoAsyncResult *\nmono_threadpool_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod *method, gpointer *params, MonoError *error);\nMonoObject *\nmono_threadpool_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc, MonoError *error);\n\ngboolean\nmono_threadpool_remove_domain_jobs (MonoDomain *domain, int timeout);\n\nvoid\nmono_threadpool_suspend (void);\nvoid\nmono_threadpool_resume (void);\n\n/* Internals */\n\ngboolean\nmono_threadpool_enqueue_work_item (MonoDomain *domain, MonoObject *work_item, MonoError *error);\n\n#endif // _MONO_METADATA_THREADPOOL_H_\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/threads-types.h",
    "content": "/**\n * \\file\n * Generic thread typedef support (includes system-specific files)\n *\n * Author:\n *\tDick Porter (dick@ximian.com)\n *\n * (C) 2001 Ximian, Inc\n * (C) Copyright 2002-2006 Novell, Inc\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_METADATA_THREADS_TYPES_H_\n#define _MONO_METADATA_THREADS_TYPES_H_\n\n#include <glib.h>\n\n#include <mono/utils/mono-forward-internal.h>\n#include <mono/metadata/object.h>\n#include \"mono/metadata/handle.h\"\n#include \"mono/utils/mono-compiler.h\"\n#include \"mono/utils/mono-membar.h\"\n#include \"mono/utils/mono-threads.h\"\n#include \"mono/metadata/class-internals.h\"\n#include <mono/metadata/icalls.h>\n\n/* This is a copy of System.Threading.ThreadState */\ntypedef enum {\n\tThreadState_Running = 0x00000000,\n\tThreadState_SuspendRequested = 0x00000002,\n\tThreadState_Background = 0x00000004,\n\tThreadState_Unstarted = 0x00000008,\n\tThreadState_Stopped = 0x00000010,\n\tThreadState_WaitSleepJoin = 0x00000020,\n\tThreadState_Suspended = 0x00000040,\n\tThreadState_AbortRequested = 0x00000080,\n\tThreadState_Aborted = 0x00000100\n} MonoThreadState;\n\nG_ENUM_FUNCTIONS (MonoThreadState)\n\n/* This is a copy of System.Threading.ApartmentState */\ntypedef enum {\n\tThreadApartmentState_STA = 0x00000000,\n\tThreadApartmentState_MTA = 0x00000001,\n\tThreadApartmentState_Unknown = 0x00000002\n} MonoThreadApartmentState;\n\ntypedef enum {\n// These values match System.Threading.ThreadPriority.\n// These values match System.Diagnostics.ThreadPriorityLevel and Windows, but are offset by 2.\n\tMONO_THREAD_PRIORITY_LOWEST       = 0,\n\tMONO_THREAD_PRIORITY_BELOW_NORMAL = 1,\n\tMONO_THREAD_PRIORITY_NORMAL       = 2,\n\tMONO_THREAD_PRIORITY_ABOVE_NORMAL = 3,\n\tMONO_THREAD_PRIORITY_HIGHEST      = 4,\n} MonoThreadPriority;\n\n#define SPECIAL_STATIC_NONE 0\n#define SPECIAL_STATIC_THREAD 1\n#define SPECIAL_STATIC_CONTEXT 2\n\n/* It's safe to access System.Threading.InternalThread from native code via a\n * raw pointer because all instances should be pinned.  But for uniformity of\n * icall wrapping, let's declare a MonoInternalThreadHandle anyway.\n */\nTYPED_HANDLE_DECL (MonoInternalThread);\n\ntypedef void (*MonoThreadCleanupFunc) (MonoNativeThreadId tid);\n/* INFO has type MonoThreadInfo* */\ntypedef void (*MonoThreadNotifyPendingExcFunc) (gpointer info);\n\nvoid\nmono_thread_callbacks_init (void);\n\ntypedef enum {\n\tMONO_THREAD_CREATE_FLAGS_NONE         = 0x0,\n\tMONO_THREAD_CREATE_FLAGS_THREADPOOL   = 0x1,\n\tMONO_THREAD_CREATE_FLAGS_DEBUGGER     = 0x2,\n\tMONO_THREAD_CREATE_FLAGS_FORCE_CREATE = 0x4,\n\tMONO_THREAD_CREATE_FLAGS_SMALL_STACK  = 0x8,\n} MonoThreadCreateFlags;\n\n// FIXME func should be MonoThreadStart and remove the template\nMonoInternalThread*\nmono_thread_create_internal (MonoDomain *domain, gpointer func, gpointer arg, MonoThreadCreateFlags flags, MonoError *error);\n\n#ifdef __cplusplus\ntemplate <typename T>\ninline MonoInternalThread*\nmono_thread_create_internal (MonoDomain *domain, T func, gpointer arg, MonoThreadCreateFlags flags, MonoError *error)\n{\n\treturn mono_thread_create_internal(domain, (gpointer)func, arg, flags, error);\n}\n#endif\n\nMonoInternalThreadHandle\nmono_thread_create_internal_handle (MonoDomain *domain, gpointer func, gpointer arg, MonoThreadCreateFlags flags, MonoError *error);\n\n#ifdef __cplusplus\ntemplate <typename T>\ninline MonoInternalThreadHandle\nmono_thread_create_internal_handle (MonoDomain *domain, T func, gpointer arg, MonoThreadCreateFlags flags, MonoError *error)\n{\n\treturn mono_thread_create_internal_handle(domain, (gpointer)func, arg, flags, error);\n}\n#endif\n\nvoid\nmono_thread_manage_internal (void);\n\n/* Data owned by a MonoInternalThread that must live until both the finalizer\n * for MonoInternalThread has run, and the underlying machine thread has\n * detached.\n *\n * Normally a thread is first detached and then the InternalThread object is\n * finalized and collected.  However during shutdown, when the root domain is\n * finalized, all the InternalThread objects are finalized first and the\n * machine threads are detached later.\n */\ntypedef struct {\n  MonoRefCount ref;\n  MonoCoopMutex *synch_cs;\n} MonoLongLivedThreadData;\n\nvoid mono_threads_install_cleanup (MonoThreadCleanupFunc func);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_SetName_internal (MonoInternalThread *this_obj, MonoString *name);\n\nICALL_EXPORT\nMonoObject* ves_icall_System_Threading_Thread_GetCachedCurrentCulture (MonoInternalThread *this_obj);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_SetCachedCurrentCulture (MonoThread *this_obj, MonoObject *culture);\n\nICALL_EXPORT\nMonoObject* ves_icall_System_Threading_Thread_GetCachedCurrentUICulture (MonoInternalThread *this_obj);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_SetCachedCurrentUICulture (MonoThread *this_obj, MonoObject *culture);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_Increment_Int(gint32 *location);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Increment_Long(gint64 *location);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_Decrement_Int(gint32 *location);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Decrement_Long(gint64 * location);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_Exchange_Int(gint32 *location, gint32 value);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Exchange_Long(gint64 *location, gint64 value);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Interlocked_Exchange_Object (MonoObject *volatile*location, MonoObject *volatile*value, MonoObject *volatile*res);\n\nICALL_EXPORT\ngpointer ves_icall_System_Threading_Interlocked_Exchange_IntPtr(gpointer *location, gpointer value);\n\nICALL_EXPORT\ngfloat ves_icall_System_Threading_Interlocked_Exchange_Single(gfloat *location, gfloat value);\n\nICALL_EXPORT\ngdouble ves_icall_System_Threading_Interlocked_Exchange_Double(gdouble *location, gdouble value);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_CompareExchange_Int(gint32 *location, gint32 value, gint32 comparand);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_CompareExchange_Int_Success(gint32 *location, gint32 value, gint32 comparand, MonoBoolean *success);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_CompareExchange_Long(gint64 *location, gint64 value, gint64 comparand);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Interlocked_CompareExchange_Object (MonoObject *volatile*location, MonoObject *volatile*value, MonoObject *volatile*comparand, MonoObject *volatile*res);\n\nICALL_EXPORT\ngpointer ves_icall_System_Threading_Interlocked_CompareExchange_IntPtr(gpointer *location, gpointer value, gpointer comparand);\n\nICALL_EXPORT\ngfloat ves_icall_System_Threading_Interlocked_CompareExchange_Single(gfloat *location, gfloat value, gfloat comparand);\n\nICALL_EXPORT\ngdouble ves_icall_System_Threading_Interlocked_CompareExchange_Double(gdouble *location, gdouble value, gdouble comparand);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_Add_Int(gint32 *location, gint32 value);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Add_Long(gint64 *location, gint64 value);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Read_Long(gint64 *location);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_Increment_Int(gint32 *location);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Increment_Long(gint64 *location);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Interlocked_Decrement_Int(gint32 *location);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Interlocked_Decrement_Long(gint64 * location);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Interlocked_MemoryBarrierProcessWide (void);\n\nICALL_EXPORT\ngint8 ves_icall_System_Threading_Thread_VolatileRead1 (void *ptr);\n\nICALL_EXPORT\ngint16 ves_icall_System_Threading_Thread_VolatileRead2 (void *ptr);\n\nICALL_EXPORT\ngint32 ves_icall_System_Threading_Thread_VolatileRead4 (void *ptr);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Thread_VolatileRead8 (void *ptr);\n\nICALL_EXPORT\nvoid * ves_icall_System_Threading_Thread_VolatileReadIntPtr (void *ptr);\n\nICALL_EXPORT\nvoid * ves_icall_System_Threading_Thread_VolatileReadObject (void *ptr);\n\nICALL_EXPORT\ndouble ves_icall_System_Threading_Thread_VolatileReadDouble (void *ptr);\n\nICALL_EXPORT\nfloat ves_icall_System_Threading_Thread_VolatileReadFloat (void *ptr);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWrite1 (void *ptr, gint8);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWrite2 (void *ptr, gint16);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWrite4 (void *ptr, gint32);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWrite8 (void *ptr, gint64);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWriteIntPtr (void *ptr, void *);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWriteObject (void *ptr, MonoObject *);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWriteFloat (void *ptr, float);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_VolatileWriteDouble (void *ptr, double);\n\nICALL_EXPORT\ngint64 ves_icall_System_Threading_Volatile_Read8 (void *ptr);\n\nICALL_EXPORT\nguint64 ves_icall_System_Threading_Volatile_ReadU8 (void *ptr);\n\nICALL_EXPORT\ndouble ves_icall_System_Threading_Volatile_ReadDouble (void *ptr);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Volatile_Write8 (void *ptr, gint64);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Volatile_WriteU8 (void *ptr, guint64);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Volatile_WriteDouble (void *ptr, double);\n\nICALL_EXPORT\nvoid ves_icall_System_Threading_Thread_MemoryBarrier (void);\n\nvoid\nmono_threads_register_app_context (MonoAppContextHandle ctx, MonoError *error);\nvoid\nmono_threads_release_app_context (MonoAppContext* ctx, MonoError *error);\n\nMONO_PROFILER_API MonoInternalThread *mono_thread_internal_current (void);\n\nMonoInternalThreadHandle\nmono_thread_internal_current_handle (void);\n\nvoid mono_thread_internal_abort (MonoInternalThread *thread, gboolean appdomain_unload);\nvoid mono_thread_internal_suspend_for_shutdown (MonoInternalThread *thread);\n\ngboolean mono_thread_internal_has_appdomain_ref (MonoInternalThread *thread, MonoDomain *domain);\n\nvoid mono_thread_internal_reset_abort (MonoInternalThread *thread);\n\nvoid mono_thread_internal_unhandled_exception (MonoObject* exc);\n\nvoid mono_alloc_special_static_data_free (GHashTable *special_static_fields);\ngboolean mono_thread_current_check_pending_interrupt (void);\n\nvoid mono_thread_set_state (MonoInternalThread *thread, MonoThreadState state);\nvoid mono_thread_clr_state (MonoInternalThread *thread, MonoThreadState state);\ngboolean mono_thread_test_state (MonoInternalThread *thread, MonoThreadState test);\ngboolean mono_thread_test_and_set_state (MonoInternalThread *thread, MonoThreadState test, MonoThreadState set);\nvoid mono_thread_clear_and_set_state (MonoInternalThread *thread, MonoThreadState clear, MonoThreadState set);\n\nvoid mono_thread_init_apartment_state (void);\nvoid mono_thread_cleanup_apartment_state (void);\n\nvoid mono_threads_set_shutting_down (void);\n\nMONO_API MonoException* mono_thread_get_undeniable_exception (void);\n\nICALL_EXPORT\nvoid ves_icall_thread_finish_async_abort (void);\n\n#if HOST_WIN32\n\nvoid\nmono_thread_set_name_windows (HANDLE thread_handle, PCWSTR thread_name);\n\n#define MONO_THREAD_NAME_WINDOWS_CONSTANT(x) L ## x\n\n#else\n\n#define mono_thread_set_name_windows(thread_handle, thread_name) /* nothing */\n\n#define MONO_THREAD_NAME_WINDOWS_CONSTANT(x) NULL\n\n#endif\n\ntypedef enum {\n    MonoSetThreadNameFlag_None      = 0x0000,\n    MonoSetThreadNameFlag_Permanent = 0x0001,\n    MonoSetThreadNameFlag_Reset     = 0x0002,\n    MonoSetThreadNameFlag_Constant  = 0x0004,\n    MonoSetThreadNameFlag_RepeatedlyButOptimized = 0x0008,\n} MonoSetThreadNameFlags;\n\nG_ENUM_FUNCTIONS (MonoSetThreadNameFlags)\n\nMONO_PROFILER_API\nvoid\nmono_thread_set_name (MonoInternalThread *thread,\n\t\t      const char* name8, size_t name8_length, const gunichar2* name16,\n\t\t      MonoSetThreadNameFlags flags, MonoError *error);\n\n#define mono_thread_set_name_constant_ignore_error(thread, name, flags) \\\n\tmono_thread_set_name ((thread), name, G_N_ELEMENTS (name) - 1,  \\\n\t\tMONO_THREAD_NAME_WINDOWS_CONSTANT (name),               \\\n\t\t(flags) | MonoSetThreadNameFlag_Constant, NULL)\n\n#ifndef ENABLE_NETCORE\nvoid mono_thread_suspend_all_other_threads (void);\n#endif\ngboolean mono_threads_abort_appdomain_threads (MonoDomain *domain, int timeout);\n\nvoid mono_thread_push_appdomain_ref (MonoDomain *domain);\nvoid mono_thread_pop_appdomain_ref (void);\ngboolean mono_thread_has_appdomain_ref (MonoThread *thread, MonoDomain *domain);\n\ngboolean mono_thread_interruption_requested (void);\n\nICALL_EXTERN_C\nMonoException*\nmono_thread_interruption_checkpoint (void);\n\ngboolean\nmono_thread_interruption_checkpoint_bool (void);\n\nvoid\nmono_thread_interruption_checkpoint_void (void);\n\nMonoExceptionHandle\nmono_thread_interruption_checkpoint_handle (void);\n\nICALL_EXTERN_C\nMonoException* mono_thread_force_interruption_checkpoint_noraise (void);\n\n/**\n * mono_thread_interruption_request_flag:\n *\n * A flag that will be non-zero if an interruption has\n * been requested for a thread. The thread to interrupt may not be the current\n * thread, so an additional call to mono_thread_interruption_requested () or\n * mono_thread_interruption_checkpoint () is always needed if the flag is not\n * zero.\n */\nextern gint32 mono_thread_interruption_request_flag;\n\nuint32_t mono_alloc_special_static_data (uint32_t static_type, uint32_t size, uint32_t align, uintptr_t *bitmap, int numbits);\n\nICALL_EXTERN_C\nvoid*    mono_get_special_static_data   (uint32_t offset);\n\ngpointer mono_get_special_static_data_for_thread (MonoInternalThread *thread, guint32 offset);\n\nvoid\nmono_thread_resume_interruption (gboolean exec);\nvoid mono_threads_perform_thread_dump (void);\n\n// FIXME Correct the type of func and remove the template.\ngboolean\nmono_thread_create_checked (MonoDomain *domain, gpointer func, gpointer arg, MonoError *error);\n\n#ifdef __cplusplus\ntemplate <typename T>\ninline gboolean\nmono_thread_create_checked (MonoDomain *domain, T func, gpointer arg, MonoError *error)\n{\n\treturn mono_thread_create_checked (domain, (gpointer)func, arg, error);\n}\n#endif\n\nvoid mono_threads_add_joinable_runtime_thread (MonoThreadInfo *thread_info);\nvoid mono_threads_add_joinable_thread (gpointer tid);\nvoid mono_threads_join_threads (void);\nvoid mono_thread_join (gpointer tid);\n\nMONO_API gpointer\nmono_threads_attach_coop (MonoDomain *domain, gpointer *dummy);\n\nMONO_API void\nmono_threads_detach_coop (gpointer cookie, gpointer *dummy);\n\nMonoDomain*\nmono_threads_attach_coop_internal (MonoDomain *domain, gpointer *cookie, MonoStackData *stackdata);\n\nvoid\nmono_threads_detach_coop_internal (MonoDomain *orig_domain, gpointer cookie, MonoStackData *stackdata);\n\nvoid mono_threads_begin_abort_protected_block (void);\ngboolean mono_threads_end_abort_protected_block (void);\n\ngboolean\nmono_thread_internal_current_is_attached (void);\n\nvoid\nmono_thread_internal_describe (MonoInternalThread *internal, GString *str);\n\ngboolean\nmono_thread_internal_is_current (MonoInternalThread *internal);\n\ngboolean\nmono_threads_is_current_thread_in_protected_block (void);\n\ngboolean\nmono_threads_is_critical_method (MonoMethod *method);\n\ngpointer\nmono_threads_enter_gc_unsafe_region_unbalanced_internal (MonoStackData *stackdata);\n\nvoid\nmono_threads_exit_gc_unsafe_region_unbalanced_internal (gpointer cookie, MonoStackData *stackdata);\n\ngpointer\nmono_threads_enter_gc_safe_region_unbalanced_internal (MonoStackData *stackdata);\n\nvoid\nmono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStackData *stackdata);\n\n// Set directory to store thread dumps captured by SIGQUIT\nvoid\nmono_set_thread_dump_dir(gchar* dir);\n\nMONO_COLD void\nmono_set_pending_exception_handle (MonoExceptionHandle exc);\n\n#define MONO_MAX_SUMMARY_NAME_LEN 140\n#define MONO_MAX_THREAD_NAME_LEN 140\n#define MONO_MAX_SUMMARY_THREADS 32\n#define MONO_MAX_SUMMARY_FRAMES 80\n#define MONO_MAX_SUMMARY_EXCEPTIONS 15\n\ntypedef struct {\n\tgboolean is_managed;\n\tchar str_descr [MONO_MAX_SUMMARY_NAME_LEN];\n\tstruct {\n\t\tint token;\n\t\tint il_offset;\n\t\tint native_offset;\n\t\tconst char *guid;\n\n#ifndef MONO_PRIVATE_CRASHES\n\t\t// We use ifdef to make it a compile-time error to store this \n\t\t// symbolicated string on release builds\n\t\tconst char *name;\n#endif\n\t\tconst char *filename;\n\t\tguint32 image_size;\n\t\tguint32 time_date_stamp;\n\t} managed_data;\n\tstruct {\n\t\tintptr_t ip;\n\t\tgint32 offset;\n\t\tchar module [MONO_MAX_SUMMARY_NAME_LEN];\n\t\tgboolean is_trampoline;\n\t\tgboolean has_name;\n\t} unmanaged_data;\n} MonoFrameSummary;\n\ntypedef struct {\n\tMonoClass *managed_exc_type;\n\n\tint num_managed_frames;\n\tMonoFrameSummary managed_frames [MONO_MAX_SUMMARY_FRAMES];\n} MonoExcSummary;\n\ntypedef struct {\n\tguint64 offset_free_hash;\n\tguint64 offset_rich_hash;\n} MonoStackHash;\n\ntypedef struct {\n\tgboolean done; // Needed because cond wait can have spurious wakeups\n\tMonoSemType done_wait; // Readers are finished with this\n\n\t// For managed stack walking\n\n\tMonoDomain *domain;\n\tMonoJitTlsData *jit_tls;\n\tMonoLMF *lmf;\n\n\t// Emitted attributes\n\n\tgboolean is_managed;\n\n\tchar name [MONO_MAX_THREAD_NAME_LEN];\n\n\tintptr_t info_addr;\n\tintptr_t native_thread_id;\n\n\t// Print reason we don't have a complete\n\t// managed trace\n\tconst char *error_msg;\n\n\tint num_managed_frames;\n\tMonoFrameSummary managed_frames [MONO_MAX_SUMMARY_FRAMES];\n\n\tint num_unmanaged_frames;\n\tMonoFrameSummary unmanaged_frames [MONO_MAX_SUMMARY_FRAMES];\n\n\tint num_exceptions;\n\tMonoExcSummary exceptions [MONO_MAX_SUMMARY_EXCEPTIONS];\n\n\tMonoStackHash hashes;\n\n\tMonoContext *ctx;\n\tMonoContext ctx_mem;\n} MonoThreadSummary;\n\nvoid\nmono_threads_summarize_init (void);\n\ngboolean\nmono_threads_summarize (MonoContext *ctx, gchar **out, MonoStackHash *hashes, gboolean silent, gboolean signal_handler_controller, gchar *mem, size_t provided_size);\n\ngboolean\nmono_threads_summarize_execute (MonoContext *ctx, gchar **out, MonoStackHash *hashes, gboolean silent, gchar *mem, size_t provided_size);\n\ngboolean\nmono_threads_summarize_one (MonoThreadSummary *out, MonoContext *ctx);\n\n#endif /* _MONO_METADATA_THREADS_TYPES_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/threads.h",
    "content": "/**\n * \\file\n * Threading API\n *\n * Author:\n *\tDick Porter (dick@ximian.com)\n *\tPatrik Torstensson (patrik.torstensson@labs2.com)\n *\n * (C) 2001 Ximian, Inc\n */\n\n#ifndef _MONO_METADATA_THREADS_H_\n#define _MONO_METADATA_THREADS_H_\n\n#include <mono/utils/mono-publib.h>\n#include <mono/metadata/object.h>\n#include <mono/metadata/appdomain.h>\n\nMONO_BEGIN_DECLS\n\n/* This callback should return TRUE if the runtime must wait for the thread, FALSE otherwise */\ntypedef mono_bool (*MonoThreadManageCallback) (MonoThread* thread);\n\nMONO_API void mono_thread_init (MonoThreadStartCB start_cb,\n\t\t\t      MonoThreadAttachCB attach_cb);\nMONO_API void mono_thread_cleanup (void);\nMONO_API MONO_RT_EXTERNAL_ONLY\nvoid mono_thread_manage(void);\n\nMONO_API MonoThread *mono_thread_current (void);\n\nMONO_API void        mono_thread_set_main (MonoThread *thread);\nMONO_API MonoThread *mono_thread_get_main (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void mono_thread_stop (MonoThread *thread);\n\nMONO_API void mono_thread_new_init (intptr_t tid, void* stack_start,\n\t\t\t\t  void* func);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_thread_create (MonoDomain *domain, void* func, void* arg);\n\nMONO_API MonoThread *mono_thread_attach (MonoDomain *domain);\nMONO_API void mono_thread_detach (MonoThread *thread);\nMONO_API void mono_thread_exit (void);\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_threads_attach_tools_thread (void);\n\nMONO_API char   *mono_thread_get_name_utf8 (MonoThread *thread);\nMONO_API int32_t mono_thread_get_managed_id (MonoThread *thread);\n\nMONO_API void     mono_thread_set_manage_callback (MonoThread *thread, MonoThreadManageCallback func);\n\nMONO_API void mono_threads_set_default_stacksize (uint32_t stacksize);\nMONO_API uint32_t mono_threads_get_default_stacksize (void);\n\nMONO_API void mono_threads_request_thread_dump (void);\n\nMONO_API mono_bool mono_thread_is_foreign (MonoThread *thread);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_thread_detach_if_exiting (void);\n\nMONO_END_DECLS\n\n#endif /* _MONO_METADATA_THREADS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/tokentype.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_TOKENTYPE_H_\n#define _MONO_METADATA_TOKENTYPE_H_\n\n/*\n * These tokens match the table ID except for the last\n * three (string, name and base type which are special)\n */\n \ntypedef enum {\n\tMONO_TOKEN_MODULE            = 0x00000000,\n\tMONO_TOKEN_TYPE_REF          = 0x01000000,\n\tMONO_TOKEN_TYPE_DEF          = 0x02000000,\n\tMONO_TOKEN_FIELD_DEF         = 0x04000000,\n\tMONO_TOKEN_METHOD_DEF        = 0x06000000, \n\tMONO_TOKEN_PARAM_DEF         = 0x08000000,\n\tMONO_TOKEN_INTERFACE_IMPL    = 0x09000000,\n\tMONO_TOKEN_MEMBER_REF        = 0x0a000000,\n\tMONO_TOKEN_CUSTOM_ATTRIBUTE  = 0x0c000000,\n\tMONO_TOKEN_PERMISSION        = 0x0e000000,\n\tMONO_TOKEN_SIGNATURE         = 0x11000000,\n\tMONO_TOKEN_EVENT             = 0x14000000,\n\tMONO_TOKEN_PROPERTY          = 0x17000000,\n\tMONO_TOKEN_MODULE_REF        = 0x1a000000,\n\tMONO_TOKEN_TYPE_SPEC         = 0x1b000000,\n\tMONO_TOKEN_ASSEMBLY          = 0x20000000,\n\tMONO_TOKEN_ASSEMBLY_REF      = 0x23000000,\n\tMONO_TOKEN_FILE              = 0x26000000,\n\tMONO_TOKEN_EXPORTED_TYPE     = 0x27000000,\n\tMONO_TOKEN_MANIFEST_RESOURCE = 0x28000000,\n\tMONO_TOKEN_GENERIC_PARAM     = 0x2a000000,\n\tMONO_TOKEN_METHOD_SPEC       = 0x2b000000,\n\n\t/*\n\t * These do not match metadata tables directly\n\t */\n\tMONO_TOKEN_STRING            = 0x70000000,\n\tMONO_TOKEN_NAME              = 0x71000000,\n\tMONO_TOKEN_BASE_TYPE         = 0x72000000\n} MonoTokenType;\n\n#endif /* _MONO_METADATA_TOKENTYPE_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/verify-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_VERIFY_INTERNAL_H__\n#define __MONO_METADATA_VERIFY_INTERNAL_H__\n\n#include <glib.h>\n#include <mono/metadata/metadata.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/utils/mono-error.h>\n\ntypedef enum {\n\tMONO_VERIFIER_MODE_OFF,\n\tMONO_VERIFIER_MODE_VALID,\n\tMONO_VERIFIER_MODE_VERIFIABLE,\n\tMONO_VERIFIER_MODE_STRICT\n} MiniVerifierMode;\n\nvoid mono_verifier_set_mode (MiniVerifierMode mode);\nvoid mono_verifier_enable_verify_all (void);\n\ngboolean mono_verifier_is_enabled_for_image (MonoImage *image);\ngboolean mono_verifier_is_enabled_for_method (MonoMethod *method);\ngboolean mono_verifier_is_enabled_for_class (MonoClass *klass);\n\ngboolean mono_verifier_is_method_full_trust (MonoMethod *method);\ngboolean mono_verifier_is_class_full_trust (MonoClass *klass);\ngboolean mono_verifier_class_is_valid_generic_instantiation (MonoClass *klass);\ngboolean mono_verifier_is_method_valid_generic_instantiation (MonoMethod *method);\n\ngboolean mono_verifier_verify_class (MonoClass *klass);\n\nGSList* mono_method_verify_with_current_settings (MonoMethod *method, gboolean skip_visibility, gboolean is_fulltrust);\n\ngboolean mono_verifier_verify_pe_data (MonoImage *image, MonoError *error);\ngboolean mono_verifier_verify_cli_data (MonoImage *image, MonoError *error);\ngboolean mono_verifier_verify_table_data (MonoImage *image, MonoError *error);\n\ngboolean mono_verifier_verify_full_table_data (MonoImage *image, MonoError *error);\n\ngboolean mono_verifier_verify_field_signature (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_method_header (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_method_signature (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_standalone_signature (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_typespec_signature (MonoImage *image, guint32 offset, guint32 token, MonoError *error);\ngboolean mono_verifier_verify_methodspec_signature (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_string_signature (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_cattr_blob (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_cattr_content (MonoImage *image, MonoMethod *ctor, const guchar *data, guint32 size, MonoError *error);\ngboolean mono_verifier_is_sig_compatible (MonoImage *image, MonoMethod *method, MonoMethodSignature *signature);\ngboolean mono_verifier_verify_memberref_method_signature (MonoImage *image, guint32 offset, MonoError *error);\ngboolean mono_verifier_verify_memberref_field_signature (MonoImage *image, guint32 offset, MonoError *error);\n\ngboolean mono_verifier_verify_typeref_row (MonoImage *image, guint32 row, MonoError *error);\ngboolean mono_verifier_verify_methodimpl_row (MonoImage *image, guint32 row, MonoError *error);\ngboolean mono_verifier_is_signature_compatible (MonoMethodSignature *target, MonoMethodSignature *candidate);\n\n/*Token validation macros and functions */\n#define IS_MEMBER_REF(token) (mono_metadata_token_table (token) == MONO_TABLE_MEMBERREF)\n#define IS_METHOD_DEF(token) (mono_metadata_token_table (token) == MONO_TABLE_METHOD)\n#define IS_METHOD_SPEC(token) (mono_metadata_token_table (token) == MONO_TABLE_METHODSPEC)\n#define IS_FIELD_DEF(token) (mono_metadata_token_table (token) == MONO_TABLE_FIELD)\n\n#define IS_TYPE_REF(token) (mono_metadata_token_table (token) == MONO_TABLE_TYPEREF)\n#define IS_TYPE_DEF(token) (mono_metadata_token_table (token) == MONO_TABLE_TYPEDEF)\n#define IS_TYPE_SPEC(token) (mono_metadata_token_table (token) == MONO_TABLE_TYPESPEC)\n#define IS_METHOD_DEF_OR_REF_OR_SPEC(token) (IS_METHOD_DEF (token) || IS_MEMBER_REF (token) || IS_METHOD_SPEC (token))\n#define IS_TYPE_DEF_OR_REF_OR_SPEC(token) (IS_TYPE_DEF (token) || IS_TYPE_REF (token) || IS_TYPE_SPEC (token))\n#define IS_FIELD_DEF_OR_REF(token) (IS_FIELD_DEF (token) || IS_MEMBER_REF (token))\n\n#endif  /* __MONO_METADATA_VERIFY_INTERNAL_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/verify.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_METADATA_VERIFY_H__\n#define __MONO_METADATA_VERIFY_H__\n\n#include <mono/metadata/metadata.h>\n#include <mono/metadata/image.h>\n#include <mono/metadata/loader.h>\n#include <glib.h> /* GSList dep */\n\nMONO_BEGIN_DECLS\n\ntypedef enum {\n\tMONO_VERIFY_OK,\n\tMONO_VERIFY_ERROR,\n\tMONO_VERIFY_WARNING,\n\tMONO_VERIFY_CLS = 4,\n\tMONO_VERIFY_ALL = 7,\n\n\t/* Status signaling code that is not verifiable.*/\n\tMONO_VERIFY_NOT_VERIFIABLE = 8,\n\n\t/*OR it with other flags*/\n\t\n\t/* Abort the verification if the code is not verifiable.\n\t * The standard behavior is to abort if the code is not valid.\n\t * */\n\tMONO_VERIFY_FAIL_FAST = 16,\n\n\n\t/* Perform less verification of the code. This flag should be used\n\t * if one wants the verifier to be more compatible to the MS runtime.\n\t * Mind that this is not to be more compatible with MS peverify, but\n\t * with the runtime itself, that has a less strict verifier.\n\t */\n\tMONO_VERIFY_NON_STRICT = 32,\n\n\t/*Skip all visibility related checks*/\n\tMONO_VERIFY_SKIP_VISIBILITY = 64,\n\n\t/*Skip all visibility related checks*/\n\tMONO_VERIFY_REPORT_ALL_ERRORS = 128\n\n} MonoVerifyStatus;\n\ntypedef struct {\n\tchar            *message;\n\tMonoVerifyStatus status;\n} MonoVerifyInfo;\n\ntypedef struct {\n\tMonoVerifyInfo info;\n\tint8_t exception_type; /*should be one of MONO_EXCEPTION_* */\n} MonoVerifyInfoExtended;\n\n\nMONO_API GSList* mono_method_verify       (MonoMethod *method, int level);\nMONO_API void    mono_free_verify_list    (GSList *list);\nMONO_API char*   mono_verify_corlib       (void);\n\nMONO_END_DECLS\n\n#endif  /* __MONO_METADATA_VERIFY_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32error.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32ERROR_H_\n#define _MONO_METADATA_W32ERROR_H_\n\n#include <config.h>\n#include <glib.h>\n\n#if !defined(HOST_WIN32)\n\n#define ERROR_SUCCESS              0\n#define ERROR_FILE_NOT_FOUND       2\n#define ERROR_PATH_NOT_FOUND       3\n#define ERROR_TOO_MANY_OPEN_FILES  4\n#define ERROR_ACCESS_DENIED        5\n#define ERROR_INVALID_HANDLE       6\n#define ERROR_NOT_ENOUGH_MEMORY    8\n#define ERROR_BAD_FORMAT           11\n#define ERROR_INVALID_ACCESS       12\n#define ERROR_INVALID_DATA         13\n#define ERROR_OUTOFMEMORY          14\n#define ERROR_NOT_SAME_DEVICE      17\n#define ERROR_NO_MORE_FILES        18\n#define ERROR_BAD_LENGTH           24\n#define ERROR_SEEK                 25\n#define ERROR_WRITE_FAULT          29\n#define ERROR_GEN_FAILURE          31\n#define ERROR_SHARING_VIOLATION    32\n#define ERROR_LOCK_VIOLATION       33\n#define ERROR_HANDLE_DISK_FULL     39\n#define ERROR_NOT_SUPPORTED        50\n#define ERROR_DEV_NOT_EXIST        55\n#define ERROR_FILE_EXISTS          80\n#define ERROR_CANNOT_MAKE          82\n#define ERROR_INVALID_PARAMETER    87\n#define ERROR_INVALID_NAME         123\n#define ERROR_PROC_NOT_FOUND       127\n#define ERROR_DIR_NOT_EMPTY        145\n#define ERROR_ALREADY_EXISTS       183\n#define ERROR_BAD_EXE_FORMAT       193\n#define ERROR_FILENAME_EXCED_RANGE 206\n#define ERROR_DIRECTORY            267\n#define ERROR_IO_PENDING           997\n#define ERROR_CANT_RESOLVE_FILENAME 1921\n#define ERROR_ENCRYPTION_FAILED    6000\n#define WSA_INVALID_PARAMETER      ERROR_INVALID_PARAMETER\n#define WSA_INVALID_HANDLE         ERROR_INVALID_HANDLE\n#define WSAEINTR                   10004\n#define WSAEBADF                   10009\n#define WSAEACCES                  10013\n#define WSAEFAULT                  10014\n#define WSAEINVAL                  10022\n#define WSAEMFILE                  10024\n#define WSAEWOULDBLOCK             10035\n#define WSAEINPROGRESS             10036\n#define WSAEALREADY                10037\n#define WSAENOTSOCK                10038\n#define WSAEDESTADDRREQ            10039\n#define WSAEMSGSIZE                10040\n#define WSAEPROTOTYPE              10041\n#define WSAENOPROTOOPT             10042\n#define WSAEPROTONOSUPPORT         10043\n#define WSAESOCKTNOSUPPORT         10044\n#define WSAEOPNOTSUPP              10045\n#define WSAEAFNOSUPPORT            10047\n#define WSAEADDRINUSE              10048\n#define WSAEADDRNOTAVAIL           10049\n#define WSAENETDOWN                10050\n#define WSAENETUNREACH             10051\n#define WSAECONNRESET              10054\n#define WSAENOBUFS                 10055\n#define WSAEISCONN                 10056\n#define WSAENOTCONN                10057\n#define WSAESHUTDOWN               10058\n#define WSAETIMEDOUT               10060\n#define WSAECONNREFUSED            10061\n#define WSAELOOP                   10062\n#define WSAENAMETOOLONG            10063\n#define WSAEHOSTDOWN               10064\n#define WSAEHOSTUNREACH            10065\n#define WSASYSCALLFAILURE          10107\n#define WSAENXIO                   100001\n\n#endif\n\nguint32\nmono_w32error_get_last (void);\n\nvoid\nmono_w32error_set_last (guint32 error);\n\nguint32\nmono_w32error_unix_to_win32 (guint32 error);\n\n#endif /* _MONO_METADATA_W32ERROR_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32event.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32EVENT_H_\n#define _MONO_METADATA_W32EVENT_H_\n\n#include <config.h>\n#include <glib.h>\n\n#include \"object.h\"\n#include \"object-internals.h\"\n#include \"w32handle-namespace.h\"\n#include <mono/metadata/icalls.h>\n\nvoid\nmono_w32event_init (void);\n\ngpointer\nmono_w32event_create (gboolean manual, gboolean initial);\n\ngboolean\nmono_w32event_close (gpointer handle);\n\nvoid\nmono_w32event_set (gpointer handle);\n\nvoid\nmono_w32event_reset (gpointer handle);\n\nICALL_EXPORT\ngboolean\nves_icall_System_Threading_Events_SetEvent_internal (gpointer handle);\n\nICALL_EXPORT\ngboolean\nves_icall_System_Threading_Events_ResetEvent_internal (gpointer handle);\n\nICALL_EXPORT\nvoid\nves_icall_System_Threading_Events_CloseEvent_internal (gpointer handle);\n\ntypedef struct MonoW32HandleNamedEvent MonoW32HandleNamedEvent;\n\nMonoW32HandleNamespace*\nmono_w32event_get_namespace (MonoW32HandleNamedEvent *event);\n\n#endif /* _MONO_METADATA_W32EVENT_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32file-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef _MONO_METADATA_W32FILE_INTERNALS_H_\n#define _MONO_METADATA_W32FILE_INTERNALS_H_\n\n#include <config.h>\n#include <glib.h>\n\n#endif /* _MONO_METADATA_W32FILE_INTERNALS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32file-unix-glob.h",
    "content": "/*\t$OpenBSD: glob.h,v 1.10 2005/12/13 00:35:22 millert Exp $\t*/\n/*\t$NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp $\t*/\n\n/**\n * \\file\n * Copyright (c) 1989, 1993\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Guido van Rossum.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)glob.h\t8.1 (Berkeley) 6/2/93\n */\n\n#ifndef __MONO_METADATA_W32FILE_UNIX_GLOB_H__\n#define\t__MONO_METADATA_W32FILE_UNIX_GLOB_H__\n\n#include <glib.h>\n\nstruct stat;\ntypedef struct {\n\tint gl_pathc;\t\t/* Count of total paths so far. */\n\tint gl_offs;\t\t/* Reserved at beginning of gl_pathv. */\n\tint gl_flags;\t\t/* Copy of flags parameter to glob. */\n\tchar **gl_pathv;\t/* List of paths matching pattern. */\n} mono_w32file_unix_glob_t;\n\n#define W32FILE_UNIX_GLOB_APPEND\t0x0001\t/* Append to output from previous call. */\n#define W32FILE_UNIX_GLOB_UNIQUE\t0x0040\t/* When appending only add items that aren't already in the list */\n#define\tW32FILE_UNIX_GLOB_NOSPACE\t(-1)\t/* Malloc call failed. */\n#define\tW32FILE_UNIX_GLOB_ABORTED\t(-2)\t/* Unignored error. */\n#define\tW32FILE_UNIX_GLOB_NOMATCH\t(-3)\t/* No match and W32FILE_UNIX_GLOB_NOCHECK not set. */\n#define\tW32FILE_UNIX_GLOB_NOSYS\t(-4)\t/* Function not supported. */\n\n#define\tW32FILE_UNIX_GLOB_MAGCHAR\t0x0100\t/* Pattern had globbing characters. */\n#define W32FILE_UNIX_GLOB_LIMIT\t0x2000\t/* Limit pattern match output to ARG_MAX */\n#define W32FILE_UNIX_GLOB_IGNORECASE 0x4000\t/* Ignore case when matching */\n#define W32FILE_UNIX_GLOB_ABEND\tW32FILE_UNIX_GLOB_ABORTED /* backward compatibility */\n\nint\nmono_w32file_unix_glob (GDir *dir, const char *, int, mono_w32file_unix_glob_t *);\n\nvoid\nmono_w32file_unix_globfree (mono_w32file_unix_glob_t *);\n\n#endif /* !__MONO_METADATA_W32FILE_UNIX_GLOB_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32file-win32-internals.h",
    "content": "/**\n * \\file\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef _MONO_METADATA_W32FILE_WIN32_INTERNALS_H_\n#define _MONO_METADATA_W32FILE_WIN32_INTERNALS_H_\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n#include \"mono/metadata/w32file.h\"\n#include \"mono/metadata/w32file-internals.h\"\n#endif /* HOST_WIN32 */\n#endif /* _MONO_METADATA_W32FILE_WIN32_INTERNALS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32file.h",
    "content": "/**\n * \\file\n * File IO internal calls\n *\n * Authors:\n *\tDick Porter (dick@ximian.com)\n *\tDan Lewis (dihlewis@yahoo.co.uk)\n *\n * (C) 2001 Ximian, Inc.\n * Copyright 2012 Xamarin Inc (http://www.xamarin.com)\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef _MONO_METADATA_W32FILE_H_\n#define _MONO_METADATA_W32FILE_H_\n\n#include <config.h>\n#include <glib.h>\n\n#include <mono/metadata/object-internals.h>\n#include <mono/utils/mono-compiler.h>\n#include <mono/metadata/icalls.h>\n\n/* This is a copy of System.IO.FileAccess */\ntypedef enum {\n\tFileAccess_Read=0x01,\n\tFileAccess_Write=0x02,\n\tFileAccess_ReadWrite=FileAccess_Read|FileAccess_Write\n} MonoFileAccess;\n\n/* This is a copy of System.IO.FileMode */\ntypedef enum {\n\tFileMode_CreateNew=1,\n\tFileMode_Create=2,\n\tFileMode_Open=3,\n\tFileMode_OpenOrCreate=4,\n\tFileMode_Truncate=5,\n\tFileMode_Append=6\n} MonoFileMode;\n\n/* This is a copy of System.IO.FileShare */\ntypedef enum {\n\tFileShare_None=0x0,\n\tFileShare_Read=0x01,\n\tFileShare_Write=0x02,\n\tFileShare_ReadWrite=FileShare_Read|FileShare_Write,\n\tFileShare_Delete=0x04\n} MonoFileShare;\n\n/* This is a copy of System.IO.FileOptions */\ntypedef enum {\n\tFileOptions_None = 0,\n\tFileOptions_Temporary = 1,\t\t// Internal.   See note in System.IO.FileOptions\n\tFileOptions_Encrypted = 0x4000,\n\tFileOptions_DeleteOnClose = 0x4000000,\n\tFileOptions_SequentialScan = 0x8000000,\n\tFileOptions_RandomAccess = 0x10000000,\n\tFileOptions_Asynchronous = 0x40000000,\n\tFileOptions_WriteThrough = 0x80000000\n} MonoFileOptions;\n\n/* This is a copy of System.IO.SeekOrigin */\ntypedef enum {\n\tSeekOrigin_Begin=0,\n\tSeekOrigin_Current=1,\n\tSeekOrigin_End=2\n} MonoSeekOrigin;\n\n/* This is a copy of System.IO.MonoIOStat */\ntypedef struct _MonoIOStat {\n\tgint32 attributes;\n\tgint64 length;\n\tgint64 creation_time;\n\tgint64 last_access_time;\n\tgint64 last_write_time;\n} MonoIOStat;\n\n/* This is a copy of System.IO.FileAttributes */\ntypedef enum {\n\tFileAttributes_ReadOnly=0x00001,\n\tFileAttributes_Hidden=0x00002,\n\tFileAttributes_System=0x00004,\n\tFileAttributes_Directory=0x00010,\n\tFileAttributes_Archive=0x00020,\n\tFileAttributes_Device=0x00040,\n\tFileAttributes_Normal=0x00080,\n\tFileAttributes_Temporary=0x00100,\n\tFileAttributes_SparseFile=0x00200,\n\tFileAttributes_ReparsePoint=0x00400,\n\tFileAttributes_Compressed=0x00800,\n\tFileAttributes_Offline=0x01000,\n\tFileAttributes_NotContentIndexed=0x02000,\n\tFileAttributes_Encrypted=0x04000,\n\tFileAttributes_MonoExecutable= (int) 0x80000000\n} MonoFileAttributes;\n/* This is not used anymore\ntypedef struct _MonoFSAsyncResult {\n\tMonoObject obj;\n\tMonoObject *state;\n\tMonoBoolean completed;\n\tMonoBoolean done;\n\tMonoException *exc;\n\tMonoWaitHandle *wait_handle;\n\tMonoDelegate *async_callback;\n\tMonoBoolean completed_synch;\n\tMonoArray *buffer;\n\tgint offset;\n\tgint count;\n\tgint original_count;\n\tgint bytes_read;\n\tMonoDelegate *real_cb;\n} MonoFSAsyncResult;\n*/\n/* System.IO.MonoIO */\n\n#if !ENABLE_NETCORE\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_CreateDirectory (const gunichar2 *path, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_RemoveDirectory (const gunichar2 *path, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_FindCloseFile (gpointer hnd);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_SetCurrentDirectory (const gunichar2 *path,\n\t\t\t\t\t\tgint32 *error);\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_MoveFile (const gunichar2 *path, const gunichar2 *dest,\n\t\t\t\t     gint32 *error);\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_CopyFile (const gunichar2 *path, const gunichar2 *dest,\n\t\t\t\t     MonoBoolean overwrite, gint32 *error);\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_DeleteFile (const gunichar2 *path, gint32 *error);\n\nICALL_EXPORT\ngint32\nves_icall_System_IO_MonoIO_GetFileAttributes (const gunichar2 *path, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_SetFileAttributes (const gunichar2 *path, gint32 attrs,\n\t\t\t\t\t      gint32 *error);\nICALL_EXPORT\ngint32\nves_icall_System_IO_MonoIO_GetFileType (gpointer handle, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_GetFileStat (const gunichar2 *path, MonoIOStat *stat,\n\t\t\t\t\tgint32 *error);\nICALL_EXPORT\ngpointer\nves_icall_System_IO_MonoIO_Open (const gunichar2 *filename, gint32 mode,\n\t\t\t\t gint32 access_mode, gint32 share, gint32 options,\n\t\t\t\t gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_Cancel (gpointer handle, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_Close (gpointer handle, gint32 *error);\n\nICALL_EXPORT\ngint64\nves_icall_System_IO_MonoIO_Seek (gpointer handle, gint64 offset, gint32 origin,\n\t\t\t\t gint32 *error);\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_Flush (gpointer handle, gint32 *error);\n\nICALL_EXPORT\ngint64\nves_icall_System_IO_MonoIO_GetLength (gpointer handle, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_SetLength (gpointer handle, gint64 length,\n\t\t\t\t      gint32 *error);\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_SetFileTime (gpointer handle, gint64 creation_time,\n\t\t\t\t\tgint64 last_access_time,\n\t\t\t\t\tgint64 last_write_time, gint32 *error);\nICALL_EXPORT\ngpointer\nves_icall_System_IO_MonoIO_get_ConsoleOutput (void);\n\nICALL_EXPORT\ngpointer\nves_icall_System_IO_MonoIO_get_ConsoleInput (void);\n\nICALL_EXPORT\ngpointer\nves_icall_System_IO_MonoIO_get_ConsoleError (void);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_CreatePipe (gpointer *read_handle, gpointer *write_handle, gint32 *error);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_DuplicateHandle (gpointer source_process_handle, gpointer source_handle,\n\t\tgpointer target_process_handle, gpointer *target_handle, gint32 access, gint32 inherit, gint32 options, gint32 *error);\n\nICALL_EXPORT\ngunichar2\nves_icall_System_IO_MonoIO_get_VolumeSeparatorChar (void);\n\nICALL_EXPORT\ngunichar2\nves_icall_System_IO_MonoIO_get_DirectorySeparatorChar (void);\n\nICALL_EXPORT\ngunichar2\nves_icall_System_IO_MonoIO_get_AltDirectorySeparatorChar (void);\n\nICALL_EXPORT\ngunichar2\nves_icall_System_IO_MonoIO_get_PathSeparator (void);\n\nICALL_EXPORT\nvoid ves_icall_System_IO_MonoIO_Lock (gpointer handle, gint64 position,\n\t\t\t\t\t     gint64 length, gint32 *error);\n\nICALL_EXPORT\nvoid ves_icall_System_IO_MonoIO_Unlock (gpointer handle, gint64 position,\n\t\t\t\t\t       gint64 length, gint32 *error);\nICALL_EXPORT\nMonoBoolean\nves_icall_System_IO_MonoIO_ReplaceFile (const gunichar2 *source_file_name, const gunichar2 *destination_file_name,\n\t\t\t\t\tconst gunichar2 *destination_backup_file_name, MonoBoolean ignore_metadata_errors,\n\t\t\t\t\tgint32 *error);\n\nICALL_EXPORT\nvoid\nves_icall_System_IO_MonoIO_DumpHandles (void);\n\n#endif /* !ENABLE_NETCORE */\n\n#if defined (TARGET_IOS) || defined (TARGET_ANDROID)\n\nMONO_API MONO_RT_EXTERNAL_ONLY gint64\nmono_filesize_from_path (MonoString *path);\n\nextern gint64\nmono_filesize_from_fd (int fd);\n\n#endif\n\n#if !defined(HOST_WIN32)\n\n#define GENERIC_READ    0x80000000\n#define GENERIC_WRITE   0x40000000\n#define GENERIC_EXECUTE 0x20000000\n#define GENERIC_ALL     0x10000000\n\n#define FILE_SHARE_NONE   0x00000000\n#define FILE_SHARE_READ   0x00000001\n#define FILE_SHARE_WRITE  0x00000002\n#define FILE_SHARE_DELETE 0x00000004\n\n#define CREATE_NEW        1\n#define CREATE_ALWAYS     2\n#define OPEN_EXISTING     3\n#define OPEN_ALWAYS       4\n#define TRUNCATE_EXISTING 5\n\n#define FILE_ATTRIBUTE_READONLY            0x00000001\n#define FILE_ATTRIBUTE_HIDDEN              0x00000002\n#define FILE_ATTRIBUTE_SYSTEM              0x00000004\n#define FILE_ATTRIBUTE_DIRECTORY           0x00000010\n#define FILE_ATTRIBUTE_ARCHIVE             0x00000020\n#define FILE_ATTRIBUTE_ENCRYPTED           0x00000040\n#define FILE_ATTRIBUTE_NORMAL              0x00000080\n#define FILE_ATTRIBUTE_TEMPORARY           0x00000100\n#define FILE_ATTRIBUTE_SPARSE_FILE         0x00000200\n#define FILE_ATTRIBUTE_REPARSE_POINT       0x00000400\n#define FILE_ATTRIBUTE_COMPRESSED          0x00000800\n#define FILE_ATTRIBUTE_OFFLINE             0x00001000\n#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000\n#define FILE_FLAG_OPEN_NO_RECALL           0x00100000\n#define FILE_FLAG_OPEN_REPARSE_POINT       0x00200000\n#define FILE_FLAG_POSIX_SEMANTICS          0x01000000\n#define FILE_FLAG_BACKUP_SEMANTICS         0x02000000\n#define FILE_FLAG_DELETE_ON_CLOSE          0x04000000\n#define FILE_FLAG_SEQUENTIAL_SCAN          0x08000000\n#define FILE_FLAG_RANDOM_ACCESS            0x10000000\n#define FILE_FLAG_NO_BUFFERING             0x20000000\n#define FILE_FLAG_OVERLAPPED               0x40000000\n#define FILE_FLAG_WRITE_THROUGH            0x80000000\n\n#define REPLACEFILE_WRITE_THROUGH       0x00000001\n#define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002\n\n#define MAX_PATH 260\n\n#define INVALID_SET_FILE_POINTER ((guint32) 0xFFFFFFFF)\n#define INVALID_FILE_SIZE        ((guint32) 0xFFFFFFFF)\n#define INVALID_FILE_ATTRIBUTES  ((guint32) 0xFFFFFFFF)\n\n#define FILE_TYPE_UNKNOWN 0x0000\n#define FILE_TYPE_DISK    0x0001\n#define FILE_TYPE_CHAR    0x0002\n#define FILE_TYPE_PIPE    0x0003\n#define FILE_TYPE_REMOTE  0x8000\n\n#define FILE_BEGIN   0\n#define FILE_CURRENT 1\n#define FILE_END     2\n\n#define DRIVE_UNKNOWN     0\n#define DRIVE_NO_ROOT_DIR 1\n#define DRIVE_REMOVABLE   2\n#define DRIVE_FIXED       3\n#define DRIVE_REMOTE      4\n#define DRIVE_CDROM       5\n#define DRIVE_RAMDISK     6\n\ntypedef struct {\n\tguint16 wYear;\n\tguint16 wMonth;\n\tguint16 wDayOfWeek;\n\tguint16 wDay;\n\tguint16 wHour;\n\tguint16 wMinute;\n\tguint16 wSecond;\n\tguint16 wMilliseconds;\n} SYSTEMTIME;\n\ntypedef struct {\n#if G_BYTE_ORDER == G_BIG_ENDIAN\n\tguint32 dwHighDateTime;\n\tguint32 dwLowDateTime;\n#else\n\tguint32 dwLowDateTime;\n\tguint32 dwHighDateTime;\n#endif\n} FILETIME;\n\ntypedef struct {\n\tguint32 dwFileAttributes;\n\tFILETIME ftCreationTime;\n\tFILETIME ftLastAccessTime;\n\tFILETIME ftLastWriteTime;\n\tguint32 nFileSizeHigh;\n\tguint32 nFileSizeLow;\n\tguint32 dwReserved0;\n\tguint32 dwReserved1;\n\tgunichar2 cFileName [MAX_PATH];\n\tgunichar2 cAlternateFileName [14];\n} WIN32_FIND_DATA;\n\n#endif /* !defined(HOST_WIN32) */\n\nvoid\nmono_w32file_init (void);\n\nvoid\nmono_w32file_cleanup (void);\n\ngpointer\nmono_w32file_create(const gunichar2 *name, guint32 fileaccess, guint32 sharemode, guint32 createmode, guint32 attrs);\n\ngboolean\nmono_w32file_cancel (gpointer handle);\n\ngboolean\nmono_w32file_close (gpointer handle);\n\ngboolean\nmono_w32file_delete (const gunichar2 *name);\n\ngboolean\nmono_w32file_read (gpointer handle, gpointer buffer, guint32 numbytes, guint32 *bytesread, gint32 *win32error);\n\ngboolean\nmono_w32file_write (gpointer handle, gconstpointer buffer, guint32 numbytes, guint32 *byteswritten, gint32 *win32error);\n\ngboolean\nmono_w32file_flush (gpointer handle);\n\ngboolean\nmono_w32file_truncate (gpointer handle);\n\nguint32\nmono_w32file_seek (gpointer handle, gint32 movedistance, gint32 *highmovedistance, guint32 method);\n\ngboolean\nmono_w32file_move (const gunichar2 *path, const gunichar2 *dest, gint32 *error);\n\ngboolean\nmono_w32file_copy (const gunichar2 *path, const gunichar2 *dest, gboolean overwrite, gint32 *error);\n\ngboolean\nmono_w32file_lock (gpointer handle, gint64 position, gint64 length, gint32 *error);\n\ngboolean\nmono_w32file_replace (const gunichar2 *destination_file_name, const gunichar2 *source_file_name, const gunichar2 *destination_backup_file_name, guint32 flags, gint32 *error);\n\ngboolean\nmono_w32file_unlock (gpointer handle, gint64 position, gint64 length, gint32 *error);\n\ngpointer\nmono_w32file_get_console_output (void);\n\ngpointer\nmono_w32file_get_console_error (void);\n\ngpointer\nmono_w32file_get_console_input (void);\n\ngint64\nmono_w32file_get_file_size (gpointer handle, gint32 *error);\n\ngint\nmono_w32file_get_type (gpointer handle);\n\ngboolean\nmono_w32file_set_times (gpointer handle, const FILETIME *create_time, const FILETIME *access_time, const FILETIME *write_time);\n\ngboolean\nmono_w32file_filetime_to_systemtime (const FILETIME *file_time, SYSTEMTIME *system_time);\n\ngpointer\nmono_w32file_find_first (const gunichar2 *pattern, WIN32_FIND_DATA *find_data);\n\ngboolean\nmono_w32file_find_next (gpointer handle, WIN32_FIND_DATA *find_data);\n\ngboolean\nmono_w32file_find_close (gpointer handle);\n\ngboolean\nmono_w32file_create_directory (const gunichar2 *name);\n\ngboolean\nmono_w32file_remove_directory (const gunichar2 *name);\n\nguint32\nmono_w32file_get_attributes (const gunichar2 *name);\n\ngboolean\nmono_w32file_get_attributes_ex (const gunichar2 *name, MonoIOStat *stat);\n\ngboolean\nmono_w32file_set_attributes (const gunichar2 *name, guint32 attrs);\n\nguint32\nmono_w32file_get_cwd (guint32 length, gunichar2 *buffer);\n\ngboolean\nmono_w32file_set_cwd (const gunichar2 *path);\n\ngboolean\nmono_w32file_create_pipe (gpointer *readpipe, gpointer *writepipe, guint32 size);\n\ngint32\nmono_w32file_get_logical_drive (guint32 len, gunichar2 *buf);\n\n#ifndef PLATFORM_NO_DRIVEINFO\ngboolean\nmono_w32file_get_disk_free_space (const gunichar2 *path_name, guint64 *free_bytes_avail, guint64 *total_number_of_bytes, guint64 *total_number_of_free_bytes);\n#endif // PLATFORM_NO_DRIVEINFO\n\ngboolean\nmono_w32file_get_file_system_type (const gunichar2 *path, gunichar2 *fsbuffer, gint fsbuffersize);\n\n#endif /* _MONO_METADATA_W32FILE_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32handle-namespace.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32HANDLE_NAMESPACE_H_\n#define _MONO_METADATA_W32HANDLE_NAMESPACE_H_\n\n#include <config.h>\n#include <glib.h>\n\n#include \"mono/metadata/w32handle.h\"\n\n#define MONO_W32HANDLE_NAMESPACE_MAX_PATH 260\n\ntypedef struct {\n\tgchar name [MONO_W32HANDLE_NAMESPACE_MAX_PATH + 1];\n} MonoW32HandleNamespace;\n\nvoid\nmono_w32handle_namespace_init (void);\n\nvoid\nmono_w32handle_namespace_lock (void);\n\nvoid\nmono_w32handle_namespace_unlock (void);\n\ngpointer\nmono_w32handle_namespace_search_handle (MonoW32Type type, const gchar *name);\n\n#endif /* _MONO_METADATA_W32HANDLE_NAMESPACE_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32handle.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32HANDLE_H_\n#define _MONO_METADATA_W32HANDLE_H_\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HOST_WIN32\n#include <windows.h>\n#else\n#define INVALID_HANDLE_VALUE ((gpointer)-1)\n#endif\n\n#include \"mono/utils/mono-coop-mutex.h\"\n#include \"mono/utils/mono-error.h\"\n\n#define MONO_W32HANDLE_MAXIMUM_WAIT_OBJECTS 64\n#define MONO_INFINITE_WAIT ((guint32) 0xFFFFFFFF)\n\ntypedef enum {\n\tMONO_W32TYPE_UNUSED = 0,\n\tMONO_W32TYPE_SEM,\n\tMONO_W32TYPE_MUTEX,\n\tMONO_W32TYPE_EVENT,\n\tMONO_W32TYPE_PROCESS,\n\tMONO_W32TYPE_NAMEDMUTEX,\n\tMONO_W32TYPE_NAMEDSEM,\n\tMONO_W32TYPE_NAMEDEVENT,\n\tMONO_W32TYPE_COUNT\n} MonoW32Type;\n\ntypedef struct {\n\tMonoW32Type type;\n\tguint ref;\n\tgboolean signalled;\n\tgboolean in_use;\n\tMonoCoopMutex signal_mutex;\n\tMonoCoopCond signal_cond;\n\tgpointer specific;\n} MonoW32Handle;\n\ntypedef enum {\n\tMONO_W32HANDLE_WAIT_RET_SUCCESS_0   =  0,\n\tMONO_W32HANDLE_WAIT_RET_ABANDONED_0 =  MONO_W32HANDLE_WAIT_RET_SUCCESS_0 + MONO_W32HANDLE_MAXIMUM_WAIT_OBJECTS,\n\tMONO_W32HANDLE_WAIT_RET_ALERTED     = -1,\n\tMONO_W32HANDLE_WAIT_RET_TIMEOUT     = -2,\n\tMONO_W32HANDLE_WAIT_RET_FAILED      = -3,\n\tMONO_W32HANDLE_WAIT_RET_TOO_MANY_POSTS = -4,\n\tMONO_W32HANDLE_WAIT_RET_NOT_OWNED_BY_CALLER = -5\n} MonoW32HandleWaitRet;\n\ntypedef struct \n{\n\tvoid (*close)(gpointer data);\n\n\t/* mono_w32handle_signal_and_wait */\n\tgint32 (*signal)(MonoW32Handle *handle_data);\n\n\t/* Called by mono_w32handle_wait_one and mono_w32handle_wait_multiple,\n\t * with the handle locked (shared handles aren't locked.)\n\t * Returns TRUE if ownership was established, false otherwise.\n\t * If TRUE, *abandoned contains a status code such as\n\t * WAIT_OBJECT_0 or WAIT_ABANDONED_0.\n\t */\n\tgboolean (*own_handle)(MonoW32Handle *handle_data, gboolean *abandoned);\n\n\t/* Called by mono_w32handle_wait_one and mono_w32handle_wait_multiple, if the\n\t * handle in question is \"ownable\" (ie mutexes), to see if the current\n\t * thread already owns this handle\n\t */\n\tgboolean (*is_owned)(MonoW32Handle *handle_data);\n\n\t/* Called by mono_w32handle_wait_one and mono_w32handle_wait_multiple,\n\t * if the handle in question needs a special wait function\n\t * instead of using the normal handle signal mechanism.\n\t * Returns the mono_w32handle_wait_one return code.\n\t */\n\tMonoW32HandleWaitRet (*special_wait)(MonoW32Handle *handle_data, guint32 timeout, gboolean *alerted);\n\n\t/* Called by mono_w32handle_wait_one and mono_w32handle_wait_multiple,\n\t * if the handle in question needs some preprocessing before the\n\t * signal wait.\n\t */\n\tvoid (*prewait)(MonoW32Handle *handle_data);\n\n\t/* Called when dumping the handles */\n\tvoid (*details)(MonoW32Handle *handle_data);\n\n\t/* Called to get the name of the handle type */\n\tconst char* (*type_name) (void);\n\n\t/* Called to get the size of the handle type */\n\tgsize (*typesize) (void);\n} MonoW32HandleOps;\n\ntypedef enum {\n\tMONO_W32HANDLE_CAP_WAIT         = 0x01,\n\tMONO_W32HANDLE_CAP_SIGNAL       = 0x02,\n\tMONO_W32HANDLE_CAP_OWN          = 0x04,\n\tMONO_W32HANDLE_CAP_SPECIAL_WAIT = 0x08,\n} MonoW32HandleCapability;\n\nvoid\nmono_w32handle_init (void);\n\nvoid\nmono_w32handle_cleanup (void);\n\nvoid\nmono_w32handle_register_ops (MonoW32Type type, const MonoW32HandleOps *ops);\n\ngpointer\nmono_w32handle_new (MonoW32Type type, gpointer handle_specific);\n\ngpointer\nmono_w32handle_duplicate (MonoW32Handle *handle_data);\n\ngboolean\nmono_w32handle_close (gpointer handle);\n\nconst gchar*\nmono_w32handle_get_typename (MonoW32Type type);\n\ngboolean\nmono_w32handle_lookup_and_ref (gpointer handle, MonoW32Handle **handle_data);\n\nvoid\nmono_w32handle_unref (MonoW32Handle *handle_data);\n\nvoid\nmono_w32handle_foreach (gboolean (*on_each)(MonoW32Handle *handle_data, gpointer user_data), gpointer user_data);\n\nvoid\nmono_w32handle_dump (void);\n\nvoid\nmono_w32handle_register_capabilities (MonoW32Type type, MonoW32HandleCapability caps);\n\nvoid\nmono_w32handle_set_signal_state (MonoW32Handle *handle_data, gboolean state, gboolean broadcast);\n\ngboolean\nmono_w32handle_issignalled (MonoW32Handle *handle_data);\n\nvoid\nmono_w32handle_lock (MonoW32Handle *handle_data);\n\ngboolean\nmono_w32handle_trylock (MonoW32Handle *handle_data);\n\nvoid\nmono_w32handle_unlock (MonoW32Handle *handle_data);\n\nMonoW32HandleWaitRet\nmono_w32handle_wait_one (gpointer handle, guint32 timeout, gboolean alertable);\n\nMonoW32HandleWaitRet\nmono_w32handle_wait_multiple (gpointer *handles, gsize nhandles, gboolean waitall, guint32 timeout, gboolean alertable, MonoError *error);\n\nMonoW32HandleWaitRet\nmono_w32handle_signal_and_wait (gpointer signal_handle, gpointer wait_handle, guint32 timeout, gboolean alertable);\n\n#ifdef HOST_WIN32\nstatic inline MonoW32HandleWaitRet\nmono_w32handle_convert_wait_ret (guint32 res, guint32 numobjects)\n{\n\tif (res >= WAIT_OBJECT_0 && res <= WAIT_OBJECT_0 + numobjects - 1)\n\t\treturn (MonoW32HandleWaitRet)(MONO_W32HANDLE_WAIT_RET_SUCCESS_0 + (res - WAIT_OBJECT_0));\n\telse if (res >= WAIT_ABANDONED_0 && res <= WAIT_ABANDONED_0 + numobjects - 1)\n\t\treturn (MonoW32HandleWaitRet)(MONO_W32HANDLE_WAIT_RET_ABANDONED_0 + (res - WAIT_ABANDONED_0));\n\telse if (res == WAIT_IO_COMPLETION)\n\t\treturn MONO_W32HANDLE_WAIT_RET_ALERTED;\n\telse if (res == WAIT_TIMEOUT)\n\t\treturn MONO_W32HANDLE_WAIT_RET_TIMEOUT;\n\telse if (res == WAIT_FAILED)\n\t\treturn MONO_W32HANDLE_WAIT_RET_FAILED;\n\telse\n\t\tg_error (\"%s: unknown res value %d\", __func__, res);\n}\n#endif\n\n\n#endif /* _MONO_METADATA_W32HANDLE_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32mutex.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32MUTEX_H_\n#define _MONO_METADATA_W32MUTEX_H_\n\n#include <config.h>\n#include <glib.h>\n\n#include \"object.h\"\n#include \"object-internals.h\"\n#include \"w32handle-namespace.h\"\n#include <mono/metadata/icalls.h>\n\nvoid\nmono_w32mutex_init (void);\n\nICALL_EXPORT\nMonoBoolean\nves_icall_System_Threading_Mutex_ReleaseMutex_internal (gpointer handle);\n\ntypedef struct MonoW32HandleNamedMutex MonoW32HandleNamedMutex;\n\nMonoW32HandleNamespace*\nmono_w32mutex_get_namespace (MonoW32HandleNamedMutex *mutex);\n\n#ifndef HOST_WIN32\nvoid\nmono_w32mutex_abandon (MonoInternalThread *internal);\n#endif\n\n#endif /* _MONO_METADATA_W32MUTEX_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32process-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32PROCESS_INTERNALS_H_\n#define _MONO_METADATA_W32PROCESS_INTERNALS_H_\n\n#include <config.h>\n#include <glib.h>\n\n#ifndef HOST_WIN32\n\ntypedef struct {\n\tguint32 dwSignature; /* Should contain 0xFEEF04BD on le machines */\n\tguint32 dwStrucVersion;\n\tguint32 dwFileVersionMS;\n\tguint32 dwFileVersionLS;\n\tguint32 dwProductVersionMS;\n\tguint32 dwProductVersionLS;\n\tguint32 dwFileFlagsMask;\n\tguint32 dwFileFlags;\n\tguint32 dwFileOS;\n\tguint32 dwFileType;\n\tguint32 dwFileSubtype;\n\tguint32 dwFileDateMS;\n\tguint32 dwFileDateLS;\n} VS_FIXEDFILEINFO;\n\ntypedef struct {\n\tgpointer lpBaseOfDll;\n\tguint32 SizeOfImage;\n\tgpointer EntryPoint;\n} MODULEINFO;\n\n#define VS_FF_DEBUG\t\t0x0001\n#define VS_FF_PRERELEASE\t0x0002\n#define VS_FF_PATCHED\t\t0x0004\n#define VS_FF_PRIVATEBUILD\t0x0008\n#define VS_FF_INFOINFERRED\t0x0010\n#define VS_FF_SPECIALBUILD\t0x0020\n\nguint32\nmono_w32process_get_pid (gpointer handle);\n\ngboolean\nmono_w32process_try_get_modules (gpointer process, gpointer *modules, guint32 size, guint32 *needed);\n\ngboolean\nmono_w32process_module_get_name (gpointer process, gpointer module, gunichar2 **str, guint32 *len);\n\ngboolean\nmono_w32process_module_get_filename (gpointer process, gpointer module, gunichar2 **str, guint32 *len);\n\ngboolean\nmono_w32process_module_get_information (gpointer process, gpointer module, MODULEINFO *modinfo, guint32 size);\n\ngboolean\nmono_w32process_get_fileversion_info (const gunichar2 *filename, gpointer *data);\n\ngboolean\nmono_w32process_ver_query_value (gconstpointer datablock, const gunichar2 *subblock, gpointer *buffer, guint32 *len);\n\nguint32\nmono_w32process_ver_language_name (guint32 lang, gunichar2 *lang_out, guint32 lang_len);\n\n#endif /* HOST_WIN32 */\n\n#endif /* _MONO_METADATA_W32PROCESS_INTERNALS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32process-unix-internals.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32PROCESS_UNIX_INTERNALS_H_\n#define _MONO_METADATA_W32PROCESS_UNIX_INTERNALS_H_\n\n#include <config.h>\n#include <glib.h>\n\n/*\n * FOR EXCLUSIVE USE BY w32process-unix.c\n */\n\n#if defined(HOST_DARWIN)\n#define USE_OSX_BACKEND\n#elif (defined(__OpenBSD__) || defined(__FreeBSD__)) && defined(HAVE_LINK_H)\n#define USE_BSD_BACKEND\n#elif defined(__HAIKU__)\n#define USE_HAIKU_BACKEND\n/* Define header for team_info */\n#include <os/kernel/OS.h>\n#else\n#define USE_DEFAULT_BACKEND\n#endif\n\ntypedef struct {\n\tgpointer address_start;\n\tgpointer address_end;\n\tgchar *perms;\n\tgpointer address_offset;\n\tguint64 device;\n\tguint64 inode;\n\tgchar *filename;\n} MonoW32ProcessModule;\n\ngchar*\nmono_w32process_get_name (pid_t pid);\n\nGSList*\nmono_w32process_get_modules (pid_t pid);\n\nvoid\nmono_w32process_platform_init_once (void);\n\nstatic void G_GNUC_UNUSED\nmono_w32process_module_free (MonoW32ProcessModule *module)\n{\n\tg_free (module->perms);\n\tg_free (module->filename);\n\tg_free (module);\n}\n\n/*\n * Used to look through the GSList* returned by mono_w32process_get_modules\n */\nstatic gint G_GNUC_UNUSED\nmono_w32process_module_equals (gconstpointer a, gconstpointer b)\n{\n\tMonoW32ProcessModule *want = (MonoW32ProcessModule *)a;\n\tMonoW32ProcessModule *compare = (MonoW32ProcessModule *)b;\n\treturn (want->device == compare->device && want->inode == compare->inode) ? 0 : 1;\n}\n\n#endif /* _MONO_METADATA_W32PROCESS_UNIX_INTERNALS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32process.h",
    "content": "/**\n * \\file\n * System.Diagnostics.Process support\n *\n * Author:\n *\tDick Porter (dick@ximian.com)\n *\n * (C) 2002 Ximian, Inc.\n */\n\n#ifndef _MONO_METADATA_W32PROCESS_H_\n#define _MONO_METADATA_W32PROCESS_H_\n\n#include <config.h>\n#include <glib.h>\n\n#if HAVE_SYS_TYPES_H\n#include <sys/types.h>\n#endif\n\n#include <mono/metadata/object.h>\n#include \"object-internals.h\"\n#include \"marshal.h\"\n\ntypedef enum {\n\tMONO_W32PROCESS_PRIORITY_CLASS_NORMAL       = 0x0020,\n\tMONO_W32PROCESS_PRIORITY_CLASS_IDLE         = 0x0040,\n\tMONO_W32PROCESS_PRIORITY_CLASS_HIGH         = 0x0080,\n\tMONO_W32PROCESS_PRIORITY_CLASS_REALTIME     = 0x0100,\n\tMONO_W32PROCESS_PRIORITY_CLASS_BELOW_NORMAL = 0x4000,\n\tMONO_W32PROCESS_PRIORITY_CLASS_ABOVE_NORMAL = 0x8000,\n} MonoW32ProcessPriorityClass;\n\ntypedef struct \n{\n\tgpointer process_handle;\n\tguint32 pid; /* Contains mono_w32error_get_last () on failure */\n\tMonoArray *env_variables;\n\tMonoString *username;\n\tMonoString *domain;\n\tmono_bstr password; /* BSTR from SecureString in 2.0 profile */\n\tMonoBoolean load_user_profile;\n} MonoW32ProcessInfo;\n\ntypedef struct\n{\n\tMonoObject object;\n\tMonoString *filename;\n\tMonoString *arguments;\n\tMonoString *working_directory;\n\tMonoString *verb;\n\tguint32 window_style;\n\tMonoBoolean error_dialog;\n\tgpointer error_dialog_parent_handle;\n\tMonoBoolean use_shell_execute;\n\n\tMonoString *unused_username;\n\tMonoString *unused_domain;\n\tMonoObject *unused_password; /* SecureString in 2.0 profile, dummy in 1.x */\n\tMonoString *unused_password_in_clear_text;\n\tMonoBoolean unused_load_user_profile;\n\tMonoBoolean unused_redirect_standard_input;\n\tMonoBoolean unused_redirect_standard_output;\n\tMonoBoolean unused_redirect_standard_error;\n\tMonoObject *unused_encoding_stdout;\n\tMonoObject *unused_encoding_stderr;\n\n\tMonoBoolean create_no_window;\n\n\tMonoObject *unused_weak_parent_process;\n\tMonoObject *unused_envVars;\n\n} MonoW32ProcessStartInfo;\n\nTYPED_HANDLE_DECL (MonoW32ProcessStartInfo);\n\ntypedef uint32_t gchandle_t; // FIXME use this more, make it typesafe.\n\ntypedef struct _MonoCreateProcessCoop {\n\tgunichar2 *filename;\n\tgunichar2 *arguments;\n\tgunichar2 *working_directory;\n\tgunichar2 *verb;\n\tgunichar2 *username;\n\tgunichar2 *domain;\n\tstruct {\n\t\tMonoStringHandle filename;\n\t\tMonoStringHandle arguments;\n\t\tMonoStringHandle working_directory;\n\t\tMonoStringHandle verb;\n\t\tMonoStringHandle username;\n\t\tMonoStringHandle domain;\n\t} coophandle;\n\tstruct {\n\t\tgchandle_t filename;\n\t\tgchandle_t arguments;\n\t\tgchandle_t working_directory;\n\t\tgchandle_t verb;\n\t\tgchandle_t username;\n\t\tgchandle_t domain;\n\t} gchandle;\n\tstruct {\n\t\tgsize filename;\n\t\tgsize arguments;\n\t\tgsize working_directory;\n\t\tgsize verb;\n\t\tgsize username;\n\t\tgsize domain;\n\t} length;\n} MonoCreateProcessCoop;\n\nvoid\nmono_createprocess_coop_init (MonoCreateProcessCoop *coop, MonoW32ProcessStartInfoHandle proc_start_info, MonoW32ProcessInfo *process_info);\n\nvoid\nmono_createprocess_coop_cleanup (MonoCreateProcessCoop *coop);\n\nvoid\nmono_w32process_init (void);\n\nvoid\nmono_w32process_cleanup (void);\n\nvoid\nmono_w32process_signal_finished (void);\n\n#ifndef HOST_WIN32\n\nvoid\nmono_w32process_set_cli_launcher (gchar *path);\n\ngchar*\nmono_w32process_get_path (pid_t pid);\n\n#endif\n#endif /* _MONO_METADATA_W32PROCESS_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32semaphore.h",
    "content": "/**\n * \\file\n */\n\n#ifndef _MONO_METADATA_W32SEMAPHORE_H_\n#define _MONO_METADATA_W32SEMAPHORE_H_\n\n#include <config.h>\n#include <glib.h>\n#include \"object.h\"\n#include \"w32handle-namespace.h\"\n#include <mono/metadata/icalls.h>\n\nvoid\nmono_w32semaphore_init (void);\n\ntypedef struct MonoW32HandleNamedSemaphore MonoW32HandleNamedSemaphore;\n\nMonoW32HandleNamespace*\nmono_w32semaphore_get_namespace (MonoW32HandleNamedSemaphore *semaphore);\n\n#endif /* _MONO_METADATA_W32SEMAPHORE_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32socket-internals.h",
    "content": "/**\n * \\file\n *\n * Copyright 2016 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n#ifndef __MONO_METADATA_W32SOCKET_INTERNALS_H__\n#define __MONO_METADATA_W32SOCKET_INTERNALS_H__\n\n#include <config.h>\n#include <glib.h>\n\n#ifdef HAVE_SYS_TIME_H\n#include <sys/time.h>\n#endif\n#ifdef HAVE_SYS_SOCKET_H\n#include <sys/socket.h>\n#endif\n\n#include <mono/utils/w32api.h>\n\n#ifndef HAVE_SOCKLEN_T\n#define socklen_t int\n#endif\n\n#ifndef HOST_WIN32\n\n#define TF_DISCONNECT 0x01\n#define TF_REUSE_SOCKET 0x02\n\ntypedef struct {\n\tgpointer Head;\n\tguint32 HeadLength;\n\tgpointer Tail;\n\tguint32 TailLength;\n} TRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;\n\ntypedef struct {\n\tguint32 Data1;\n\tguint16 Data2;\n\tguint16 Data3;\n\tguint8 Data4[8];\n} GUID;\n\ntypedef struct {\n\tguint32 Internal;\n\tguint32 InternalHigh;\n\tguint32 Offset;\n\tguint32 OffsetHigh;\n\tgpointer hEvent;\n\tgpointer handle1;\n\tgpointer handle2;\n} OVERLAPPED;\n\n#endif\n\nvoid\nmono_w32socket_initialize (void);\n\nvoid\nmono_w32socket_cleanup (void);\n\nSOCKET\nmono_w32socket_accept (SOCKET s, struct sockaddr *addr, socklen_t *addrlen, gboolean blocking);\n\nint\nmono_w32socket_connect (SOCKET s, const struct sockaddr *name, int namelen, gboolean blocking);\n\nint\nmono_w32socket_recv (SOCKET s, char *buf, int len, int flags, gboolean blocking);\n\nint\nmono_w32socket_recvfrom (SOCKET s, char *buf, int len, int flags, struct sockaddr *from, socklen_t *fromlen, gboolean blocking);\n\nint\nmono_w32socket_recvbuffers (SOCKET s, LPWSABUF lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 *lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking);\n\nint\nmono_w32socket_send (SOCKET s, void *buf, int len, int flags, gboolean blocking);\n\nint\nmono_w32socket_sendto (SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen, gboolean blocking);\n\nint\nmono_w32socket_sendbuffers (SOCKET s, LPWSABUF lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking);\n\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT)\n\nBOOL\nmono_w32socket_transmit_file (SOCKET hSocket, gpointer hFile, LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, guint32 dwReserved, gboolean blocking);\n\n#endif\n\n#ifndef HOST_WIN32\n\nSOCKET\nmono_w32socket_socket (int domain, int type, int protocol);\n\ngint\nmono_w32socket_bind (SOCKET sock, struct sockaddr *addr, socklen_t addrlen);\n\ngint\nmono_w32socket_getpeername (SOCKET sock, struct sockaddr *name, socklen_t *namelen);\n\ngint\nmono_w32socket_getsockname (SOCKET sock, struct sockaddr *name, socklen_t *namelen);\n\ngint\nmono_w32socket_getsockopt (SOCKET sock, gint level, gint optname, gpointer optval, socklen_t *optlen);\n\ngint\nmono_w32socket_setsockopt (SOCKET sock, gint level, gint optname, gconstpointer optval, socklen_t optlen);\n\ngint\nmono_w32socket_listen (SOCKET sock, gint backlog);\n\ngint\nmono_w32socket_shutdown (SOCKET sock, gint how);\n\ngint\nmono_w32socket_ioctl (SOCKET sock, gint32 command, gchar *input, gint inputlen, gchar *output, gint outputlen, glong *written);\n\ngboolean\nmono_w32socket_close (SOCKET sock);\n\n#endif /* HOST_WIN32 */\n\ngint\nmono_w32socket_disconnect (SOCKET sock, gboolean reuse);\n\ngint\nmono_w32socket_set_blocking (SOCKET socket, gboolean blocking);\n\ngint\nmono_w32socket_get_available (SOCKET socket, guint64 *amount);\n\nvoid\nmono_w32socket_set_last_error (gint32 error);\n\ngint32\nmono_w32socket_get_last_error (void);\n\ngint32\nmono_w32socket_convert_error (gint error);\n\ngboolean\nmono_w32socket_duplicate (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle);\n\n#endif // __MONO_METADATA_W32SOCKET_INTERNALS_H__\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32socket.h",
    "content": "/**\n * \\file\n * System.Net.Sockets.Socket support\n *\n * Author:\n *\tDick Porter (dick@ximian.com)\n *\n * (C) 2001 Ximian, Inc.\n */\n\n#ifndef _MONO_METADATA_W32SOCKET_H_\n#define _MONO_METADATA_W32SOCKET_H_\n\n#include <config.h>\n#include <glib.h>\n#include <mono/metadata/object-internals.h>\n#include <mono/metadata/icalls.h>\n\n#ifndef HOST_WIN32\n#define INVALID_SOCKET ((SOCKET)(guint32)(~0))\n#define SOCKET_ERROR (-1)\n\ntypedef gint SOCKET;\n\ntypedef struct {\n\tguint32 len;\n\tgpointer buf;\n} WSABUF, *LPWSABUF;\n#endif\n\n/* This is a copy of System.Net.Sockets.SocketType */\ntypedef enum {\n\tSocketType_Stream=1,\n\tSocketType_Dgram=2,\n\tSocketType_Raw=3,\n\tSocketType_Rdm=4,\n\tSocketType_Seqpacket=5,\n\tSocketType_Unknown=-1\n} MonoSocketType;\n\n/* This is a copy of System.Net.Sockets.AddressFamily */\ntypedef enum {\n\tAddressFamily_Unknown=-1,\n\tAddressFamily_Unspecified=0,\n\tAddressFamily_Unix=1,\n\tAddressFamily_InterNetwork=2,\n\tAddressFamily_ImpLink=3,\n\tAddressFamily_Pup=4,\n\tAddressFamily_Chaos=5,\n\tAddressFamily_NS=6,\n\tAddressFamily_Ipx=6,\n\tAddressFamily_Iso=7,\n\tAddressFamily_Osi=7,\n\tAddressFamily_Ecma=8,\n\tAddressFamily_DataKit=9,\n\tAddressFamily_Ccitt=10,\n\tAddressFamily_Sna=11,\n\tAddressFamily_DecNet=12,\n\tAddressFamily_DataLink=13,\n\tAddressFamily_Lat=14,\n\tAddressFamily_HyperChannel=15,\n\tAddressFamily_AppleTalk=16,\n\tAddressFamily_NetBios=17,\n\tAddressFamily_VoiceView=18,\n\tAddressFamily_FireFox=19,\n\tAddressFamily_Banyan=21,\n\tAddressFamily_Atm=22,\n\tAddressFamily_InterNetworkV6=23,\n\tAddressFamily_Cluster=24,\n\tAddressFamily_Ieee12844=25,\n\tAddressFamily_Irda=26,\n\tAddressFamily_NetworkDesigners=28\n} MonoAddressFamily;\n\n/* This is a copy of System.Net.Sockets.ProtocolType */\ntypedef enum {\n\tProtocolType_IP=0,\n\tProtocolType_Icmp=1,\n\tProtocolType_Igmp=2,\n\tProtocolType_Ggp=3,\n\tProtocolType_Tcp=6,\n\tProtocolType_Pup=12,\n\tProtocolType_Udp=17,\n\tProtocolType_Idp=22,\n\tProtocolType_IPv6=41,\n\tProtocolType_ND=77,\n\tProtocolType_Raw=255,\n\tProtocolType_Unspecified=0,\n\tProtocolType_Ipx=1000,\n\tProtocolType_Spx=1256,\n\tProtocolType_SpxII=1257,\n\tProtocolType_Unknown=-1\n} MonoProtocolType;\n\n/* This is a copy of System.Net.Sockets.SocketOptionLevel */\ntypedef enum {\n\tSocketOptionLevel_Socket=65535,\n\tSocketOptionLevel_IP=0,\n\tSocketOptionLevel_IPv6=41,\n\tSocketOptionLevel_Tcp=6,\n\tSocketOptionLevel_Udp=17\n} MonoSocketOptionLevel;\n\n/* This is a copy of System.Net.Sockets.SocketOptionName */\ntypedef enum {\n\tSocketOptionName_Debug=1,\n\tSocketOptionName_AcceptConnection=2,\n\tSocketOptionName_ReuseAddress=4,\n\tSocketOptionName_KeepAlive=8,\n\tSocketOptionName_DontRoute=16,\n\tSocketOptionName_IPProtectionLevel = 23,\n\tSocketOptionName_IPv6Only = 27,\n\tSocketOptionName_Broadcast=32,\n\tSocketOptionName_UseLoopback=64,\n\tSocketOptionName_Linger=128,\n\tSocketOptionName_OutOfBandInline=256,\n\tSocketOptionName_DontLinger= -129,\n\tSocketOptionName_ExclusiveAddressUse= -5,\n\tSocketOptionName_SendBuffer= 4097,\n\tSocketOptionName_ReceiveBuffer=4098,\n\tSocketOptionName_SendLowWater=4099,\n\tSocketOptionName_ReceiveLowWater=4100,\n\tSocketOptionName_SendTimeout=4101,\n\tSocketOptionName_ReceiveTimeout=4102,\n\tSocketOptionName_Error=4103,\n\tSocketOptionName_Type=4104,\n\tSocketOptionName_MaxConnections=2147483647,\n\tSocketOptionName_IPOptions=1,\n\tSocketOptionName_HeaderIncluded=2,\n\tSocketOptionName_TypeOfService=3,\n\tSocketOptionName_IpTimeToLive=4,\n\tSocketOptionName_MulticastInterface=9,\n\tSocketOptionName_MulticastTimeToLive=10,\n\tSocketOptionName_MulticastLoopback=11,\n\tSocketOptionName_AddMembership=12,\n\tSocketOptionName_DropMembership=13,\n\tSocketOptionName_DontFragment=14,\n\tSocketOptionName_AddSourceMembership=15,\n\tSocketOptionName_DropSourceMembership=16,\n\tSocketOptionName_BlockSource=17,\n\tSocketOptionName_UnblockSource=18,\n\tSocketOptionName_PacketInformation=19,\n\tSocketOptionName_NoDelay=1,\n\tSocketOptionName_BsdUrgent=2,\n\tSocketOptionName_Expedited=2,\n\tSocketOptionName_NoChecksum=1,\n\tSocketOptionName_ChecksumCoverage=20,\n\tSocketOptionName_HopLimit=21,\n\n\t/* This is Mono-specific, keep it in sync with\n\t * Mono.Posix/PeerCred.cs\n\t */\n\tSocketOptionName_PeerCred=10001\n} MonoSocketOptionName;\n\n/* This is a copy of System.Net.Sockets.SocketFlags */\ntypedef enum {\n\tSocketFlags_None = 0x0000,\n\tSocketFlags_OutOfBand = 0x0001,\n\tSocketFlags_MaxIOVectorLength = 0x0010,\n\tSocketFlags_Peek = 0x0002,\n\tSocketFlags_DontRoute = 0x0004,\n\tSocketFlags_Partial = 0x8000\n} MonoSocketFlags;\n\ntypedef struct\n{\n\tMonoObject obj;\n\tgint pid;\n\tgint uid;\n\tgint gid;\n} MonoPeerCredData;\n\n/* Safely access Mono.Posix.PeerCredData from native code */\nTYPED_HANDLE_DECL (MonoPeerCredData);\n\nICALL_EXPORT\ngint32\nves_icall_System_Net_Sockets_SocketException_WSAGetLastError_icall (void);\n\nvoid\nmono_network_init(void);\n\nvoid\nmono_network_cleanup(void);\n\n#endif /* _MONO_METADATA_W32SOCKET_H_ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/w32subset.h",
    "content": "/**\n * \\file\n * Define Win32 API subset defaults.\n * Other subsetters can fork this file, or\n * define symbols ahead of it, or after it (with undef).\n *\n * Note that #if of an undefined symbols is defined as if 0,\n * so that an implicit default here.\n *\n * Copyright 2018 Microsoft\n * Licensed under the MIT license. See LICENSE file in the project root for full license information.\n */\n\n#ifndef HAVE_API_SUPPORT_WIN32_GET_COMPUTER_NAME\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_GET_COMPUTER_NAME 1\n#else\n#define HAVE_API_SUPPORT_WIN32_GET_COMPUTER_NAME 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_GET_DRIVE_TYPE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_GET_DRIVE_TYPE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_GET_DRIVE_TYPE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_REPLACE_FILE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_REPLACE_FILE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_REPLACE_FILE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_COPY_FILE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_COPY_FILE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_COPY_FILE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_COPY_FILE2 // not on Windows7\n#if G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_COPY_FILE2 1\n#else\n#define HAVE_API_SUPPORT_WIN32_COPY_FILE2 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_LOCK_FILE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_LOCK_FILE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_LOCK_FILE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_UNLOCK_FILE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_UNLOCK_FILE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_UNLOCK_FILE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_MOVE_FILE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_MOVE_FILE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_MOVE_FILE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_MOVE_FILE_EX\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_MOVE_FILE_EX 1\n#else\n#define HAVE_API_SUPPORT_WIN32_MOVE_FILE_EX 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_GET_STD_HANDLE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_GET_STD_HANDLE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_GET_STD_HANDLE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_GET_FILE_SIZE_EX\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) || G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_GET_FILE_SIZE_EX 1\n#else\n#define HAVE_API_SUPPORT_WIN32_GET_FILE_SIZE_EX 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_GET_LOGICAL_DRIVE_STRINGS\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_GET_LOGICAL_DRIVE_STRINGS 1\n#else\n#define HAVE_API_SUPPORT_WIN32_GET_LOGICAL_DRIVE_STRINGS 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_SH_GET_FOLDER_PATH\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_SH_GET_FOLDER_PATH 1\n#else\n#define HAVE_API_SUPPORT_WIN32_SH_GET_FOLDER_PATH 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_SEND_MESSAGE_TIMEOUT\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_SEND_MESSAGE_TIMEOUT 1\n#else\n#define HAVE_API_SUPPORT_WIN32_SEND_MESSAGE_TIMEOUT 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_WAIT_FOR_INPUT_IDLE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_WAIT_FOR_INPUT_IDLE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_WAIT_FOR_INPUT_IDLE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_SIGNAL_OBJECT_AND_WAIT\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_SIGNAL_OBJECT_AND_WAIT 1\n#else\n#define HAVE_API_SUPPORT_WIN32_SIGNAL_OBJECT_AND_WAIT 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_MSG_WAIT_FOR_MULTIPLE_OBJECTS\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_MSG_WAIT_FOR_MULTIPLE_OBJECTS 1\n#else\n#define HAVE_API_SUPPORT_WIN32_MSG_WAIT_FOR_MULTIPLE_OBJECTS 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_SET_ERROR_MODE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_SET_ERROR_MODE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_SET_ERROR_MODE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_LOAD_LIBRARY\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_LOAD_LIBRARY 1\n#else\n#define HAVE_API_SUPPORT_WIN32_LOAD_LIBRARY 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_LOAD_PACKAGED_LIBRARY\n#if G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_LOAD_PACKAGED_LIBRARY 1\n#else\n#define HAVE_API_SUPPORT_WIN32_LOAD_PACKAGED_LIBRARY 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_GET_MODULE_HANDLE\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_GET_MODULE_HANDLE 1\n#else\n#define HAVE_API_SUPPORT_WIN32_GET_MODULE_HANDLE 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT 1\n#else\n#define HAVE_API_SUPPORT_WIN32_SET_THREAD_CONTEXT 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO 1\n#else\n#define HAVE_API_SUPPORT_WIN32_CANCEL_SYNCHRONOUS_IO 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_OPEN_THREAD\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_OPEN_THREAD 1\n#else\n#define HAVE_API_SUPPORT_WIN32_OPEN_THREAD 0\n#endif\n#endif\n\n#ifndef HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS\n#if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)\n#define HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS 1\n#else\n#define HAVE_API_SUPPORT_WIN32_IS_WOW64_PROCESS 0\n#endif\n#endif\n\n#ifndef HAVE_SET_THREAD_DESCRIPTION\n#define HAVE_SET_THREAD_DESCRIPTION 0\n#endif\n\n#ifndef HAVE_SET_THREAD_NAME\n// https://github.com/microsoft/xbox-live-api/blob/90b38b434d9c13ce4916c116cd28a98b239e38e2/InProgressSamples/Kits/ATGTK/ThreadHelpers.h#L21\n#if defined(_XBOX_ONE) && defined(_TITLE)\n#define HAVE_SET_THREAD_NAME 1\n#else\n#define HAVE_SET_THREAD_NAME 0\n#endif\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/metadata/wrapper-types.h",
    "content": "/**\n * \\file\n * NOTE NOTE NOTE\n * No additional wrapper types should be added.\n * If a new wrapper is asolutely necessary, an existing one needs\n * to be removed first (with all the change that implies).\n */\nWRAPPER(NONE, \"none\")\nWRAPPER(DELEGATE_INVOKE, \"delegate-invoke\")\nWRAPPER(DELEGATE_BEGIN_INVOKE, \"delegate-begin-invoke\")\nWRAPPER(DELEGATE_END_INVOKE, \"delegate-end-invoke\")\nWRAPPER(RUNTIME_INVOKE, \"runtime-invoke\")\nWRAPPER(NATIVE_TO_MANAGED, \"native-to-managed\")\nWRAPPER(MANAGED_TO_NATIVE, \"managed-to-native\")\nWRAPPER(MANAGED_TO_MANAGED, \"managed-to-managed\")\nWRAPPER(REMOTING_INVOKE, \"remoting-invoke\")\nWRAPPER(REMOTING_INVOKE_WITH_CHECK, \"remoting-invoke-with-check\")\nWRAPPER(XDOMAIN_INVOKE, \"xdomain-invoke\")\nWRAPPER(XDOMAIN_DISPATCH, \"xdomain-dispatch\")\nWRAPPER(LDFLD, \"ldfld\")\nWRAPPER(STFLD, \"stfld\")\nWRAPPER(SYNCHRONIZED, \"synchronized\")\nWRAPPER(DYNAMIC_METHOD, \"dynamic-method\")\nWRAPPER(CASTCLASS, \"castclass\")\nWRAPPER(PROXY_ISINST, \"proxy_isinst\")\nWRAPPER(STELEMREF, \"stelemref\")\nWRAPPER(UNBOX, \"unbox\")\nWRAPPER(LDFLDA, \"ldflda\")\nWRAPPER(WRITE_BARRIER, \"write-barrier\")\nWRAPPER(OTHER, \"other\")\nWRAPPER(COMINTEROP_INVOKE, \"cominterop-invoke\")\nWRAPPER(COMINTEROP, \"cominterop\")\nWRAPPER(ALLOC, \"alloc\")\n\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/utils/mono-counters.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_COUNTERS_H__\n#define __MONO_COUNTERS_H__\n\n#include <stdio.h>\n#include <mono/utils/mono-publib.h>\n\nenum {\n\t/* Counter type, bits 0-7. */\n\tMONO_COUNTER_INT,    /* 32 bit int */\n\tMONO_COUNTER_UINT,    /* 32 bit uint */\n\tMONO_COUNTER_WORD,   /* pointer-sized int */\n\tMONO_COUNTER_LONG,   /* 64 bit int */\n\tMONO_COUNTER_ULONG,   /* 64 bit uint */\n\tMONO_COUNTER_DOUBLE,\n\tMONO_COUNTER_STRING, /* char* */\n\tMONO_COUNTER_TIME_INTERVAL, /* 64 bits signed int holding usecs. */\n\tMONO_COUNTER_TYPE_MASK = 0xf,\n\tMONO_COUNTER_CALLBACK = 128, /* ORed with the other values */\n\tMONO_COUNTER_SECTION_MASK = 0x00ffff00,\n\t/* Sections, bits 8-23 (16 bits) */\n\tMONO_COUNTER_JIT      = 1 << 8,\n\tMONO_COUNTER_GC       = 1 << 9,\n\tMONO_COUNTER_METADATA = 1 << 10,\n\tMONO_COUNTER_GENERICS = 1 << 11,\n\tMONO_COUNTER_SECURITY = 1 << 12,\n\tMONO_COUNTER_RUNTIME  = 1 << 13,\n\tMONO_COUNTER_SYSTEM   = 1 << 14,\n\tMONO_COUNTER_PERFCOUNTERS = 1 << 15,\n\tMONO_COUNTER_PROFILER = 1 << 16,\n\tMONO_COUNTER_INTERP   = 1 << 17,\n\tMONO_COUNTER_TIERED   = 1 << 18,\n\tMONO_COUNTER_LAST_SECTION,\n\n\t/* Unit, bits 24-27 (4 bits) */\n\tMONO_COUNTER_UNIT_SHIFT = 24,\n\tMONO_COUNTER_UNIT_MASK = 0xFu << MONO_COUNTER_UNIT_SHIFT,\n\tMONO_COUNTER_RAW        = 0 << 24,  /* Raw value */\n\tMONO_COUNTER_BYTES      = 1 << 24, /* Quantity of bytes. RSS, active heap, etc */\n\tMONO_COUNTER_TIME       = 2 << 24,  /* Time interval in 100ns units. Minor pause, JIT compilation*/\n\tMONO_COUNTER_COUNT      = 3 << 24, /*  Number of things (threads, queued jobs) or Number of events triggered (Major collections, Compiled methods).*/\n\tMONO_COUNTER_PERCENTAGE = 4 << 24, /* [0-1] Fraction Percentage of something. Load average. */\n\n\t/* Monotonicity, bits 28-31 (4 bits) */\n\tMONO_COUNTER_VARIANCE_SHIFT = 28,\n\tMONO_COUNTER_VARIANCE_MASK = 0xFu << MONO_COUNTER_VARIANCE_SHIFT,\n\tMONO_COUNTER_MONOTONIC      = 1 << 28, /* This counter value always increase/decreases over time. Reported by --stat. */\n\tMONO_COUNTER_CONSTANT       = 1 << 29, /* Fixed value. Used by configuration data. */\n\tMONO_COUNTER_VARIABLE       = 1 << 30, /* This counter value can be anything on each sampling. Only interesting when sampling. */\n};\n\ntypedef struct _MonoCounter MonoCounter;\n\nMONO_API void mono_counters_enable (int section_mask);\nMONO_API void mono_counters_init (void);\n\n/* \n * register addr as the address of a counter of type type.\n * It may be a function pointer if MONO_COUNTER_CALLBACK is specified:\n * the function should return the value and take no arguments.\n */\nMONO_API void mono_counters_register (const char* descr, int type, void *addr);\nMONO_API void mono_counters_register_with_size (const char *name, int type, void *addr, int size);\n\ntypedef void (*MonoCounterRegisterCallback) (MonoCounter*);\nMONO_API void mono_counters_on_register (MonoCounterRegisterCallback callback);\n\n/* \n * Create a readable dump of the counters for section_mask sections (ORed section values)\n */\nMONO_API void mono_counters_dump (int section_mask, FILE *outfile);\n\nMONO_API void mono_counters_cleanup (void);\n\ntypedef mono_bool (*CountersEnumCallback) (MonoCounter *counter, void *user_data);\n\nMONO_API void mono_counters_foreach (CountersEnumCallback cb, void *user_data);\n\nMONO_API int mono_counters_sample (MonoCounter *counter, void *buffer, int buffer_size);\n\nMONO_API const char* mono_counter_get_name (MonoCounter *name);\nMONO_API int mono_counter_get_type (MonoCounter *counter);\nMONO_API int mono_counter_get_section (MonoCounter *counter);\nMONO_API int mono_counter_get_unit (MonoCounter *counter);\nMONO_API int mono_counter_get_variance (MonoCounter *counter);\nMONO_API size_t mono_counter_get_size (MonoCounter *counter);\n\ntypedef enum {\n\tMONO_RESOURCE_JIT_CODE, /* bytes */\n\tMONO_RESOURCE_METADATA, /* bytes */\n\tMONO_RESOURCE_GC_HEAP,  /* bytes */\n\tMONO_RESOURCE_COUNT /* non-ABI value */\n} MonoResourceType;\n\ntypedef void (*MonoResourceCallback) (int resource_type, uintptr_t value, int is_soft);\n\nMONO_API int  mono_runtime_resource_limit        (int resource_type, uintptr_t soft_limit, uintptr_t hard_limit);\nMONO_API void mono_runtime_resource_set_callback (MonoResourceCallback callback);\nMONO_API void mono_runtime_resource_check_limit  (int resource_type, uintptr_t value);\n\n#endif /* __MONO_COUNTERS_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/utils/mono-dl-fallback.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_UTILS_DL_FALLBACK_H__\n#define __MONO_UTILS_DL_FALLBACK_H__\n\n#include <mono/utils/mono-publib.h>\n\nMONO_BEGIN_DECLS\n\nenum {\n\tMONO_DL_EAGER  = 0,\n\tMONO_DL_LAZY   = 1,\n\t// If MONO_DL_LOCAL is set, it will trump MONO_DL_GLOBAL.\n\tMONO_DL_LOCAL  = 2,\n\t// MONO_DL_MASK is unused internally and no longer a full mask on netcore, given the introduction of MONO_DL_GLOBAL. Avoid.\n\tMONO_DL_MASK   = 3,\n\t// Only applicable when building Mono in netcore mode.\n\tMONO_DL_GLOBAL = 4\n};\n\n/*\n * This is the dynamic loader fallback API\n */\ntypedef struct MonoDlFallbackHandler MonoDlFallbackHandler;\n\n/*\n * The \"err\" variable contents must be allocated using g_malloc or g_strdup\n */\ntypedef void* (*MonoDlFallbackLoad) (const char *name, int flags, char **err, void *user_data);\ntypedef void* (*MonoDlFallbackSymbol) (void *handle, const char *name, char **err, void *user_data);\ntypedef void* (*MonoDlFallbackClose) (void *handle, void *user_data);\n\nMONO_API MonoDlFallbackHandler *mono_dl_fallback_register (MonoDlFallbackLoad load_func, MonoDlFallbackSymbol symbol_func,\n\t\t\t\t\t\t  MonoDlFallbackClose close_func, void *user_data);\n\nMONO_API void                   mono_dl_fallback_unregister (MonoDlFallbackHandler *handler);\n\nMONO_END_DECLS\n\n#endif /* __MONO_UTILS_DL_FALLBACK_H__ */\n\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/utils/mono-error.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_ERROR_H__\n#define __MONO_ERROR_H__\n\n#include <mono/utils/mono-publib.h>\n\nenum {\n\t/*\n\tThe supplied strings were dup'd by means of calling mono_error_dup_strings.\n\t*/\n\tMONO_ERROR_FREE_STRINGS = 0x0001,\n\n\t/*\n\tSomething happened while processing the error and the resulting message is incomplete.\n\t*/\n\tMONO_ERROR_INCOMPLETE = 0x0002,\n\t/*\n\tThis MonoError is heap allocated in a mempool\n        */\n\tMONO_ERROR_MEMPOOL_BOXED = 0x0004\n};\n\nenum {\n\tMONO_ERROR_NONE = 0,\n\tMONO_ERROR_MISSING_METHOD = 1,\n\tMONO_ERROR_MISSING_FIELD = 2,\n\tMONO_ERROR_TYPE_LOAD = 3,\n\tMONO_ERROR_FILE_NOT_FOUND = 4,\n\tMONO_ERROR_BAD_IMAGE = 5,\n\tMONO_ERROR_OUT_OF_MEMORY = 6,\n\tMONO_ERROR_ARGUMENT = 7,\n\tMONO_ERROR_ARGUMENT_NULL = 11,\n\tMONO_ERROR_ARGUMENT_OUT_OF_RANGE = 14,\n\tMONO_ERROR_NOT_VERIFIABLE = 8,\n\tMONO_ERROR_INVALID_PROGRAM = 12,\n\tMONO_ERROR_MEMBER_ACCESS = 13,\n\n\t/*\n\t * This is a generic error mechanism is you need to raise an arbitrary corlib exception.\n\t * You must pass the exception name otherwise prepare_exception will fail with internal execution. \n\t */\n\tMONO_ERROR_GENERIC = 9,\n\t/* This one encapsulates a managed exception instance */\n\tMONO_ERROR_EXCEPTION_INSTANCE = 10,\n\n\t/* Not a valid error code - indicates that the error was cleaned up and reused */\n\tMONO_ERROR_CLEANUP_CALLED_SENTINEL = 0xffff\n};\n\n#ifdef _MSC_VER\n__pragma(warning (push))\n__pragma(warning (disable:4201))\n#endif\n\n/*Keep in sync with MonoErrorInternal*/\ntypedef union _MonoError {\n\t// Merge two uint16 into one uint32 so it can be initialized\n\t// with one instruction instead of two.\n\tuint32_t init;\n\tstruct {\n\t\tuint16_t error_code;\n\t\tuint16_t private_flags; /*DON'T TOUCH */\n\t\tvoid *hidden_1 [12]; /*DON'T TOUCH */\n\t};\n} MonoErrorExternal;\n\n#ifdef _MSC_VER\n__pragma(warning (pop))\n#endif\n\n#ifdef MONO_INSIDE_RUNTIME\ntypedef union _MonoErrorInternal MonoError;\n#else\ntypedef MonoErrorExternal MonoError;\n#endif\n\n/* Mempool-allocated MonoError.*/\ntypedef struct _MonoErrorBoxed MonoErrorBoxed;\n\nMONO_BEGIN_DECLS\n\nMONO_API MONO_RT_EXTERNAL_ONLY void\nmono_error_init (MonoError *error);\n\nMONO_API void\nmono_error_init_flags (MonoError *error, unsigned short flags);\n\nMONO_API void\nmono_error_cleanup (MonoError *error);\n\nMONO_API MONO_RT_EXTERNAL_ONLY mono_bool\nmono_error_ok (MonoError *error);\n\nMONO_API unsigned short\nmono_error_get_error_code (MonoError *error);\n\nMONO_API const char*\nmono_error_get_message (MonoError *error);\n\nMONO_END_DECLS\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/utils/mono-forward.h",
    "content": "/**\n * \\file\n *\n * (C) 2018 Microsoft, Inc.\n *\n */\n#ifndef _MONO_UTILS_FORWARD_\n#define _MONO_UTILS_FORWARD_\n\ntypedef struct _MonoDomain MonoDomain;\ntypedef struct _MonoJitInfo MonoJitInfo;\n\n#endif\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/utils/mono-logger.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_LOGGER_H__\n#define __MONO_LOGGER_H__\n\n#include <mono/utils/mono-publib.h>\nMONO_BEGIN_DECLS\n\nMONO_API void \nmono_trace_set_level_string (const char *value);\n\nMONO_API void \nmono_trace_set_mask_string (const char *value);\n\ntypedef void (*MonoPrintCallback) (const char *string, mono_bool is_stdout);\ntypedef void (*MonoLogCallback) (const char *log_domain, const char *log_level, const char *message, mono_bool fatal, void *user_data);\n\nMONO_API void\nmono_trace_set_log_handler (MonoLogCallback callback, void *user_data);\n\nMONO_API void\nmono_trace_set_print_handler (MonoPrintCallback callback);\n\nMONO_API void\nmono_trace_set_printerr_handler (MonoPrintCallback callback);\n\nMONO_END_DECLS\n\n#endif /* __MONO_LOGGER_H__ */\n"
  },
  {
    "path": "Hazel/vendor/mono/include/mono/utils/mono-publib.h",
    "content": "/**\n * \\file\n */\n\n#ifndef __MONO_PUBLIB_H__\n#define __MONO_PUBLIB_H__\n\n/* \n * Minimal general purpose header for use in public mono header files.\n * We can't include config.h, so we use compiler-specific preprocessor\n * directives where needed.\n */\n\n#ifdef  __cplusplus\n#define MONO_BEGIN_DECLS  extern \"C\" {\n#define MONO_END_DECLS    }\n#else\n#define MONO_BEGIN_DECLS /* nothing */\n#define MONO_END_DECLS   /* nothing */\n#endif\n\nMONO_BEGIN_DECLS\n\n/* VS 2010 and later have stdint.h */\n#if defined(_MSC_VER)\n\n#if _MSC_VER < 1600\n\ntypedef __int8\t\t\tint8_t;\ntypedef unsigned __int8\t\tuint8_t;\ntypedef __int16\t\t\tint16_t;\ntypedef unsigned __int16\tuint16_t;\ntypedef __int32\t\t\tint32_t;\ntypedef unsigned __int32\tuint32_t;\ntypedef __int64\t\t\tint64_t;\ntypedef unsigned __int64\tuint64_t;\n\n#else\n\n#include <stdint.h>\n\n#endif\n\n#define MONO_API_EXPORT __declspec(dllexport)\n#define MONO_API_IMPORT __declspec(dllimport)\n\n#else\n\n#include <stdint.h>\n\n#if defined (__clang__) || defined (__GNUC__)\n#define MONO_API_EXPORT __attribute__ ((__visibility__ (\"default\")))\n#else\n#define MONO_API_EXPORT\n#endif\n#define MONO_API_IMPORT\n\n#endif /* end of compiler-specific stuff */\n\n#include <stdlib.h>\n\n#ifdef __cplusplus\n#define MONO_EXTERN_C extern \"C\"\n#else\n#define MONO_EXTERN_C /* nothing */\n#endif\n\n#if defined(MONO_DLL_EXPORT)\n\t#define MONO_API_NO_EXTERN_C MONO_API_EXPORT\n#elif defined(MONO_DLL_IMPORT)\n\t#define MONO_API_NO_EXTERN_C MONO_API_IMPORT\n#else\n\t#define MONO_API_NO_EXTERN_C /* nothing  */\n#endif\n\n#define MONO_API MONO_EXTERN_C MONO_API_NO_EXTERN_C\n\n// extern \"C\" extern int c; // warning: duplicate 'extern' declaration specifier [-Wduplicate-decl-specifier]\n//\n// Therefore, remove extern on functions as always meaningless/redundant,\n// and provide MONO_API_DATA for data, that always has one and only one extern.\n#ifdef __cplusplus\n#define MONO_API_DATA MONO_API\n#else\n#define MONO_API_DATA extern MONO_API\n#endif\n\ntypedef int32_t\t\tmono_bool;\ntypedef uint8_t\t\tmono_byte;\ntypedef mono_byte       MonoBoolean;\n#ifdef _WIN32\nMONO_END_DECLS\n#include <wchar.h>\ntypedef wchar_t \tmono_unichar2;\nMONO_BEGIN_DECLS\n#else\ntypedef uint16_t\tmono_unichar2;\n#endif\ntypedef uint32_t\tmono_unichar4;\n\ntypedef void\t(*MonoFunc)\t(void* data, void* user_data);\ntypedef void\t(*MonoHFunc)\t(void* key, void* value, void* user_data);\n\nMONO_API void mono_free (void *);\n\n#define MONO_ALLOCATOR_VTABLE_VERSION 1\n\ntypedef struct {\n\tint version;\n\tvoid *(*malloc)      (size_t size);\n\tvoid *(*realloc)     (void *mem, size_t count);\n\tvoid (*free)        (void *mem);\n\tvoid *(*calloc)      (size_t count, size_t size);\n} MonoAllocatorVTable;\n\nMONO_API mono_bool\nmono_set_allocator_vtable (MonoAllocatorVTable* vtable);\n\n\n#define MONO_CONST_RETURN const\n\n/*\n * When embedding, you have to define MONO_ZERO_LEN_ARRAY before including any\n * other Mono header file if you use a different compiler from the one used to\n * build Mono.\n */\n#ifndef MONO_ZERO_LEN_ARRAY\n#ifdef __GNUC__\n#define MONO_ZERO_LEN_ARRAY 0\n#else\n#define MONO_ZERO_LEN_ARRAY 1\n#endif\n#endif\n\n#if defined (MONO_INSIDE_RUNTIME)\n\n#if defined (__CENTRINEL__)\n/* Centrinel is an analyzer that warns about raw pointer to managed objects\n * inside Mono.\n */\n#define MONO_RT_MANAGED_ATTR __CENTRINEL_MANAGED_ATTR\n#define MONO_RT_CENTRINEL_SUPPRESS __CENTRINEL_SUPPRESS_ATTR(1)\n#else\n#define MONO_RT_MANAGED_ATTR\n#define MONO_RT_CENTRINEL_SUPPRESS\n#endif\n\n#if defined (__clang__) || defined (__GNUC__)\n// attribute(deprecated(message)) was introduced in gcc 4.5.\n// attribute(deprecated))         was introduced in gcc 4.0.\n// Compare: https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Function-Attributes.html\n//          https://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Function-Attributes.html\n//          https://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Function-Attributes.html\n#if defined (__clang__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\n#define MONO_RT_EXTERNAL_ONLY \\\n\t__attribute__ ((__deprecated__ (\"The mono runtime must not call this function.\"))) \\\n\tMONO_RT_CENTRINEL_SUPPRESS\n#elif __GNUC__ >= 4\n#define MONO_RT_EXTERNAL_ONLY __attribute__ ((__deprecated__)) MONO_RT_CENTRINEL_SUPPRESS\n#else\n#define MONO_RT_EXTERNAL_ONLY MONO_RT_CENTRINEL_SUPPRESS\n#endif\n\n#if defined (__clang__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)\n// Pragmas for controlling diagnostics appear to be from gcc 4.2.\n// This is used in place of configure gcc -Werror=deprecated-declarations:\n// 1. To be portable across build systems.\n// 2. configure is very sensitive to compiler flags; they break autoconf's probes.\n// Though #2 can be mitigated by being late in configure.\n#pragma GCC diagnostic error \"-Wdeprecated-declarations\"\n#endif\n\n#else\n#define MONO_RT_EXTERNAL_ONLY MONO_RT_CENTRINEL_SUPPRESS\n#endif // clang or gcc\n\n#else\n#define MONO_RT_EXTERNAL_ONLY\n#define MONO_RT_MANAGED_ATTR\n#endif /* MONO_INSIDE_RUNTIME */\n\n#if defined (__clang__) || defined (__GNUC__)\n#define _MONO_DEPRECATED __attribute__ ((__deprecated__))\n#elif defined (_MSC_VER)\n#define _MONO_DEPRECATED __declspec (deprecated)\n#else\n#define _MONO_DEPRECATED\n#endif\n\n#define MONO_DEPRECATED MONO_API MONO_RT_EXTERNAL_ONLY _MONO_DEPRECATED\n\nMONO_END_DECLS\n\n#endif /* __MONO_PUBLIB_H__ */\n"
  },
  {
    "path": "Hazel/vendor/stb_image/stb_image.cpp",
    "content": "#include \"hzpch.h\"\n\n#define STB_IMAGE_IMPLEMENTATION\n#include \"stb_image.h\""
  },
  {
    "path": "Hazel/vendor/stb_image/stb_image.h",
    "content": "/* stb_image - v2.23 - public domain image loader - http://nothings.org/stb\n\t\t\t\t\t\t\t\t  no warranty implied; use at your own risk\n\n   Do this:\n\t  #define STB_IMAGE_IMPLEMENTATION\n   before you include this file in *one* C or C++ file to create the implementation.\n\n   // i.e. it should look like this:\n   #include ...\n   #include ...\n   #include ...\n   #define STB_IMAGE_IMPLEMENTATION\n   #include \"stb_image.h\"\n\n   You can #define STBI_ASSERT(x) before the #include to avoid using assert.h.\n   And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free\n\n\n   QUICK NOTES:\n\t  Primarily of interest to game developers and other people who can\n\t\t  avoid problematic images and only need the trivial interface\n\n\t  JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib)\n\t  PNG 1/2/4/8/16-bit-per-channel\n\n\t  TGA (not sure what subset, if a subset)\n\t  BMP non-1bpp, non-RLE\n\t  PSD (composited view only, no extra channels, 8/16 bit-per-channel)\n\n\t  GIF (*comp always reports as 4-channel)\n\t  HDR (radiance rgbE format)\n\t  PIC (Softimage PIC)\n\t  PNM (PPM and PGM binary only)\n\n\t  Animated GIF still needs a proper API, but here's one way to do it:\n\t\t  http://gist.github.com/urraka/685d9a6340b26b830d49\n\n\t  - decode from memory or through FILE (define STBI_NO_STDIO to remove code)\n\t  - decode from arbitrary I/O callbacks\n\t  - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON)\n\n   Full documentation under \"DOCUMENTATION\" below.\n\n\nLICENSE\n\n  See end of file for license information.\n\nRECENT REVISION HISTORY:\n\n\t  2.23  (2019-08-11) fix clang static analysis warning\n\t  2.22  (2019-03-04) gif fixes, fix warnings\n\t  2.21  (2019-02-25) fix typo in comment\n\t  2.20  (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs\n\t  2.19  (2018-02-11) fix warning\n\t  2.18  (2018-01-30) fix warnings\n\t  2.17  (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings\n\t  2.16  (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes\n\t  2.15  (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC\n\t  2.14  (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs\n\t  2.13  (2016-12-04) experimental 16-bit API, only for PNG so far; fixes\n\t  2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes\n\t  2.11  (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64\n\t\t\t\t\t\t RGB-format JPEG; remove white matting in PSD;\n\t\t\t\t\t\t allocate large structures on the stack;\n\t\t\t\t\t\t correct channel count for PNG & BMP\n\t  2.10  (2016-01-22) avoid warning introduced in 2.09\n\t  2.09  (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED\n\n   See end of file for full revision history.\n\n\n ============================    Contributors    =========================\n\n Image formats                          Extensions, features\n\tSean Barrett (jpeg, png, bmp)          Jetro Lauha (stbi_info)\n\tNicolas Schulz (hdr, psd)              Martin \"SpartanJ\" Golini (stbi_info)\n\tJonathan Dummer (tga)                  James \"moose2000\" Brown (iPhone PNG)\n\tJean-Marc Lienher (gif)                Ben \"Disch\" Wenger (io callbacks)\n\tTom Seddon (pic)                       Omar Cornut (1/2/4-bit PNG)\n\tThatcher Ulrich (psd)                  Nicolas Guillemot (vertical flip)\n\tKen Miller (pgm, ppm)                  Richard Mitton (16-bit PSD)\n\tgithub:urraka (animated gif)           Junggon Kim (PNM comments)\n\tChristopher Forseth (animated gif)     Daniel Gibson (16-bit TGA)\n\t\t\t\t\t\t\t\t\t\t   socks-the-fox (16-bit PNG)\n\t\t\t\t\t\t\t\t\t\t   Jeremy Sawicki (handle all ImageNet JPGs)\n Optimizations & bugfixes                  Mikhail Morozov (1-bit BMP)\n\tFabian \"ryg\" Giesen                    Anael Seghezzi (is-16-bit query)\n\tArseny Kapoulkine\n\tJohn-Mark Allen\n\tCarmelo J Fdez-Aguera\n\n Bug & warning fixes\n\tMarc LeBlanc            David Woo          Guillaume George   Martins Mozeiko\n\tChristpher Lloyd        Jerry Jansson      Joseph Thomson     Phil Jordan\n\tDave Moore              Roy Eltham         Hayaki Saito       Nathan Reed\n\tWon Chun                Luke Graham        Johan Duparc       Nick Verigakis\n\tthe Horde3D community   Thomas Ruf         Ronny Chevalier    github:rlyeh\n\tJanez Zemva             John Bartholomew   Michal Cichon      github:romigrou\n\tJonathan Blow           Ken Hamada         Tero Hanninen      github:svdijk\n\tLaurent Gomila          Cort Stratton      Sergio Gonzalez    github:snagar\n\tAruelien Pocheville     Thibault Reuille   Cass Everitt       github:Zelex\n\tRyamond Barbiero        Paul Du Bois       Engin Manap        github:grim210\n\tAldo Culquicondor       Philipp Wiesemann  Dale Weiler        github:sammyhw\n\tOriol Ferrer Mesia      Josh Tobin         Matthew Gregan     github:phprus\n\tJulian Raschke          Gregory Mullen     Baldur Karlsson    github:poppolopoppo\n\tChristian Floisand      Kevin Schmidt      JR Smith           github:darealshinji\n\tBlazej Dariusz Roszkowski                                     github:Michaelangel007\n*/\n\n#ifndef STBI_INCLUDE_STB_IMAGE_H\n#define STBI_INCLUDE_STB_IMAGE_H\n\n// DOCUMENTATION\n//\n// Limitations:\n//    - no 12-bit-per-channel JPEG\n//    - no JPEGs with arithmetic coding\n//    - GIF always returns *comp=4\n//\n// Basic usage (see HDR discussion below for HDR usage):\n//    int x,y,n;\n//    unsigned char *data = stbi_load(filename, &x, &y, &n, 0);\n//    // ... process data if not NULL ...\n//    // ... x = width, y = height, n = # 8-bit components per pixel ...\n//    // ... replace '0' with '1'..'4' to force that many components per pixel\n//    // ... but 'n' will always be the number that it would have been if you said 0\n//    stbi_image_free(data)\n//\n// Standard parameters:\n//    int *x                 -- outputs image width in pixels\n//    int *y                 -- outputs image height in pixels\n//    int *channels_in_file  -- outputs # of image components in image file\n//    int desired_channels   -- if non-zero, # of image components requested in result\n//\n// The return value from an image loader is an 'unsigned char *' which points\n// to the pixel data, or NULL on an allocation failure or if the image is\n// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels,\n// with each pixel consisting of N interleaved 8-bit components; the first\n// pixel pointed to is top-left-most in the image. There is no padding between\n// image scanlines or between pixels, regardless of format. The number of\n// components N is 'desired_channels' if desired_channels is non-zero, or\n// *channels_in_file otherwise. If desired_channels is non-zero,\n// *channels_in_file has the number of components that _would_ have been\n// output otherwise. E.g. if you set desired_channels to 4, you will always\n// get RGBA output, but you can check *channels_in_file to see if it's trivially\n// opaque because e.g. there were only 3 channels in the source image.\n//\n// An output image with N components has the following components interleaved\n// in this order in each pixel:\n//\n//     N=#comp     components\n//       1           grey\n//       2           grey, alpha\n//       3           red, green, blue\n//       4           red, green, blue, alpha\n//\n// If image loading fails for any reason, the return value will be NULL,\n// and *x, *y, *channels_in_file will be unchanged. The function\n// stbi_failure_reason() can be queried for an extremely brief, end-user\n// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS\n// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly\n// more user-friendly ones.\n//\n// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized.\n//\n// ===========================================================================\n//\n// UNICODE:\n//\n//   If compiling for Windows and you wish to use Unicode filenames, compile\n//   with\n//       #define STBI_WINDOWS_UTF8\n//   and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert\n//   Windows wchar_t filenames to utf8.\n//\n// ===========================================================================\n//\n// Philosophy\n//\n// stb libraries are designed with the following priorities:\n//\n//    1. easy to use\n//    2. easy to maintain\n//    3. good performance\n//\n// Sometimes I let \"good performance\" creep up in priority over \"easy to maintain\",\n// and for best performance I may provide less-easy-to-use APIs that give higher\n// performance, in addition to the easy-to-use ones. Nevertheless, it's important\n// to keep in mind that from the standpoint of you, a client of this library,\n// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all.\n//\n// Some secondary priorities arise directly from the first two, some of which\n// provide more explicit reasons why performance can't be emphasized.\n//\n//    - Portable (\"ease of use\")\n//    - Small source code footprint (\"easy to maintain\")\n//    - No dependencies (\"ease of use\")\n//\n// ===========================================================================\n//\n// I/O callbacks\n//\n// I/O callbacks allow you to read from arbitrary sources, like packaged\n// files or some other source. Data read from callbacks are processed\n// through a small internal buffer (currently 128 bytes) to try to reduce\n// overhead.\n//\n// The three functions you must define are \"read\" (reads some bytes of data),\n// \"skip\" (skips some bytes of data), \"eof\" (reports if the stream is at the end).\n//\n// ===========================================================================\n//\n// SIMD support\n//\n// The JPEG decoder will try to automatically use SIMD kernels on x86 when\n// supported by the compiler. For ARM Neon support, you must explicitly\n// request it.\n//\n// (The old do-it-yourself SIMD API is no longer supported in the current\n// code.)\n//\n// On x86, SSE2 will automatically be used when available based on a run-time\n// test; if not, the generic C versions are used as a fall-back. On ARM targets,\n// the typical path is to have separate builds for NEON and non-NEON devices\n// (at least this is true for iOS and Android). Therefore, the NEON support is\n// toggled by a build flag: define STBI_NEON to get NEON loops.\n//\n// If for some reason you do not want to use any of SIMD code, or if\n// you have issues compiling it, you can disable it entirely by\n// defining STBI_NO_SIMD.\n//\n// ===========================================================================\n//\n// HDR image support   (disable by defining STBI_NO_HDR)\n//\n// stb_image supports loading HDR images in general, and currently the Radiance\n// .HDR file format specifically. You can still load any file through the existing\n// interface; if you attempt to load an HDR file, it will be automatically remapped\n// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1;\n// both of these constants can be reconfigured through this interface:\n//\n//     stbi_hdr_to_ldr_gamma(2.2f);\n//     stbi_hdr_to_ldr_scale(1.0f);\n//\n// (note, do not use _inverse_ constants; stbi_image will invert them\n// appropriately).\n//\n// Additionally, there is a new, parallel interface for loading files as\n// (linear) floats to preserve the full dynamic range:\n//\n//    float *data = stbi_loadf(filename, &x, &y, &n, 0);\n//\n// If you load LDR images through this interface, those images will\n// be promoted to floating point values, run through the inverse of\n// constants corresponding to the above:\n//\n//     stbi_ldr_to_hdr_scale(1.0f);\n//     stbi_ldr_to_hdr_gamma(2.2f);\n//\n// Finally, given a filename (or an open file or memory block--see header\n// file for details) containing image data, you can query for the \"most\n// appropriate\" interface to use (that is, whether the image is HDR or\n// not), using:\n//\n//     stbi_is_hdr(char *filename);\n//\n// ===========================================================================\n//\n// iPhone PNG support:\n//\n// By default we convert iphone-formatted PNGs back to RGB, even though\n// they are internally encoded differently. You can disable this conversion\n// by calling stbi_convert_iphone_png_to_rgb(0), in which case\n// you will always just get the native iphone \"format\" through (which\n// is BGR stored in RGB).\n//\n// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per\n// pixel to remove any premultiplied alpha *only* if the image file explicitly\n// says there's premultiplied data (currently only happens in iPhone images,\n// and only if iPhone convert-to-rgb processing is on).\n//\n// ===========================================================================\n//\n// ADDITIONAL CONFIGURATION\n//\n//  - You can suppress implementation of any of the decoders to reduce\n//    your code footprint by #defining one or more of the following\n//    symbols before creating the implementation.\n//\n//        STBI_NO_JPEG\n//        STBI_NO_PNG\n//        STBI_NO_BMP\n//        STBI_NO_PSD\n//        STBI_NO_TGA\n//        STBI_NO_GIF\n//        STBI_NO_HDR\n//        STBI_NO_PIC\n//        STBI_NO_PNM   (.ppm and .pgm)\n//\n//  - You can request *only* certain decoders and suppress all other ones\n//    (this will be more forward-compatible, as addition of new decoders\n//    doesn't require you to disable them explicitly):\n//\n//        STBI_ONLY_JPEG\n//        STBI_ONLY_PNG\n//        STBI_ONLY_BMP\n//        STBI_ONLY_PSD\n//        STBI_ONLY_TGA\n//        STBI_ONLY_GIF\n//        STBI_ONLY_HDR\n//        STBI_ONLY_PIC\n//        STBI_ONLY_PNM   (.ppm and .pgm)\n//\n//   - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still\n//     want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB\n//\n\n\n#ifndef STBI_NO_STDIO\n#include <stdio.h>\n#endif // STBI_NO_STDIO\n\n#define STBI_VERSION 1\n\nenum\n{\n\tSTBI_default = 0, // only used for desired_channels\n\n\tSTBI_grey = 1,\n\tSTBI_grey_alpha = 2,\n\tSTBI_rgb = 3,\n\tSTBI_rgb_alpha = 4\n};\n\n#include <stdlib.h>\ntypedef unsigned char stbi_uc;\ntypedef unsigned short stbi_us;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef STBIDEF\n#ifdef STB_IMAGE_STATIC\n#define STBIDEF static\n#else\n#define STBIDEF extern\n#endif\n#endif\n\n\t//////////////////////////////////////////////////////////////////////////////\n\t//\n\t// PRIMARY API - works on images of any type\n\t//\n\n\t//\n\t// load image by filename, open file, or memory buffer\n\t//\n\n\ttypedef struct\n\t{\n\t\tint(*read)  (void *user, char *data, int size);   // fill 'data' with 'size' bytes.  return number of bytes actually read\n\t\tvoid(*skip)  (void *user, int n);                 // skip the next 'n' bytes, or 'unget' the last -n bytes if negative\n\t\tint(*eof)   (void *user);                       // returns nonzero if we are at end of file/data\n\t} stbi_io_callbacks;\n\n\t////////////////////////////////////\n\t//\n\t// 8-bits-per-channel interface\n\t//\n\n\tSTBIDEF stbi_uc *stbi_load_from_memory(stbi_uc           const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels);\n\tSTBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels);\n\n#ifndef STBI_NO_STDIO\n\tSTBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);\n\tSTBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);\n\t// for stbi_load_from_file, file pointer is left pointing immediately after image\n#endif\n\n#ifndef STBI_NO_GIF\n\tSTBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp);\n#endif\n\n#ifdef STBI_WINDOWS_UTF8\n\tSTBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input);\n#endif\n\n\t////////////////////////////////////\n\t//\n\t// 16-bits-per-channel interface\n\t//\n\n\tSTBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels);\n\tSTBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels);\n\n#ifndef STBI_NO_STDIO\n\tSTBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);\n\tSTBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);\n#endif\n\n\t////////////////////////////////////\n\t//\n\t// float-per-channel interface\n\t//\n#ifndef STBI_NO_LINEAR\n\tSTBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels);\n\tSTBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels);\n\n#ifndef STBI_NO_STDIO\n\tSTBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);\n\tSTBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);\n#endif\n#endif\n\n#ifndef STBI_NO_HDR\n\tSTBIDEF void   stbi_hdr_to_ldr_gamma(float gamma);\n\tSTBIDEF void   stbi_hdr_to_ldr_scale(float scale);\n#endif // STBI_NO_HDR\n\n#ifndef STBI_NO_LINEAR\n\tSTBIDEF void   stbi_ldr_to_hdr_gamma(float gamma);\n\tSTBIDEF void   stbi_ldr_to_hdr_scale(float scale);\n#endif // STBI_NO_LINEAR\n\n\t// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR\n\tSTBIDEF int    stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user);\n\tSTBIDEF int    stbi_is_hdr_from_memory(stbi_uc const *buffer, int len);\n#ifndef STBI_NO_STDIO\n\tSTBIDEF int      stbi_is_hdr(char const *filename);\n\tSTBIDEF int      stbi_is_hdr_from_file(FILE *f);\n#endif // STBI_NO_STDIO\n\n\n\t// get a VERY brief reason for failure\n\t// NOT THREADSAFE\n\tSTBIDEF const char *stbi_failure_reason(void);\n\n\t// free the loaded image -- this is just free()\n\tSTBIDEF void     stbi_image_free(void *retval_from_stbi_load);\n\n\t// get image dimensions & components without fully decoding\n\tSTBIDEF int      stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp);\n\tSTBIDEF int      stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp);\n\tSTBIDEF int      stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len);\n\tSTBIDEF int      stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user);\n\n#ifndef STBI_NO_STDIO\n\tSTBIDEF int      stbi_info(char const *filename, int *x, int *y, int *comp);\n\tSTBIDEF int      stbi_info_from_file(FILE *f, int *x, int *y, int *comp);\n\tSTBIDEF int      stbi_is_16_bit(char const *filename);\n\tSTBIDEF int      stbi_is_16_bit_from_file(FILE *f);\n#endif\n\n\n\n\t// for image formats that explicitly notate that they have premultiplied alpha,\n\t// we just return the colors as stored in the file. set this flag to force\n\t// unpremultiplication. results are undefined if the unpremultiply overflow.\n\tSTBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply);\n\n\t// indicate whether we should process iphone images back to canonical format,\n\t// or just pass them through \"as-is\"\n\tSTBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert);\n\n\t// flip the image vertically, so the first pixel in the output array is the bottom left\n\tSTBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip);\n\n\t// ZLIB client - used by PNG, available for other purposes\n\n\tSTBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen);\n\tSTBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header);\n\tSTBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen);\n\tSTBIDEF int   stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);\n\n\tSTBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen);\n\tSTBIDEF int   stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);\n\n\n#ifdef __cplusplus\n}\n#endif\n\n//\n//\n////   end header file   /////////////////////////////////////////////////////\n#endif // STBI_INCLUDE_STB_IMAGE_H\n\n#ifdef STB_IMAGE_IMPLEMENTATION\n\n#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \\\n  || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \\\n  || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \\\n  || defined(STBI_ONLY_ZLIB)\n#ifndef STBI_ONLY_JPEG\n#define STBI_NO_JPEG\n#endif\n#ifndef STBI_ONLY_PNG\n#define STBI_NO_PNG\n#endif\n#ifndef STBI_ONLY_BMP\n#define STBI_NO_BMP\n#endif\n#ifndef STBI_ONLY_PSD\n#define STBI_NO_PSD\n#endif\n#ifndef STBI_ONLY_TGA\n#define STBI_NO_TGA\n#endif\n#ifndef STBI_ONLY_GIF\n#define STBI_NO_GIF\n#endif\n#ifndef STBI_ONLY_HDR\n#define STBI_NO_HDR\n#endif\n#ifndef STBI_ONLY_PIC\n#define STBI_NO_PIC\n#endif\n#ifndef STBI_ONLY_PNM\n#define STBI_NO_PNM\n#endif\n#endif\n\n#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB)\n#define STBI_NO_ZLIB\n#endif\n\n\n#include <stdarg.h>\n#include <stddef.h> // ptrdiff_t on osx\n#include <stdlib.h>\n#include <string.h>\n#include <limits.h>\n\n#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR)\n#include <math.h>  // ldexp, pow\n#endif\n\n#ifndef STBI_NO_STDIO\n#include <stdio.h>\n#endif\n\n#ifndef STBI_ASSERT\n#include <assert.h>\n#define STBI_ASSERT(x) assert(x)\n#endif\n\n#ifdef __cplusplus\n#define STBI_EXTERN extern \"C\"\n#else\n#define STBI_EXTERN extern\n#endif\n\n\n#ifndef _MSC_VER\n#ifdef __cplusplus\n#define stbi_inline inline\n#else\n#define stbi_inline\n#endif\n#else\n#define stbi_inline __forceinline\n#endif\n\n\n#ifdef _MSC_VER\ntypedef unsigned short stbi__uint16;\ntypedef   signed short stbi__int16;\ntypedef unsigned int   stbi__uint32;\ntypedef   signed int   stbi__int32;\n#else\n#include <stdint.h>\ntypedef uint16_t stbi__uint16;\ntypedef int16_t  stbi__int16;\ntypedef uint32_t stbi__uint32;\ntypedef int32_t  stbi__int32;\n#endif\n\n// should produce compiler error if size is wrong\ntypedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1];\n\n#ifdef _MSC_VER\n#define STBI_NOTUSED(v)  (void)(v)\n#else\n#define STBI_NOTUSED(v)  (void)sizeof(v)\n#endif\n\n#ifdef _MSC_VER\n#define STBI_HAS_LROTL\n#endif\n\n#ifdef STBI_HAS_LROTL\n#define stbi_lrot(x,y)  _lrotl(x,y)\n#else\n#define stbi_lrot(x,y)  (((x) << (y)) | ((x) >> (32 - (y))))\n#endif\n\n#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED))\n// ok\n#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED)\n// ok\n#else\n#error \"Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED).\"\n#endif\n\n#ifndef STBI_MALLOC\n#define STBI_MALLOC(sz)           malloc(sz)\n#define STBI_REALLOC(p,newsz)     realloc(p,newsz)\n#define STBI_FREE(p)              free(p)\n#endif\n\n#ifndef STBI_REALLOC_SIZED\n#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz)\n#endif\n\n// x86/x64 detection\n#if defined(__x86_64__) || defined(_M_X64)\n#define STBI__X64_TARGET\n#elif defined(__i386) || defined(_M_IX86)\n#define STBI__X86_TARGET\n#endif\n\n#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)\n// gcc doesn't support sse2 intrinsics unless you compile with -msse2,\n// which in turn means it gets to use SSE2 everywhere. This is unfortunate,\n// but previous attempts to provide the SSE2 functions with runtime\n// detection caused numerous issues. The way architecture extensions are\n// exposed in GCC/Clang is, sadly, not really suited for one-file libs.\n// New behavior: if compiled with -msse2, we use SSE2 without any\n// detection; if not, we don't use it at all.\n#define STBI_NO_SIMD\n#endif\n\n#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD)\n// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET\n//\n// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the\n// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant.\n// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not\n// simultaneously enabling \"-mstackrealign\".\n//\n// See https://github.com/nothings/stb/issues/81 for more information.\n//\n// So default to no SSE2 on 32-bit MinGW. If you've read this far and added\n// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2.\n#define STBI_NO_SIMD\n#endif\n\n#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET))\n#define STBI_SSE2\n#include <emmintrin.h>\n\n#ifdef _MSC_VER\n\n#if _MSC_VER >= 1400  // not VC6\n#include <intrin.h> // __cpuid\nstatic int stbi__cpuid3(void)\n{\n\tint info[4];\n\t__cpuid(info, 1);\n\treturn info[3];\n}\n#else\nstatic int stbi__cpuid3(void)\n{\n\tint res;\n\t__asm {\n\t\tmov  eax, 1\n\t\tcpuid\n\t\tmov  res, edx\n\t}\n\treturn res;\n}\n#endif\n\n#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name\n\n#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2)\nstatic int stbi__sse2_available(void)\n{\n\tint info3 = stbi__cpuid3();\n\treturn ((info3 >> 26) & 1) != 0;\n}\n#endif\n\n#else // assume GCC-style if not VC++\n#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16)))\n\n#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2)\nstatic int stbi__sse2_available(void)\n{\n\t// If we're even attempting to compile this on GCC/Clang, that means\n\t// -msse2 is on, which means the compiler is allowed to use SSE2\n\t// instructions at will, and so are we.\n\treturn 1;\n}\n#endif\n\n#endif\n#endif\n\n// ARM NEON\n#if defined(STBI_NO_SIMD) && defined(STBI_NEON)\n#undef STBI_NEON\n#endif\n\n#ifdef STBI_NEON\n#include <arm_neon.h>\n// assume GCC or Clang on ARM targets\n#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16)))\n#endif\n\n#ifndef STBI_SIMD_ALIGN\n#define STBI_SIMD_ALIGN(type, name) type name\n#endif\n\n///////////////////////////////////////////////\n//\n//  stbi__context struct and start_xxx functions\n\n// stbi__context structure is our basic context used by all images, so it\n// contains all the IO context, plus some basic image information\ntypedef struct\n{\n\tstbi__uint32 img_x, img_y;\n\tint img_n, img_out_n;\n\n\tstbi_io_callbacks io;\n\tvoid *io_user_data;\n\n\tint read_from_callbacks;\n\tint buflen;\n\tstbi_uc buffer_start[128];\n\n\tstbi_uc *img_buffer, *img_buffer_end;\n\tstbi_uc *img_buffer_original, *img_buffer_original_end;\n} stbi__context;\n\n\nstatic void stbi__refill_buffer(stbi__context *s);\n\n// initialize a memory-decode context\nstatic void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len)\n{\n\ts->io.read = NULL;\n\ts->read_from_callbacks = 0;\n\ts->img_buffer = s->img_buffer_original = (stbi_uc *)buffer;\n\ts->img_buffer_end = s->img_buffer_original_end = (stbi_uc *)buffer + len;\n}\n\n// initialize a callback-based context\nstatic void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user)\n{\n\ts->io = *c;\n\ts->io_user_data = user;\n\ts->buflen = sizeof(s->buffer_start);\n\ts->read_from_callbacks = 1;\n\ts->img_buffer_original = s->buffer_start;\n\tstbi__refill_buffer(s);\n\ts->img_buffer_original_end = s->img_buffer_end;\n}\n\n#ifndef STBI_NO_STDIO\n\nstatic int stbi__stdio_read(void *user, char *data, int size)\n{\n\treturn (int)fread(data, 1, size, (FILE*)user);\n}\n\nstatic void stbi__stdio_skip(void *user, int n)\n{\n\tfseek((FILE*)user, n, SEEK_CUR);\n}\n\nstatic int stbi__stdio_eof(void *user)\n{\n\treturn feof((FILE*)user);\n}\n\nstatic stbi_io_callbacks stbi__stdio_callbacks =\n{\n   stbi__stdio_read,\n   stbi__stdio_skip,\n   stbi__stdio_eof,\n};\n\nstatic void stbi__start_file(stbi__context *s, FILE *f)\n{\n\tstbi__start_callbacks(s, &stbi__stdio_callbacks, (void *)f);\n}\n\n//static void stop_file(stbi__context *s) { }\n\n#endif // !STBI_NO_STDIO\n\nstatic void stbi__rewind(stbi__context *s)\n{\n\t// conceptually rewind SHOULD rewind to the beginning of the stream,\n\t// but we just rewind to the beginning of the initial buffer, because\n\t// we only use it after doing 'test', which only ever looks at at most 92 bytes\n\ts->img_buffer = s->img_buffer_original;\n\ts->img_buffer_end = s->img_buffer_original_end;\n}\n\nenum\n{\n\tSTBI_ORDER_RGB,\n\tSTBI_ORDER_BGR\n};\n\ntypedef struct\n{\n\tint bits_per_channel;\n\tint num_channels;\n\tint channel_order;\n} stbi__result_info;\n\n#ifndef STBI_NO_JPEG\nstatic int      stbi__jpeg_test(stbi__context *s);\nstatic void    *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n#ifndef STBI_NO_PNG\nstatic int      stbi__png_test(stbi__context *s);\nstatic void    *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__png_info(stbi__context *s, int *x, int *y, int *comp);\nstatic int      stbi__png_is16(stbi__context *s);\n#endif\n\n#ifndef STBI_NO_BMP\nstatic int      stbi__bmp_test(stbi__context *s);\nstatic void    *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n#ifndef STBI_NO_TGA\nstatic int      stbi__tga_test(stbi__context *s);\nstatic void    *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__tga_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n#ifndef STBI_NO_PSD\nstatic int      stbi__psd_test(stbi__context *s);\nstatic void    *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc);\nstatic int      stbi__psd_info(stbi__context *s, int *x, int *y, int *comp);\nstatic int      stbi__psd_is16(stbi__context *s);\n#endif\n\n#ifndef STBI_NO_HDR\nstatic int      stbi__hdr_test(stbi__context *s);\nstatic float   *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n#ifndef STBI_NO_PIC\nstatic int      stbi__pic_test(stbi__context *s);\nstatic void    *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__pic_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n#ifndef STBI_NO_GIF\nstatic int      stbi__gif_test(stbi__context *s);\nstatic void    *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic void    *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp);\nstatic int      stbi__gif_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n#ifndef STBI_NO_PNM\nstatic int      stbi__pnm_test(stbi__context *s);\nstatic void    *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);\nstatic int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp);\n#endif\n\n// this is not threadsafe\nstatic const char *stbi__g_failure_reason;\n\nSTBIDEF const char *stbi_failure_reason(void)\n{\n\treturn stbi__g_failure_reason;\n}\n\nstatic int stbi__err(const char *str)\n{\n\tstbi__g_failure_reason = str;\n\treturn 0;\n}\n\nstatic void *stbi__malloc(size_t size)\n{\n\treturn STBI_MALLOC(size);\n}\n\n// stb_image uses ints pervasively, including for offset calculations.\n// therefore the largest decoded image size we can support with the\n// current code, even on 64-bit targets, is INT_MAX. this is not a\n// significant limitation for the intended use case.\n//\n// we do, however, need to make sure our size calculations don't\n// overflow. hence a few helper functions for size calculations that\n// multiply integers together, making sure that they're non-negative\n// and no overflow occurs.\n\n// return 1 if the sum is valid, 0 on overflow.\n// negative terms are considered invalid.\nstatic int stbi__addsizes_valid(int a, int b)\n{\n\tif (b < 0) return 0;\n\t// now 0 <= b <= INT_MAX, hence also\n\t// 0 <= INT_MAX - b <= INTMAX.\n\t// And \"a + b <= INT_MAX\" (which might overflow) is the\n\t// same as a <= INT_MAX - b (no overflow)\n\treturn a <= INT_MAX - b;\n}\n\n// returns 1 if the product is valid, 0 on overflow.\n// negative factors are considered invalid.\nstatic int stbi__mul2sizes_valid(int a, int b)\n{\n\tif (a < 0 || b < 0) return 0;\n\tif (b == 0) return 1; // mul-by-0 is always safe\n\t// portable way to check for no overflows in a*b\n\treturn a <= INT_MAX / b;\n}\n\n// returns 1 if \"a*b + add\" has no negative terms/factors and doesn't overflow\nstatic int stbi__mad2sizes_valid(int a, int b, int add)\n{\n\treturn stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add);\n}\n\n// returns 1 if \"a*b*c + add\" has no negative terms/factors and doesn't overflow\nstatic int stbi__mad3sizes_valid(int a, int b, int c, int add)\n{\n\treturn stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) &&\n\t\tstbi__addsizes_valid(a*b*c, add);\n}\n\n// returns 1 if \"a*b*c*d + add\" has no negative terms/factors and doesn't overflow\n#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR)\nstatic int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)\n{\n\treturn stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) &&\n\t\tstbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add);\n}\n#endif\n\n// mallocs with size overflow checking\nstatic void *stbi__malloc_mad2(int a, int b, int add)\n{\n\tif (!stbi__mad2sizes_valid(a, b, add)) return NULL;\n\treturn stbi__malloc(a*b + add);\n}\n\nstatic void *stbi__malloc_mad3(int a, int b, int c, int add)\n{\n\tif (!stbi__mad3sizes_valid(a, b, c, add)) return NULL;\n\treturn stbi__malloc(a*b*c + add);\n}\n\n#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR)\nstatic void *stbi__malloc_mad4(int a, int b, int c, int d, int add)\n{\n\tif (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL;\n\treturn stbi__malloc(a*b*c*d + add);\n}\n#endif\n\n// stbi__err - error\n// stbi__errpf - error returning pointer to float\n// stbi__errpuc - error returning pointer to unsigned char\n\n#ifdef STBI_NO_FAILURE_STRINGS\n#define stbi__err(x,y)  0\n#elif defined(STBI_FAILURE_USERMSG)\n#define stbi__err(x,y)  stbi__err(y)\n#else\n#define stbi__err(x,y)  stbi__err(x)\n#endif\n\n#define stbi__errpf(x,y)   ((float *)(size_t) (stbi__err(x,y)?NULL:NULL))\n#define stbi__errpuc(x,y)  ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL))\n\nSTBIDEF void stbi_image_free(void *retval_from_stbi_load)\n{\n\tSTBI_FREE(retval_from_stbi_load);\n}\n\n#ifndef STBI_NO_LINEAR\nstatic float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp);\n#endif\n\n#ifndef STBI_NO_HDR\nstatic stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp);\n#endif\n\nstatic int stbi__vertically_flip_on_load = 0;\n\nSTBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip)\n{\n\tstbi__vertically_flip_on_load = flag_true_if_should_flip;\n}\n\nstatic void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc)\n{\n\tmemset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields\n\tri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed\n\tri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order\n\tri->num_channels = 0;\n\n#ifndef STBI_NO_JPEG\n\tif (stbi__jpeg_test(s)) return stbi__jpeg_load(s, x, y, comp, req_comp, ri);\n#endif\n#ifndef STBI_NO_PNG\n\tif (stbi__png_test(s))  return stbi__png_load(s, x, y, comp, req_comp, ri);\n#endif\n#ifndef STBI_NO_BMP\n\tif (stbi__bmp_test(s))  return stbi__bmp_load(s, x, y, comp, req_comp, ri);\n#endif\n#ifndef STBI_NO_GIF\n\tif (stbi__gif_test(s))  return stbi__gif_load(s, x, y, comp, req_comp, ri);\n#endif\n#ifndef STBI_NO_PSD\n\tif (stbi__psd_test(s))  return stbi__psd_load(s, x, y, comp, req_comp, ri, bpc);\n#endif\n#ifndef STBI_NO_PIC\n\tif (stbi__pic_test(s))  return stbi__pic_load(s, x, y, comp, req_comp, ri);\n#endif\n#ifndef STBI_NO_PNM\n\tif (stbi__pnm_test(s))  return stbi__pnm_load(s, x, y, comp, req_comp, ri);\n#endif\n\n#ifndef STBI_NO_HDR\n\tif (stbi__hdr_test(s)) {\n\t\tfloat *hdr = stbi__hdr_load(s, x, y, comp, req_comp, ri);\n\t\treturn stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp);\n\t}\n#endif\n\n#ifndef STBI_NO_TGA\n\t// test tga last because it's a crappy test!\n\tif (stbi__tga_test(s))\n\t\treturn stbi__tga_load(s, x, y, comp, req_comp, ri);\n#endif\n\n\treturn stbi__errpuc(\"unknown image type\", \"Image not of any known type, or corrupt\");\n}\n\nstatic stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels)\n{\n\tint i;\n\tint img_len = w * h * channels;\n\tstbi_uc *reduced;\n\n\treduced = (stbi_uc *)stbi__malloc(img_len);\n\tif (reduced == NULL) return stbi__errpuc(\"outofmem\", \"Out of memory\");\n\n\tfor (i = 0; i < img_len; ++i)\n\t\treduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling\n\n\tSTBI_FREE(orig);\n\treturn reduced;\n}\n\nstatic stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels)\n{\n\tint i;\n\tint img_len = w * h * channels;\n\tstbi__uint16 *enlarged;\n\n\tenlarged = (stbi__uint16 *)stbi__malloc(img_len * 2);\n\tif (enlarged == NULL) return (stbi__uint16 *)stbi__errpuc(\"outofmem\", \"Out of memory\");\n\n\tfor (i = 0; i < img_len; ++i)\n\t\tenlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff\n\n\tSTBI_FREE(orig);\n\treturn enlarged;\n}\n\nstatic void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel)\n{\n\tint row;\n\tsize_t bytes_per_row = (size_t)w * bytes_per_pixel;\n\tstbi_uc temp[2048];\n\tstbi_uc *bytes = (stbi_uc *)image;\n\n\tfor (row = 0; row < (h >> 1); row++) {\n\t\tstbi_uc *row0 = bytes + row * bytes_per_row;\n\t\tstbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row;\n\t\t// swap row0 with row1\n\t\tsize_t bytes_left = bytes_per_row;\n\t\twhile (bytes_left) {\n\t\t\tsize_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp);\n\t\t\tmemcpy(temp, row0, bytes_copy);\n\t\t\tmemcpy(row0, row1, bytes_copy);\n\t\t\tmemcpy(row1, temp, bytes_copy);\n\t\t\trow0 += bytes_copy;\n\t\t\trow1 += bytes_copy;\n\t\t\tbytes_left -= bytes_copy;\n\t\t}\n\t}\n}\n\n#ifndef STBI_NO_GIF\nstatic void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel)\n{\n\tint slice;\n\tint slice_size = w * h * bytes_per_pixel;\n\n\tstbi_uc *bytes = (stbi_uc *)image;\n\tfor (slice = 0; slice < z; ++slice) {\n\t\tstbi__vertical_flip(bytes, w, h, bytes_per_pixel);\n\t\tbytes += slice_size;\n\t}\n}\n#endif\n\nstatic unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__result_info ri;\n\tvoid *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8);\n\n\tif (result == NULL)\n\t\treturn NULL;\n\n\tif (ri.bits_per_channel != 8) {\n\t\tSTBI_ASSERT(ri.bits_per_channel == 16);\n\t\tresult = stbi__convert_16_to_8((stbi__uint16 *)result, *x, *y, req_comp == 0 ? *comp : req_comp);\n\t\tri.bits_per_channel = 8;\n\t}\n\n\t// @TODO: move stbi__convert_format to here\n\n\tif (stbi__vertically_flip_on_load) {\n\t\tint channels = req_comp ? req_comp : *comp;\n\t\tstbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc));\n\t}\n\n\treturn (unsigned char *)result;\n}\n\nstatic stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__result_info ri;\n\tvoid *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16);\n\n\tif (result == NULL)\n\t\treturn NULL;\n\n\tif (ri.bits_per_channel != 16) {\n\t\tSTBI_ASSERT(ri.bits_per_channel == 8);\n\t\tresult = stbi__convert_8_to_16((stbi_uc *)result, *x, *y, req_comp == 0 ? *comp : req_comp);\n\t\tri.bits_per_channel = 16;\n\t}\n\n\t// @TODO: move stbi__convert_format16 to here\n\t// @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision\n\n\tif (stbi__vertically_flip_on_load) {\n\t\tint channels = req_comp ? req_comp : *comp;\n\t\tstbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16));\n\t}\n\n\treturn (stbi__uint16 *)result;\n}\n\n#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR)\nstatic void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp)\n{\n\tif (stbi__vertically_flip_on_load && result != NULL) {\n\t\tint channels = req_comp ? req_comp : *comp;\n\t\tstbi__vertical_flip(result, *x, *y, channels * sizeof(float));\n\t}\n}\n#endif\n\n#ifndef STBI_NO_STDIO\n\n#if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8)\nSTBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide);\nSTBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default);\n#endif\n\n#if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8)\nSTBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input)\n{\n\treturn WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int)bufferlen, NULL, NULL);\n}\n#endif\n\nstatic FILE *stbi__fopen(char const *filename, char const *mode)\n{\n\tFILE *f;\n#if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8)\n\twchar_t wMode[64];\n\twchar_t wFilename[1024];\n\tif (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)))\n\t\treturn 0;\n\n\tif (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)))\n\t\treturn 0;\n\n#if _MSC_VER >= 1400\n\tif (0 != _wfopen_s(&f, wFilename, wMode))\n\t\tf = 0;\n#else\n\tf = _wfopen(wFilename, wMode);\n#endif\n\n#elif defined(_MSC_VER) && _MSC_VER >= 1400\n\tif (0 != fopen_s(&f, filename, mode))\n\t\tf = 0;\n#else\n\tf = fopen(filename, mode);\n#endif\n\treturn f;\n}\n\n\nSTBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp)\n{\n\tFILE *f = stbi__fopen(filename, \"rb\");\n\tunsigned char *result;\n\tif (!f) return stbi__errpuc(\"can't fopen\", \"Unable to open file\");\n\tresult = stbi_load_from_file(f, x, y, comp, req_comp);\n\tfclose(f);\n\treturn result;\n}\n\nSTBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)\n{\n\tunsigned char *result;\n\tstbi__context s;\n\tstbi__start_file(&s, f);\n\tresult = stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp);\n\tif (result) {\n\t\t// need to 'unget' all the characters in the IO buffer\n\t\tfseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR);\n\t}\n\treturn result;\n}\n\nSTBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__uint16 *result;\n\tstbi__context s;\n\tstbi__start_file(&s, f);\n\tresult = stbi__load_and_postprocess_16bit(&s, x, y, comp, req_comp);\n\tif (result) {\n\t\t// need to 'unget' all the characters in the IO buffer\n\t\tfseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR);\n\t}\n\treturn result;\n}\n\nSTBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp)\n{\n\tFILE *f = stbi__fopen(filename, \"rb\");\n\tstbi__uint16 *result;\n\tif (!f) return (stbi_us *)stbi__errpuc(\"can't fopen\", \"Unable to open file\");\n\tresult = stbi_load_from_file_16(f, x, y, comp, req_comp);\n\tfclose(f);\n\treturn result;\n}\n\n\n#endif //!STBI_NO_STDIO\n\nSTBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels)\n{\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\treturn stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, desired_channels);\n}\n\nSTBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels)\n{\n\tstbi__context s;\n\tstbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user);\n\treturn stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, desired_channels);\n}\n\nSTBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\treturn stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp);\n}\n\nSTBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__context s;\n\tstbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user);\n\treturn stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp);\n}\n\n#ifndef STBI_NO_GIF\nSTBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp)\n{\n\tunsigned char *result;\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\n\tresult = (unsigned char*)stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp);\n\tif (stbi__vertically_flip_on_load) {\n\t\tstbi__vertical_flip_slices(result, *x, *y, *z, *comp);\n\t}\n\n\treturn result;\n}\n#endif\n\n#ifndef STBI_NO_LINEAR\nstatic float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)\n{\n\tunsigned char *data;\n#ifndef STBI_NO_HDR\n\tif (stbi__hdr_test(s)) {\n\t\tstbi__result_info ri;\n\t\tfloat *hdr_data = stbi__hdr_load(s, x, y, comp, req_comp, &ri);\n\t\tif (hdr_data)\n\t\t\tstbi__float_postprocess(hdr_data, x, y, comp, req_comp);\n\t\treturn hdr_data;\n\t}\n#endif\n\tdata = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp);\n\tif (data)\n\t\treturn stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp);\n\treturn stbi__errpf(\"unknown image type\", \"Image not of any known type, or corrupt\");\n}\n\nSTBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\treturn stbi__loadf_main(&s, x, y, comp, req_comp);\n}\n\nSTBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__context s;\n\tstbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user);\n\treturn stbi__loadf_main(&s, x, y, comp, req_comp);\n}\n\n#ifndef STBI_NO_STDIO\nSTBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp)\n{\n\tfloat *result;\n\tFILE *f = stbi__fopen(filename, \"rb\");\n\tif (!f) return stbi__errpf(\"can't fopen\", \"Unable to open file\");\n\tresult = stbi_loadf_from_file(f, x, y, comp, req_comp);\n\tfclose(f);\n\treturn result;\n}\n\nSTBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)\n{\n\tstbi__context s;\n\tstbi__start_file(&s, f);\n\treturn stbi__loadf_main(&s, x, y, comp, req_comp);\n}\n#endif // !STBI_NO_STDIO\n\n#endif // !STBI_NO_LINEAR\n\n// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is\n// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always\n// reports false!\n\nSTBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)\n{\n#ifndef STBI_NO_HDR\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\treturn stbi__hdr_test(&s);\n#else\n\tSTBI_NOTUSED(buffer);\n\tSTBI_NOTUSED(len);\n\treturn 0;\n#endif\n}\n\n#ifndef STBI_NO_STDIO\nSTBIDEF int      stbi_is_hdr(char const *filename)\n{\n\tFILE *f = stbi__fopen(filename, \"rb\");\n\tint result = 0;\n\tif (f) {\n\t\tresult = stbi_is_hdr_from_file(f);\n\t\tfclose(f);\n\t}\n\treturn result;\n}\n\nSTBIDEF int stbi_is_hdr_from_file(FILE *f)\n{\n#ifndef STBI_NO_HDR\n\tlong pos = ftell(f);\n\tint res;\n\tstbi__context s;\n\tstbi__start_file(&s, f);\n\tres = stbi__hdr_test(&s);\n\tfseek(f, pos, SEEK_SET);\n\treturn res;\n#else\n\tSTBI_NOTUSED(f);\n\treturn 0;\n#endif\n}\n#endif // !STBI_NO_STDIO\n\nSTBIDEF int      stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user)\n{\n#ifndef STBI_NO_HDR\n\tstbi__context s;\n\tstbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user);\n\treturn stbi__hdr_test(&s);\n#else\n\tSTBI_NOTUSED(clbk);\n\tSTBI_NOTUSED(user);\n\treturn 0;\n#endif\n}\n\n#ifndef STBI_NO_LINEAR\nstatic float stbi__l2h_gamma = 2.2f, stbi__l2h_scale = 1.0f;\n\nSTBIDEF void   stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; }\nSTBIDEF void   stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; }\n#endif\n\nstatic float stbi__h2l_gamma_i = 1.0f / 2.2f, stbi__h2l_scale_i = 1.0f;\n\nSTBIDEF void   stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1 / gamma; }\nSTBIDEF void   stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1 / scale; }\n\n\n//////////////////////////////////////////////////////////////////////////////\n//\n// Common code used by all image loaders\n//\n\nenum\n{\n\tSTBI__SCAN_load = 0,\n\tSTBI__SCAN_type,\n\tSTBI__SCAN_header\n};\n\nstatic void stbi__refill_buffer(stbi__context *s)\n{\n\tint n = (s->io.read)(s->io_user_data, (char*)s->buffer_start, s->buflen);\n\tif (n == 0) {\n\t\t// at end of file, treat same as if from memory, but need to handle case\n\t\t// where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file\n\t\ts->read_from_callbacks = 0;\n\t\ts->img_buffer = s->buffer_start;\n\t\ts->img_buffer_end = s->buffer_start + 1;\n\t\t*s->img_buffer = 0;\n\t}\n\telse {\n\t\ts->img_buffer = s->buffer_start;\n\t\ts->img_buffer_end = s->buffer_start + n;\n\t}\n}\n\nstbi_inline static stbi_uc stbi__get8(stbi__context *s)\n{\n\tif (s->img_buffer < s->img_buffer_end)\n\t\treturn *s->img_buffer++;\n\tif (s->read_from_callbacks) {\n\t\tstbi__refill_buffer(s);\n\t\treturn *s->img_buffer++;\n\t}\n\treturn 0;\n}\n\nstbi_inline static int stbi__at_eof(stbi__context *s)\n{\n\tif (s->io.read) {\n\t\tif (!(s->io.eof)(s->io_user_data)) return 0;\n\t\t// if feof() is true, check if buffer = end\n\t\t// special case: we've only got the special 0 character at the end\n\t\tif (s->read_from_callbacks == 0) return 1;\n\t}\n\n\treturn s->img_buffer >= s->img_buffer_end;\n}\n\nstatic void stbi__skip(stbi__context *s, int n)\n{\n\tif (n < 0) {\n\t\ts->img_buffer = s->img_buffer_end;\n\t\treturn;\n\t}\n\tif (s->io.read) {\n\t\tint blen = (int)(s->img_buffer_end - s->img_buffer);\n\t\tif (blen < n) {\n\t\t\ts->img_buffer = s->img_buffer_end;\n\t\t\t(s->io.skip)(s->io_user_data, n - blen);\n\t\t\treturn;\n\t\t}\n\t}\n\ts->img_buffer += n;\n}\n\nstatic int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)\n{\n\tif (s->io.read) {\n\t\tint blen = (int)(s->img_buffer_end - s->img_buffer);\n\t\tif (blen < n) {\n\t\t\tint res, count;\n\n\t\t\tmemcpy(buffer, s->img_buffer, blen);\n\n\t\t\tcount = (s->io.read)(s->io_user_data, (char*)buffer + blen, n - blen);\n\t\t\tres = (count == (n - blen));\n\t\t\ts->img_buffer = s->img_buffer_end;\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tif (s->img_buffer + n <= s->img_buffer_end) {\n\t\tmemcpy(buffer, s->img_buffer, n);\n\t\ts->img_buffer += n;\n\t\treturn 1;\n\t}\n\telse\n\t\treturn 0;\n}\n\nstatic int stbi__get16be(stbi__context *s)\n{\n\tint z = stbi__get8(s);\n\treturn (z << 8) + stbi__get8(s);\n}\n\nstatic stbi__uint32 stbi__get32be(stbi__context *s)\n{\n\tstbi__uint32 z = stbi__get16be(s);\n\treturn (z << 16) + stbi__get16be(s);\n}\n\n#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF)\n// nothing\n#else\nstatic int stbi__get16le(stbi__context *s)\n{\n\tint z = stbi__get8(s);\n\treturn z + (stbi__get8(s) << 8);\n}\n#endif\n\n#ifndef STBI_NO_BMP\nstatic stbi__uint32 stbi__get32le(stbi__context *s)\n{\n\tstbi__uint32 z = stbi__get16le(s);\n\treturn z + (stbi__get16le(s) << 16);\n}\n#endif\n\n#define STBI__BYTECAST(x)  ((stbi_uc) ((x) & 255))  // truncate int to byte without warnings\n\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//  generic converter from built-in img_n to req_comp\n//    individual types do this automatically as much as possible (e.g. jpeg\n//    does all cases internally since it needs to colorspace convert anyway,\n//    and it never has alpha, so very few cases ). png can automatically\n//    interleave an alpha=255 channel, but falls back to this for other cases\n//\n//  assume data buffer is malloced, so malloc a new one and free that one\n//  only failure mode is malloc failing\n\nstatic stbi_uc stbi__compute_y(int r, int g, int b)\n{\n\treturn (stbi_uc)(((r * 77) + (g * 150) + (29 * b)) >> 8);\n}\n\nstatic unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y)\n{\n\tint i, j;\n\tunsigned char *good;\n\n\tif (req_comp == img_n) return data;\n\tSTBI_ASSERT(req_comp >= 1 && req_comp <= 4);\n\n\tgood = (unsigned char *)stbi__malloc_mad3(req_comp, x, y, 0);\n\tif (good == NULL) {\n\t\tSTBI_FREE(data);\n\t\treturn stbi__errpuc(\"outofmem\", \"Out of memory\");\n\t}\n\n\tfor (j = 0; j < (int)y; ++j) {\n\t\tunsigned char *src = data + j * x * img_n;\n\t\tunsigned char *dest = good + j * x * req_comp;\n\n#define STBI__COMBO(a,b)  ((a)*8+(b))\n#define STBI__CASE(a,b)   case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)\n\t\t// convert source image with img_n components to one with req_comp components;\n\t\t// avoid switch per pixel, so use switch per scanline and massive macros\n\t\tswitch (STBI__COMBO(img_n, req_comp)) {\n\t\t\tSTBI__CASE(1, 2) { dest[0] = src[0]; dest[1] = 255; } break;\n\t\t\tSTBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break;\n\t\t\tSTBI__CASE(1, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = 255; } break;\n\t\t\tSTBI__CASE(2, 1) { dest[0] = src[0]; } break;\n\t\t\tSTBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break;\n\t\t\tSTBI__CASE(2, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = src[1]; } break;\n\t\t\tSTBI__CASE(3, 4) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; dest[3] = 255; } break;\n\t\t\tSTBI__CASE(3, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } break;\n\t\t\tSTBI__CASE(3, 2) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); dest[1] = 255; } break;\n\t\t\tSTBI__CASE(4, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } break;\n\t\t\tSTBI__CASE(4, 2) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); dest[1] = src[3]; } break;\n\t\t\tSTBI__CASE(4, 3) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; } break;\n\t\tdefault: STBI_ASSERT(0);\n\t\t}\n#undef STBI__CASE\n\t}\n\n\tSTBI_FREE(data);\n\treturn good;\n}\n\nstatic stbi__uint16 stbi__compute_y_16(int r, int g, int b)\n{\n\treturn (stbi__uint16)(((r * 77) + (g * 150) + (29 * b)) >> 8);\n}\n\nstatic stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y)\n{\n\tint i, j;\n\tstbi__uint16 *good;\n\n\tif (req_comp == img_n) return data;\n\tSTBI_ASSERT(req_comp >= 1 && req_comp <= 4);\n\n\tgood = (stbi__uint16 *)stbi__malloc(req_comp * x * y * 2);\n\tif (good == NULL) {\n\t\tSTBI_FREE(data);\n\t\treturn (stbi__uint16 *)stbi__errpuc(\"outofmem\", \"Out of memory\");\n\t}\n\n\tfor (j = 0; j < (int)y; ++j) {\n\t\tstbi__uint16 *src = data + j * x * img_n;\n\t\tstbi__uint16 *dest = good + j * x * req_comp;\n\n#define STBI__COMBO(a,b)  ((a)*8+(b))\n#define STBI__CASE(a,b)   case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)\n\t\t// convert source image with img_n components to one with req_comp components;\n\t\t// avoid switch per pixel, so use switch per scanline and massive macros\n\t\tswitch (STBI__COMBO(img_n, req_comp)) {\n\t\t\tSTBI__CASE(1, 2) { dest[0] = src[0]; dest[1] = 0xffff; } break;\n\t\t\tSTBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break;\n\t\t\tSTBI__CASE(1, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = 0xffff; } break;\n\t\t\tSTBI__CASE(2, 1) { dest[0] = src[0]; } break;\n\t\t\tSTBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } break;\n\t\t\tSTBI__CASE(2, 4) { dest[0] = dest[1] = dest[2] = src[0]; dest[3] = src[1]; } break;\n\t\t\tSTBI__CASE(3, 4) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; dest[3] = 0xffff; } break;\n\t\t\tSTBI__CASE(3, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } break;\n\t\t\tSTBI__CASE(3, 2) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); dest[1] = 0xffff; } break;\n\t\t\tSTBI__CASE(4, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } break;\n\t\t\tSTBI__CASE(4, 2) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); dest[1] = src[3]; } break;\n\t\t\tSTBI__CASE(4, 3) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; } break;\n\t\tdefault: STBI_ASSERT(0);\n\t\t}\n#undef STBI__CASE\n\t}\n\n\tSTBI_FREE(data);\n\treturn good;\n}\n\n#ifndef STBI_NO_LINEAR\nstatic float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)\n{\n\tint i, k, n;\n\tfloat *output;\n\tif (!data) return NULL;\n\toutput = (float *)stbi__malloc_mad4(x, y, comp, sizeof(float), 0);\n\tif (output == NULL) { STBI_FREE(data); return stbi__errpf(\"outofmem\", \"Out of memory\"); }\n\t// compute number of non-alpha components\n\tif (comp & 1) n = comp; else n = comp - 1;\n\tfor (i = 0; i < x*y; ++i) {\n\t\tfor (k = 0; k < n; ++k) {\n\t\t\toutput[i*comp + k] = (float)(pow(data[i*comp + k] / 255.0f, stbi__l2h_gamma) * stbi__l2h_scale);\n\t\t}\n\t}\n\tif (n < comp) {\n\t\tfor (i = 0; i < x*y; ++i) {\n\t\t\toutput[i*comp + n] = data[i*comp + n] / 255.0f;\n\t\t}\n\t}\n\tSTBI_FREE(data);\n\treturn output;\n}\n#endif\n\n#ifndef STBI_NO_HDR\n#define stbi__float2int(x)   ((int) (x))\nstatic stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp)\n{\n\tint i, k, n;\n\tstbi_uc *output;\n\tif (!data) return NULL;\n\toutput = (stbi_uc *)stbi__malloc_mad3(x, y, comp, 0);\n\tif (output == NULL) { STBI_FREE(data); return stbi__errpuc(\"outofmem\", \"Out of memory\"); }\n\t// compute number of non-alpha components\n\tif (comp & 1) n = comp; else n = comp - 1;\n\tfor (i = 0; i < x*y; ++i) {\n\t\tfor (k = 0; k < n; ++k) {\n\t\t\tfloat z = (float)pow(data[i*comp + k] * stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f;\n\t\t\tif (z < 0) z = 0;\n\t\t\tif (z > 255) z = 255;\n\t\t\toutput[i*comp + k] = (stbi_uc)stbi__float2int(z);\n\t\t}\n\t\tif (k < comp) {\n\t\t\tfloat z = data[i*comp + k] * 255 + 0.5f;\n\t\t\tif (z < 0) z = 0;\n\t\t\tif (z > 255) z = 255;\n\t\t\toutput[i*comp + k] = (stbi_uc)stbi__float2int(z);\n\t\t}\n\t}\n\tSTBI_FREE(data);\n\treturn output;\n}\n#endif\n\n//////////////////////////////////////////////////////////////////////////////\n//\n//  \"baseline\" JPEG/JFIF decoder\n//\n//    simple implementation\n//      - doesn't support delayed output of y-dimension\n//      - simple interface (only one output format: 8-bit interleaved RGB)\n//      - doesn't try to recover corrupt jpegs\n//      - doesn't allow partial loading, loading multiple at once\n//      - still fast on x86 (copying globals into locals doesn't help x86)\n//      - allocates lots of intermediate memory (full size of all components)\n//        - non-interleaved case requires this anyway\n//        - allows good upsampling (see next)\n//    high-quality\n//      - upsampled channels are bilinearly interpolated, even across blocks\n//      - quality integer IDCT derived from IJG's 'slow'\n//    performance\n//      - fast huffman; reasonable integer IDCT\n//      - some SIMD kernels for common paths on targets with SSE2/NEON\n//      - uses a lot of intermediate memory, could cache poorly\n\n#ifndef STBI_NO_JPEG\n\n// huffman decoding acceleration\n#define FAST_BITS   9  // larger handles more cases; smaller stomps less cache\n\ntypedef struct\n{\n\tstbi_uc  fast[1 << FAST_BITS];\n\t// weirdly, repacking this into AoS is a 10% speed loss, instead of a win\n\tstbi__uint16 code[256];\n\tstbi_uc  values[256];\n\tstbi_uc  size[257];\n\tunsigned int maxcode[18];\n\tint    delta[17];   // old 'firstsymbol' - old 'firstcode'\n} stbi__huffman;\n\ntypedef struct\n{\n\tstbi__context *s;\n\tstbi__huffman huff_dc[4];\n\tstbi__huffman huff_ac[4];\n\tstbi__uint16 dequant[4][64];\n\tstbi__int16 fast_ac[4][1 << FAST_BITS];\n\n\t// sizes for components, interleaved MCUs\n\tint img_h_max, img_v_max;\n\tint img_mcu_x, img_mcu_y;\n\tint img_mcu_w, img_mcu_h;\n\n\t// definition of jpeg image component\n\tstruct\n\t{\n\t\tint id;\n\t\tint h, v;\n\t\tint tq;\n\t\tint hd, ha;\n\t\tint dc_pred;\n\n\t\tint x, y, w2, h2;\n\t\tstbi_uc *data;\n\t\tvoid *raw_data, *raw_coeff;\n\t\tstbi_uc *linebuf;\n\t\tshort   *coeff;   // progressive only\n\t\tint      coeff_w, coeff_h; // number of 8x8 coefficient blocks\n\t} img_comp[4];\n\n\tstbi__uint32   code_buffer; // jpeg entropy-coded buffer\n\tint            code_bits;   // number of valid bits\n\tunsigned char  marker;      // marker seen while filling entropy buffer\n\tint            nomore;      // flag if we saw a marker so must stop\n\n\tint            progressive;\n\tint            spec_start;\n\tint            spec_end;\n\tint            succ_high;\n\tint            succ_low;\n\tint            eob_run;\n\tint            jfif;\n\tint            app14_color_transform; // Adobe APP14 tag\n\tint            rgb;\n\n\tint scan_n, order[4];\n\tint restart_interval, todo;\n\n\t// kernels\n\tvoid(*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]);\n\tvoid(*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step);\n\tstbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs);\n} stbi__jpeg;\n\nstatic int stbi__build_huffman(stbi__huffman *h, int *count)\n{\n\tint i, j, k = 0;\n\tunsigned int code;\n\t// build size list for each symbol (from JPEG spec)\n\tfor (i = 0; i < 16; ++i)\n\t\tfor (j = 0; j < count[i]; ++j)\n\t\t\th->size[k++] = (stbi_uc)(i + 1);\n\th->size[k] = 0;\n\n\t// compute actual symbols (from jpeg spec)\n\tcode = 0;\n\tk = 0;\n\tfor (j = 1; j <= 16; ++j) {\n\t\t// compute delta to add to code to compute symbol id\n\t\th->delta[j] = k - code;\n\t\tif (h->size[k] == j) {\n\t\t\twhile (h->size[k] == j)\n\t\t\t\th->code[k++] = (stbi__uint16)(code++);\n\t\t\tif (code - 1 >= (1u << j)) return stbi__err(\"bad code lengths\", \"Corrupt JPEG\");\n\t\t}\n\t\t// compute largest code + 1 for this size, preshifted as needed later\n\t\th->maxcode[j] = code << (16 - j);\n\t\tcode <<= 1;\n\t}\n\th->maxcode[j] = 0xffffffff;\n\n\t// build non-spec acceleration table; 255 is flag for not-accelerated\n\tmemset(h->fast, 255, 1 << FAST_BITS);\n\tfor (i = 0; i < k; ++i) {\n\t\tint s = h->size[i];\n\t\tif (s <= FAST_BITS) {\n\t\t\tint c = h->code[i] << (FAST_BITS - s);\n\t\t\tint m = 1 << (FAST_BITS - s);\n\t\t\tfor (j = 0; j < m; ++j) {\n\t\t\t\th->fast[c + j] = (stbi_uc)i;\n\t\t\t}\n\t\t}\n\t}\n\treturn 1;\n}\n\n// build a table that decodes both magnitude and value of small ACs in\n// one go.\nstatic void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)\n{\n\tint i;\n\tfor (i = 0; i < (1 << FAST_BITS); ++i) {\n\t\tstbi_uc fast = h->fast[i];\n\t\tfast_ac[i] = 0;\n\t\tif (fast < 255) {\n\t\t\tint rs = h->values[fast];\n\t\t\tint run = (rs >> 4) & 15;\n\t\t\tint magbits = rs & 15;\n\t\t\tint len = h->size[fast];\n\n\t\t\tif (magbits && len + magbits <= FAST_BITS) {\n\t\t\t\t// magnitude code followed by receive_extend code\n\t\t\t\tint k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits);\n\t\t\t\tint m = 1 << (magbits - 1);\n\t\t\t\tif (k < m) k += (~0U << magbits) + 1;\n\t\t\t\t// if the result is small enough, we can fit it in fast_ac table\n\t\t\t\tif (k >= -128 && k <= 127)\n\t\t\t\t\tfast_ac[i] = (stbi__int16)((k * 256) + (run * 16) + (len + magbits));\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic void stbi__grow_buffer_unsafe(stbi__jpeg *j)\n{\n\tdo {\n\t\tunsigned int b = j->nomore ? 0 : stbi__get8(j->s);\n\t\tif (b == 0xff) {\n\t\t\tint c = stbi__get8(j->s);\n\t\t\twhile (c == 0xff) c = stbi__get8(j->s); // consume fill bytes\n\t\t\tif (c != 0) {\n\t\t\t\tj->marker = (unsigned char)c;\n\t\t\t\tj->nomore = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tj->code_buffer |= b << (24 - j->code_bits);\n\t\tj->code_bits += 8;\n\t} while (j->code_bits <= 24);\n}\n\n// (1 << n) - 1\nstatic const stbi__uint32 stbi__bmask[17] = { 0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535 };\n\n// decode a jpeg huffman value from the bitstream\nstbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h)\n{\n\tunsigned int temp;\n\tint c, k;\n\n\tif (j->code_bits < 16) stbi__grow_buffer_unsafe(j);\n\n\t// look at the top FAST_BITS and determine what symbol ID it is,\n\t// if the code is <= FAST_BITS\n\tc = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1);\n\tk = h->fast[c];\n\tif (k < 255) {\n\t\tint s = h->size[k];\n\t\tif (s > j->code_bits)\n\t\t\treturn -1;\n\t\tj->code_buffer <<= s;\n\t\tj->code_bits -= s;\n\t\treturn h->values[k];\n\t}\n\n\t// naive test is to shift the code_buffer down so k bits are\n\t// valid, then test against maxcode. To speed this up, we've\n\t// preshifted maxcode left so that it has (16-k) 0s at the\n\t// end; in other words, regardless of the number of bits, it\n\t// wants to be compared against something shifted to have 16;\n\t// that way we don't need to shift inside the loop.\n\ttemp = j->code_buffer >> 16;\n\tfor (k = FAST_BITS + 1; ; ++k)\n\t\tif (temp < h->maxcode[k])\n\t\t\tbreak;\n\tif (k == 17) {\n\t\t// error! code not found\n\t\tj->code_bits -= 16;\n\t\treturn -1;\n\t}\n\n\tif (k > j->code_bits)\n\t\treturn -1;\n\n\t// convert the huffman code to the symbol id\n\tc = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k];\n\tSTBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]);\n\n\t// convert the id to a symbol\n\tj->code_bits -= k;\n\tj->code_buffer <<= k;\n\treturn h->values[c];\n}\n\n// bias[n] = (-1<<n) + 1\nstatic const int stbi__jbias[16] = { 0,-1,-3,-7,-15,-31,-63,-127,-255,-511,-1023,-2047,-4095,-8191,-16383,-32767 };\n\n// combined JPEG 'receive' and JPEG 'extend', since baseline\n// always extends everything it receives.\nstbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)\n{\n\tunsigned int k;\n\tint sgn;\n\tif (j->code_bits < n) stbi__grow_buffer_unsafe(j);\n\n\tsgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB\n\tk = stbi_lrot(j->code_buffer, n);\n\tSTBI_ASSERT(n >= 0 && n < (int)(sizeof(stbi__bmask) / sizeof(*stbi__bmask)));\n\tj->code_buffer = k & ~stbi__bmask[n];\n\tk &= stbi__bmask[n];\n\tj->code_bits -= n;\n\treturn k + (stbi__jbias[n] & ~sgn);\n}\n\n// get some unsigned bits\nstbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n)\n{\n\tunsigned int k;\n\tif (j->code_bits < n) stbi__grow_buffer_unsafe(j);\n\tk = stbi_lrot(j->code_buffer, n);\n\tj->code_buffer = k & ~stbi__bmask[n];\n\tk &= stbi__bmask[n];\n\tj->code_bits -= n;\n\treturn k;\n}\n\nstbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j)\n{\n\tunsigned int k;\n\tif (j->code_bits < 1) stbi__grow_buffer_unsafe(j);\n\tk = j->code_buffer;\n\tj->code_buffer <<= 1;\n\t--j->code_bits;\n\treturn k & 0x80000000;\n}\n\n// given a value that's at position X in the zigzag stream,\n// where does it appear in the 8x8 matrix coded as row-major?\nstatic const stbi_uc stbi__jpeg_dezigzag[64 + 15] =\n{\n\t0,  1,  8, 16,  9,  2,  3, 10,\n   17, 24, 32, 25, 18, 11,  4,  5,\n   12, 19, 26, 33, 40, 48, 41, 34,\n   27, 20, 13,  6,  7, 14, 21, 28,\n   35, 42, 49, 56, 57, 50, 43, 36,\n   29, 22, 15, 23, 30, 37, 44, 51,\n   58, 59, 52, 45, 38, 31, 39, 46,\n   53, 60, 61, 54, 47, 55, 62, 63,\n   // let corrupt input sample past end\n   63, 63, 63, 63, 63, 63, 63, 63,\n   63, 63, 63, 63, 63, 63, 63\n};\n\n// decode one 64-entry block--\nstatic int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant)\n{\n\tint diff, dc, k;\n\tint t;\n\n\tif (j->code_bits < 16) stbi__grow_buffer_unsafe(j);\n\tt = stbi__jpeg_huff_decode(j, hdc);\n\tif (t < 0) return stbi__err(\"bad huffman code\", \"Corrupt JPEG\");\n\n\t// 0 all the ac values now so we can do it 32-bits at a time\n\tmemset(data, 0, 64 * sizeof(data[0]));\n\n\tdiff = t ? stbi__extend_receive(j, t) : 0;\n\tdc = j->img_comp[b].dc_pred + diff;\n\tj->img_comp[b].dc_pred = dc;\n\tdata[0] = (short)(dc * dequant[0]);\n\n\t// decode AC components, see JPEG spec\n\tk = 1;\n\tdo {\n\t\tunsigned int zig;\n\t\tint c, r, s;\n\t\tif (j->code_bits < 16) stbi__grow_buffer_unsafe(j);\n\t\tc = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1);\n\t\tr = fac[c];\n\t\tif (r) { // fast-AC path\n\t\t\tk += (r >> 4) & 15; // run\n\t\t\ts = r & 15; // combined length\n\t\t\tj->code_buffer <<= s;\n\t\t\tj->code_bits -= s;\n\t\t\t// decode into unzigzag'd location\n\t\t\tzig = stbi__jpeg_dezigzag[k++];\n\t\t\tdata[zig] = (short)((r >> 8) * dequant[zig]);\n\t\t}\n\t\telse {\n\t\t\tint rs = stbi__jpeg_huff_decode(j, hac);\n\t\t\tif (rs < 0) return stbi__err(\"bad huffman code\", \"Corrupt JPEG\");\n\t\t\ts = rs & 15;\n\t\t\tr = rs >> 4;\n\t\t\tif (s == 0) {\n\t\t\t\tif (rs != 0xf0) break; // end block\n\t\t\t\tk += 16;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tk += r;\n\t\t\t\t// decode into unzigzag'd location\n\t\t\t\tzig = stbi__jpeg_dezigzag[k++];\n\t\t\t\tdata[zig] = (short)(stbi__extend_receive(j, s) * dequant[zig]);\n\t\t\t}\n\t\t}\n\t} while (k < 64);\n\treturn 1;\n}\n\nstatic int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b)\n{\n\tint diff, dc;\n\tint t;\n\tif (j->spec_end != 0) return stbi__err(\"can't merge dc and ac\", \"Corrupt JPEG\");\n\n\tif (j->code_bits < 16) stbi__grow_buffer_unsafe(j);\n\n\tif (j->succ_high == 0) {\n\t\t// first scan for DC coefficient, must be first\n\t\tmemset(data, 0, 64 * sizeof(data[0])); // 0 all the ac values now\n\t\tt = stbi__jpeg_huff_decode(j, hdc);\n\t\tdiff = t ? stbi__extend_receive(j, t) : 0;\n\n\t\tdc = j->img_comp[b].dc_pred + diff;\n\t\tj->img_comp[b].dc_pred = dc;\n\t\tdata[0] = (short)(dc << j->succ_low);\n\t}\n\telse {\n\t\t// refinement scan for DC coefficient\n\t\tif (stbi__jpeg_get_bit(j))\n\t\t\tdata[0] += (short)(1 << j->succ_low);\n\t}\n\treturn 1;\n}\n\n// @OPTIMIZE: store non-zigzagged during the decode passes,\n// and only de-zigzag when dequantizing\nstatic int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac)\n{\n\tint k;\n\tif (j->spec_start == 0) return stbi__err(\"can't merge dc and ac\", \"Corrupt JPEG\");\n\n\tif (j->succ_high == 0) {\n\t\tint shift = j->succ_low;\n\n\t\tif (j->eob_run) {\n\t\t\t--j->eob_run;\n\t\t\treturn 1;\n\t\t}\n\n\t\tk = j->spec_start;\n\t\tdo {\n\t\t\tunsigned int zig;\n\t\t\tint c, r, s;\n\t\t\tif (j->code_bits < 16) stbi__grow_buffer_unsafe(j);\n\t\t\tc = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1);\n\t\t\tr = fac[c];\n\t\t\tif (r) { // fast-AC path\n\t\t\t\tk += (r >> 4) & 15; // run\n\t\t\t\ts = r & 15; // combined length\n\t\t\t\tj->code_buffer <<= s;\n\t\t\t\tj->code_bits -= s;\n\t\t\t\tzig = stbi__jpeg_dezigzag[k++];\n\t\t\t\tdata[zig] = (short)((r >> 8) << shift);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tint rs = stbi__jpeg_huff_decode(j, hac);\n\t\t\t\tif (rs < 0) return stbi__err(\"bad huffman code\", \"Corrupt JPEG\");\n\t\t\t\ts = rs & 15;\n\t\t\t\tr = rs >> 4;\n\t\t\t\tif (s == 0) {\n\t\t\t\t\tif (r < 15) {\n\t\t\t\t\t\tj->eob_run = (1 << r);\n\t\t\t\t\t\tif (r)\n\t\t\t\t\t\t\tj->eob_run += stbi__jpeg_get_bits(j, r);\n\t\t\t\t\t\t--j->eob_run;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tk += 16;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tk += r;\n\t\t\t\t\tzig = stbi__jpeg_dezigzag[k++];\n\t\t\t\t\tdata[zig] = (short)(stbi__extend_receive(j, s) << shift);\n\t\t\t\t}\n\t\t\t}\n\t\t} while (k <= j->spec_end);\n\t}\n\telse {\n\t\t// refinement scan for these AC coefficients\n\n\t\tshort bit = (short)(1 << j->succ_low);\n\n\t\tif (j->eob_run) {\n\t\t\t--j->eob_run;\n\t\t\tfor (k = j->spec_start; k <= j->spec_end; ++k) {\n\t\t\t\tshort *p = &data[stbi__jpeg_dezigzag[k]];\n\t\t\t\tif (*p != 0)\n\t\t\t\t\tif (stbi__jpeg_get_bit(j))\n\t\t\t\t\t\tif ((*p & bit) == 0) {\n\t\t\t\t\t\t\tif (*p > 0)\n\t\t\t\t\t\t\t\t*p += bit;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t*p -= bit;\n\t\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tk = j->spec_start;\n\t\t\tdo {\n\t\t\t\tint r, s;\n\t\t\t\tint rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh\n\t\t\t\tif (rs < 0) return stbi__err(\"bad huffman code\", \"Corrupt JPEG\");\n\t\t\t\ts = rs & 15;\n\t\t\t\tr = rs >> 4;\n\t\t\t\tif (s == 0) {\n\t\t\t\t\tif (r < 15) {\n\t\t\t\t\t\tj->eob_run = (1 << r) - 1;\n\t\t\t\t\t\tif (r)\n\t\t\t\t\t\t\tj->eob_run += stbi__jpeg_get_bits(j, r);\n\t\t\t\t\t\tr = 64; // force end of block\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// r=15 s=0 should write 16 0s, so we just do\n\t\t\t\t\t\t// a run of 15 0s and then write s (which is 0),\n\t\t\t\t\t\t// so we don't have to do anything special here\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (s != 1) return stbi__err(\"bad huffman code\", \"Corrupt JPEG\");\n\t\t\t\t\t// sign bit\n\t\t\t\t\tif (stbi__jpeg_get_bit(j))\n\t\t\t\t\t\ts = bit;\n\t\t\t\t\telse\n\t\t\t\t\t\ts = -bit;\n\t\t\t\t}\n\n\t\t\t\t// advance by r\n\t\t\t\twhile (k <= j->spec_end) {\n\t\t\t\t\tshort *p = &data[stbi__jpeg_dezigzag[k++]];\n\t\t\t\t\tif (*p != 0) {\n\t\t\t\t\t\tif (stbi__jpeg_get_bit(j))\n\t\t\t\t\t\t\tif ((*p & bit) == 0) {\n\t\t\t\t\t\t\t\tif (*p > 0)\n\t\t\t\t\t\t\t\t\t*p += bit;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t*p -= bit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (r == 0) {\n\t\t\t\t\t\t\t*p = (short)s;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t--r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (k <= j->spec_end);\n\t\t}\n\t}\n\treturn 1;\n}\n\n// take a -128..127 value and stbi__clamp it and convert to 0..255\nstbi_inline static stbi_uc stbi__clamp(int x)\n{\n\t// trick to use a single test to catch both cases\n\tif ((unsigned int)x > 255) {\n\t\tif (x < 0) return 0;\n\t\tif (x > 255) return 255;\n\t}\n\treturn (stbi_uc)x;\n}\n\n#define stbi__f2f(x)  ((int) (((x) * 4096 + 0.5)))\n#define stbi__fsh(x)  ((x) * 4096)\n\n// derived from jidctint -- DCT_ISLOW\n#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \\\n   int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \\\n   p2 = s2;                                    \\\n   p3 = s6;                                    \\\n   p1 = (p2+p3) * stbi__f2f(0.5411961f);       \\\n   t2 = p1 + p3*stbi__f2f(-1.847759065f);      \\\n   t3 = p1 + p2*stbi__f2f( 0.765366865f);      \\\n   p2 = s0;                                    \\\n   p3 = s4;                                    \\\n   t0 = stbi__fsh(p2+p3);                      \\\n   t1 = stbi__fsh(p2-p3);                      \\\n   x0 = t0+t3;                                 \\\n   x3 = t0-t3;                                 \\\n   x1 = t1+t2;                                 \\\n   x2 = t1-t2;                                 \\\n   t0 = s7;                                    \\\n   t1 = s5;                                    \\\n   t2 = s3;                                    \\\n   t3 = s1;                                    \\\n   p3 = t0+t2;                                 \\\n   p4 = t1+t3;                                 \\\n   p1 = t0+t3;                                 \\\n   p2 = t1+t2;                                 \\\n   p5 = (p3+p4)*stbi__f2f( 1.175875602f);      \\\n   t0 = t0*stbi__f2f( 0.298631336f);           \\\n   t1 = t1*stbi__f2f( 2.053119869f);           \\\n   t2 = t2*stbi__f2f( 3.072711026f);           \\\n   t3 = t3*stbi__f2f( 1.501321110f);           \\\n   p1 = p5 + p1*stbi__f2f(-0.899976223f);      \\\n   p2 = p5 + p2*stbi__f2f(-2.562915447f);      \\\n   p3 = p3*stbi__f2f(-1.961570560f);           \\\n   p4 = p4*stbi__f2f(-0.390180644f);           \\\n   t3 += p1+p4;                                \\\n   t2 += p2+p3;                                \\\n   t1 += p2+p4;                                \\\n   t0 += p1+p3;\n\nstatic void stbi__idct_block(stbi_uc *out, int out_stride, short data[64])\n{\n\tint i, val[64], *v = val;\n\tstbi_uc *o;\n\tshort *d = data;\n\n\t// columns\n\tfor (i = 0; i < 8; ++i, ++d, ++v) {\n\t\t// if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing\n\t\tif (d[8] == 0 && d[16] == 0 && d[24] == 0 && d[32] == 0\n\t\t\t&& d[40] == 0 && d[48] == 0 && d[56] == 0) {\n\t\t\t//    no shortcut                 0     seconds\n\t\t\t//    (1|2|3|4|5|6|7)==0          0     seconds\n\t\t\t//    all separate               -0.047 seconds\n\t\t\t//    1 && 2|3 && 4|5 && 6|7:    -0.047 seconds\n\t\t\tint dcterm = d[0] * 4;\n\t\t\tv[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm;\n\t\t}\n\t\telse {\n\t\t\tSTBI__IDCT_1D(d[0], d[8], d[16], d[24], d[32], d[40], d[48], d[56])\n\t\t\t\t// constants scaled things up by 1<<12; let's bring them back\n\t\t\t\t// down, but keep 2 extra bits of precision\n\t\t\t\tx0 += 512; x1 += 512; x2 += 512; x3 += 512;\n\t\t\tv[0] = (x0 + t3) >> 10;\n\t\t\tv[56] = (x0 - t3) >> 10;\n\t\t\tv[8] = (x1 + t2) >> 10;\n\t\t\tv[48] = (x1 - t2) >> 10;\n\t\t\tv[16] = (x2 + t1) >> 10;\n\t\t\tv[40] = (x2 - t1) >> 10;\n\t\t\tv[24] = (x3 + t0) >> 10;\n\t\t\tv[32] = (x3 - t0) >> 10;\n\t\t}\n\t}\n\n\tfor (i = 0, v = val, o = out; i < 8; ++i, v += 8, o += out_stride) {\n\t\t// no fast case since the first 1D IDCT spread components out\n\t\tSTBI__IDCT_1D(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7])\n\t\t\t// constants scaled things up by 1<<12, plus we had 1<<2 from first\n\t\t\t// loop, plus horizontal and vertical each scale by sqrt(8) so together\n\t\t\t// we've got an extra 1<<3, so 1<<17 total we need to remove.\n\t\t\t// so we want to round that, which means adding 0.5 * 1<<17,\n\t\t\t// aka 65536. Also, we'll end up with -128 to 127 that we want\n\t\t\t// to encode as 0..255 by adding 128, so we'll add that before the shift\n\t\t\tx0 += 65536 + (128 << 17);\n\t\tx1 += 65536 + (128 << 17);\n\t\tx2 += 65536 + (128 << 17);\n\t\tx3 += 65536 + (128 << 17);\n\t\t// tried computing the shifts into temps, or'ing the temps to see\n\t\t// if any were out of range, but that was slower\n\t\to[0] = stbi__clamp((x0 + t3) >> 17);\n\t\to[7] = stbi__clamp((x0 - t3) >> 17);\n\t\to[1] = stbi__clamp((x1 + t2) >> 17);\n\t\to[6] = stbi__clamp((x1 - t2) >> 17);\n\t\to[2] = stbi__clamp((x2 + t1) >> 17);\n\t\to[5] = stbi__clamp((x2 - t1) >> 17);\n\t\to[3] = stbi__clamp((x3 + t0) >> 17);\n\t\to[4] = stbi__clamp((x3 - t0) >> 17);\n\t}\n}\n\n#ifdef STBI_SSE2\n// sse2 integer IDCT. not the fastest possible implementation but it\n// produces bit-identical results to the generic C version so it's\n// fully \"transparent\".\nstatic void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])\n{\n\t// This is constructed to match our regular (generic) integer IDCT exactly.\n\t__m128i row0, row1, row2, row3, row4, row5, row6, row7;\n\t__m128i tmp;\n\n\t// dot product constant: even elems=x, odd elems=y\n#define dct_const(x,y)  _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y))\n\n// out(0) = c0[even]*x + c0[odd]*y   (c0, x, y 16-bit, out 32-bit)\n// out(1) = c1[even]*x + c1[odd]*y\n#define dct_rot(out0,out1, x,y,c0,c1) \\\n      __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \\\n      __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \\\n      __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \\\n      __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \\\n      __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \\\n      __m128i out1##_h = _mm_madd_epi16(c0##hi, c1)\n\n   // out = in << 12  (in 16-bit, out 32-bit)\n#define dct_widen(out, in) \\\n      __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \\\n      __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4)\n\n   // wide add\n#define dct_wadd(out, a, b) \\\n      __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \\\n      __m128i out##_h = _mm_add_epi32(a##_h, b##_h)\n\n   // wide sub\n#define dct_wsub(out, a, b) \\\n      __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \\\n      __m128i out##_h = _mm_sub_epi32(a##_h, b##_h)\n\n   // butterfly a/b, add bias, then shift by \"s\" and pack\n#define dct_bfly32o(out0, out1, a,b,bias,s) \\\n      { \\\n         __m128i abiased_l = _mm_add_epi32(a##_l, bias); \\\n         __m128i abiased_h = _mm_add_epi32(a##_h, bias); \\\n         dct_wadd(sum, abiased, b); \\\n         dct_wsub(dif, abiased, b); \\\n         out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \\\n         out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \\\n      }\n\n   // 8-bit interleave step (for transposes)\n#define dct_interleave8(a, b) \\\n      tmp = a; \\\n      a = _mm_unpacklo_epi8(a, b); \\\n      b = _mm_unpackhi_epi8(tmp, b)\n\n   // 16-bit interleave step (for transposes)\n#define dct_interleave16(a, b) \\\n      tmp = a; \\\n      a = _mm_unpacklo_epi16(a, b); \\\n      b = _mm_unpackhi_epi16(tmp, b)\n\n#define dct_pass(bias,shift) \\\n      { \\\n         /* even part */ \\\n         dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \\\n         __m128i sum04 = _mm_add_epi16(row0, row4); \\\n         __m128i dif04 = _mm_sub_epi16(row0, row4); \\\n         dct_widen(t0e, sum04); \\\n         dct_widen(t1e, dif04); \\\n         dct_wadd(x0, t0e, t3e); \\\n         dct_wsub(x3, t0e, t3e); \\\n         dct_wadd(x1, t1e, t2e); \\\n         dct_wsub(x2, t1e, t2e); \\\n         /* odd part */ \\\n         dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \\\n         dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \\\n         __m128i sum17 = _mm_add_epi16(row1, row7); \\\n         __m128i sum35 = _mm_add_epi16(row3, row5); \\\n         dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \\\n         dct_wadd(x4, y0o, y4o); \\\n         dct_wadd(x5, y1o, y5o); \\\n         dct_wadd(x6, y2o, y5o); \\\n         dct_wadd(x7, y3o, y4o); \\\n         dct_bfly32o(row0,row7, x0,x7,bias,shift); \\\n         dct_bfly32o(row1,row6, x1,x6,bias,shift); \\\n         dct_bfly32o(row2,row5, x2,x5,bias,shift); \\\n         dct_bfly32o(row3,row4, x3,x4,bias,shift); \\\n      }\n\n\t__m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f));\n\t__m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f(0.765366865f), stbi__f2f(0.5411961f));\n\t__m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f));\n\t__m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f));\n\t__m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f(0.298631336f), stbi__f2f(-1.961570560f));\n\t__m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f(3.072711026f));\n\t__m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f(2.053119869f), stbi__f2f(-0.390180644f));\n\t__m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f(1.501321110f));\n\n\t// rounding biases in column/row passes, see stbi__idct_block for explanation.\n\t__m128i bias_0 = _mm_set1_epi32(512);\n\t__m128i bias_1 = _mm_set1_epi32(65536 + (128 << 17));\n\n\t// load\n\trow0 = _mm_load_si128((const __m128i *) (data + 0 * 8));\n\trow1 = _mm_load_si128((const __m128i *) (data + 1 * 8));\n\trow2 = _mm_load_si128((const __m128i *) (data + 2 * 8));\n\trow3 = _mm_load_si128((const __m128i *) (data + 3 * 8));\n\trow4 = _mm_load_si128((const __m128i *) (data + 4 * 8));\n\trow5 = _mm_load_si128((const __m128i *) (data + 5 * 8));\n\trow6 = _mm_load_si128((const __m128i *) (data + 6 * 8));\n\trow7 = _mm_load_si128((const __m128i *) (data + 7 * 8));\n\n\t// column pass\n\tdct_pass(bias_0, 10);\n\n\t{\n\t\t// 16bit 8x8 transpose pass 1\n\t\tdct_interleave16(row0, row4);\n\t\tdct_interleave16(row1, row5);\n\t\tdct_interleave16(row2, row6);\n\t\tdct_interleave16(row3, row7);\n\n\t\t// transpose pass 2\n\t\tdct_interleave16(row0, row2);\n\t\tdct_interleave16(row1, row3);\n\t\tdct_interleave16(row4, row6);\n\t\tdct_interleave16(row5, row7);\n\n\t\t// transpose pass 3\n\t\tdct_interleave16(row0, row1);\n\t\tdct_interleave16(row2, row3);\n\t\tdct_interleave16(row4, row5);\n\t\tdct_interleave16(row6, row7);\n\t}\n\n\t// row pass\n\tdct_pass(bias_1, 17);\n\n\t{\n\t\t// pack\n\t\t__m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7\n\t\t__m128i p1 = _mm_packus_epi16(row2, row3);\n\t\t__m128i p2 = _mm_packus_epi16(row4, row5);\n\t\t__m128i p3 = _mm_packus_epi16(row6, row7);\n\n\t\t// 8bit 8x8 transpose pass 1\n\t\tdct_interleave8(p0, p2); // a0e0a1e1...\n\t\tdct_interleave8(p1, p3); // c0g0c1g1...\n\n\t\t// transpose pass 2\n\t\tdct_interleave8(p0, p1); // a0c0e0g0...\n\t\tdct_interleave8(p2, p3); // b0d0f0h0...\n\n\t\t// transpose pass 3\n\t\tdct_interleave8(p0, p2); // a0b0c0d0...\n\t\tdct_interleave8(p1, p3); // a4b4c4d4...\n\n\t\t// store\n\t\t_mm_storel_epi64((__m128i *) out, p0); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, p2); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, p1); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, p3); out += out_stride;\n\t\t_mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e));\n\t}\n\n#undef dct_const\n#undef dct_rot\n#undef dct_widen\n#undef dct_wadd\n#undef dct_wsub\n#undef dct_bfly32o\n#undef dct_interleave8\n#undef dct_interleave16\n#undef dct_pass\n}\n\n#endif // STBI_SSE2\n\n#ifdef STBI_NEON\n\n// NEON integer IDCT. should produce bit-identical\n// results to the generic C version.\nstatic void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])\n{\n\tint16x8_t row0, row1, row2, row3, row4, row5, row6, row7;\n\n\tint16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f));\n\tint16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f));\n\tint16x4_t rot0_2 = vdup_n_s16(stbi__f2f(0.765366865f));\n\tint16x4_t rot1_0 = vdup_n_s16(stbi__f2f(1.175875602f));\n\tint16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f));\n\tint16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f));\n\tint16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f));\n\tint16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f));\n\tint16x4_t rot3_0 = vdup_n_s16(stbi__f2f(0.298631336f));\n\tint16x4_t rot3_1 = vdup_n_s16(stbi__f2f(2.053119869f));\n\tint16x4_t rot3_2 = vdup_n_s16(stbi__f2f(3.072711026f));\n\tint16x4_t rot3_3 = vdup_n_s16(stbi__f2f(1.501321110f));\n\n#define dct_long_mul(out, inq, coeff) \\\n   int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \\\n   int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff)\n\n#define dct_long_mac(out, acc, inq, coeff) \\\n   int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \\\n   int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff)\n\n#define dct_widen(out, inq) \\\n   int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \\\n   int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12)\n\n\t// wide add\n#define dct_wadd(out, a, b) \\\n   int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \\\n   int32x4_t out##_h = vaddq_s32(a##_h, b##_h)\n\n// wide sub\n#define dct_wsub(out, a, b) \\\n   int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \\\n   int32x4_t out##_h = vsubq_s32(a##_h, b##_h)\n\n// butterfly a/b, then shift using \"shiftop\" by \"s\" and pack\n#define dct_bfly32o(out0,out1, a,b,shiftop,s) \\\n   { \\\n      dct_wadd(sum, a, b); \\\n      dct_wsub(dif, a, b); \\\n      out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \\\n      out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \\\n   }\n\n#define dct_pass(shiftop, shift) \\\n   { \\\n      /* even part */ \\\n      int16x8_t sum26 = vaddq_s16(row2, row6); \\\n      dct_long_mul(p1e, sum26, rot0_0); \\\n      dct_long_mac(t2e, p1e, row6, rot0_1); \\\n      dct_long_mac(t3e, p1e, row2, rot0_2); \\\n      int16x8_t sum04 = vaddq_s16(row0, row4); \\\n      int16x8_t dif04 = vsubq_s16(row0, row4); \\\n      dct_widen(t0e, sum04); \\\n      dct_widen(t1e, dif04); \\\n      dct_wadd(x0, t0e, t3e); \\\n      dct_wsub(x3, t0e, t3e); \\\n      dct_wadd(x1, t1e, t2e); \\\n      dct_wsub(x2, t1e, t2e); \\\n      /* odd part */ \\\n      int16x8_t sum15 = vaddq_s16(row1, row5); \\\n      int16x8_t sum17 = vaddq_s16(row1, row7); \\\n      int16x8_t sum35 = vaddq_s16(row3, row5); \\\n      int16x8_t sum37 = vaddq_s16(row3, row7); \\\n      int16x8_t sumodd = vaddq_s16(sum17, sum35); \\\n      dct_long_mul(p5o, sumodd, rot1_0); \\\n      dct_long_mac(p1o, p5o, sum17, rot1_1); \\\n      dct_long_mac(p2o, p5o, sum35, rot1_2); \\\n      dct_long_mul(p3o, sum37, rot2_0); \\\n      dct_long_mul(p4o, sum15, rot2_1); \\\n      dct_wadd(sump13o, p1o, p3o); \\\n      dct_wadd(sump24o, p2o, p4o); \\\n      dct_wadd(sump23o, p2o, p3o); \\\n      dct_wadd(sump14o, p1o, p4o); \\\n      dct_long_mac(x4, sump13o, row7, rot3_0); \\\n      dct_long_mac(x5, sump24o, row5, rot3_1); \\\n      dct_long_mac(x6, sump23o, row3, rot3_2); \\\n      dct_long_mac(x7, sump14o, row1, rot3_3); \\\n      dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \\\n      dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \\\n      dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \\\n      dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \\\n   }\n\n   // load\n\trow0 = vld1q_s16(data + 0 * 8);\n\trow1 = vld1q_s16(data + 1 * 8);\n\trow2 = vld1q_s16(data + 2 * 8);\n\trow3 = vld1q_s16(data + 3 * 8);\n\trow4 = vld1q_s16(data + 4 * 8);\n\trow5 = vld1q_s16(data + 5 * 8);\n\trow6 = vld1q_s16(data + 6 * 8);\n\trow7 = vld1q_s16(data + 7 * 8);\n\n\t// add DC bias\n\trow0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0));\n\n\t// column pass\n\tdct_pass(vrshrn_n_s32, 10);\n\n\t// 16bit 8x8 transpose\n\t{\n\t\t// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively.\n\t\t// whether compilers actually get this is another story, sadly.\n#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; }\n#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); }\n#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); }\n\n\t  // pass 1\n\t\tdct_trn16(row0, row1); // a0b0a2b2a4b4a6b6\n\t\tdct_trn16(row2, row3);\n\t\tdct_trn16(row4, row5);\n\t\tdct_trn16(row6, row7);\n\n\t\t// pass 2\n\t\tdct_trn32(row0, row2); // a0b0c0d0a4b4c4d4\n\t\tdct_trn32(row1, row3);\n\t\tdct_trn32(row4, row6);\n\t\tdct_trn32(row5, row7);\n\n\t\t// pass 3\n\t\tdct_trn64(row0, row4); // a0b0c0d0e0f0g0h0\n\t\tdct_trn64(row1, row5);\n\t\tdct_trn64(row2, row6);\n\t\tdct_trn64(row3, row7);\n\n#undef dct_trn16\n#undef dct_trn32\n#undef dct_trn64\n\t}\n\n\t// row pass\n\t// vrshrn_n_s32 only supports shifts up to 16, we need\n\t// 17. so do a non-rounding shift of 16 first then follow\n\t// up with a rounding shift by 1.\n\tdct_pass(vshrn_n_s32, 16);\n\n\t{\n\t\t// pack and round\n\t\tuint8x8_t p0 = vqrshrun_n_s16(row0, 1);\n\t\tuint8x8_t p1 = vqrshrun_n_s16(row1, 1);\n\t\tuint8x8_t p2 = vqrshrun_n_s16(row2, 1);\n\t\tuint8x8_t p3 = vqrshrun_n_s16(row3, 1);\n\t\tuint8x8_t p4 = vqrshrun_n_s16(row4, 1);\n\t\tuint8x8_t p5 = vqrshrun_n_s16(row5, 1);\n\t\tuint8x8_t p6 = vqrshrun_n_s16(row6, 1);\n\t\tuint8x8_t p7 = vqrshrun_n_s16(row7, 1);\n\n\t\t// again, these can translate into one instruction, but often don't.\n#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; }\n#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); }\n#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); }\n\n\t  // sadly can't use interleaved stores here since we only write\n\t  // 8 bytes to each scan line!\n\n\t  // 8x8 8-bit transpose pass 1\n\t\tdct_trn8_8(p0, p1);\n\t\tdct_trn8_8(p2, p3);\n\t\tdct_trn8_8(p4, p5);\n\t\tdct_trn8_8(p6, p7);\n\n\t\t// pass 2\n\t\tdct_trn8_16(p0, p2);\n\t\tdct_trn8_16(p1, p3);\n\t\tdct_trn8_16(p4, p6);\n\t\tdct_trn8_16(p5, p7);\n\n\t\t// pass 3\n\t\tdct_trn8_32(p0, p4);\n\t\tdct_trn8_32(p1, p5);\n\t\tdct_trn8_32(p2, p6);\n\t\tdct_trn8_32(p3, p7);\n\n\t\t// store\n\t\tvst1_u8(out, p0); out += out_stride;\n\t\tvst1_u8(out, p1); out += out_stride;\n\t\tvst1_u8(out, p2); out += out_stride;\n\t\tvst1_u8(out, p3); out += out_stride;\n\t\tvst1_u8(out, p4); out += out_stride;\n\t\tvst1_u8(out, p5); out += out_stride;\n\t\tvst1_u8(out, p6); out += out_stride;\n\t\tvst1_u8(out, p7);\n\n#undef dct_trn8_8\n#undef dct_trn8_16\n#undef dct_trn8_32\n\t}\n\n#undef dct_long_mul\n#undef dct_long_mac\n#undef dct_widen\n#undef dct_wadd\n#undef dct_wsub\n#undef dct_bfly32o\n#undef dct_pass\n}\n\n#endif // STBI_NEON\n\n#define STBI__MARKER_none  0xff\n// if there's a pending marker from the entropy stream, return that\n// otherwise, fetch from the stream and get a marker. if there's no\n// marker, return 0xff, which is never a valid marker value\nstatic stbi_uc stbi__get_marker(stbi__jpeg *j)\n{\n\tstbi_uc x;\n\tif (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; }\n\tx = stbi__get8(j->s);\n\tif (x != 0xff) return STBI__MARKER_none;\n\twhile (x == 0xff)\n\t\tx = stbi__get8(j->s); // consume repeated 0xff fill bytes\n\treturn x;\n}\n\n// in each scan, we'll have scan_n components, and the order\n// of the components is specified by order[]\n#define STBI__RESTART(x)     ((x) >= 0xd0 && (x) <= 0xd7)\n\n// after a restart interval, stbi__jpeg_reset the entropy decoder and\n// the dc prediction\nstatic void stbi__jpeg_reset(stbi__jpeg *j)\n{\n\tj->code_bits = 0;\n\tj->code_buffer = 0;\n\tj->nomore = 0;\n\tj->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0;\n\tj->marker = STBI__MARKER_none;\n\tj->todo = j->restart_interval ? j->restart_interval : 0x7fffffff;\n\tj->eob_run = 0;\n\t// no more than 1<<31 MCUs if no restart_interal? that's plenty safe,\n\t// since we don't even allow 1<<30 pixels\n}\n\nstatic int stbi__parse_entropy_coded_data(stbi__jpeg *z)\n{\n\tstbi__jpeg_reset(z);\n\tif (!z->progressive) {\n\t\tif (z->scan_n == 1) {\n\t\t\tint i, j;\n\t\t\tSTBI_SIMD_ALIGN(short, data[64]);\n\t\t\tint n = z->order[0];\n\t\t\t// non-interleaved data, we just need to process one block at a time,\n\t\t\t// in trivial scanline order\n\t\t\t// number of blocks to do just depends on how many actual \"pixels\" this\n\t\t\t// component has, independent of interleaved MCU blocking and such\n\t\t\tint w = (z->img_comp[n].x + 7) >> 3;\n\t\t\tint h = (z->img_comp[n].y + 7) >> 3;\n\t\t\tfor (j = 0; j < h; ++j) {\n\t\t\t\tfor (i = 0; i < w; ++i) {\n\t\t\t\t\tint ha = z->img_comp[n].ha;\n\t\t\t\t\tif (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, z->huff_ac + ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0;\n\t\t\t\t\tz->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2*j * 8 + i * 8, z->img_comp[n].w2, data);\n\t\t\t\t\t// every data block is an MCU, so countdown the restart interval\n\t\t\t\t\tif (--z->todo <= 0) {\n\t\t\t\t\t\tif (z->code_bits < 24) stbi__grow_buffer_unsafe(z);\n\t\t\t\t\t\t// if it's NOT a restart, then just bail, so we get corrupt data\n\t\t\t\t\t\t// rather than no data\n\t\t\t\t\t\tif (!STBI__RESTART(z->marker)) return 1;\n\t\t\t\t\t\tstbi__jpeg_reset(z);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t}\n\t\telse { // interleaved\n\t\t\tint i, j, k, x, y;\n\t\t\tSTBI_SIMD_ALIGN(short, data[64]);\n\t\t\tfor (j = 0; j < z->img_mcu_y; ++j) {\n\t\t\t\tfor (i = 0; i < z->img_mcu_x; ++i) {\n\t\t\t\t\t// scan an interleaved mcu... process scan_n components in order\n\t\t\t\t\tfor (k = 0; k < z->scan_n; ++k) {\n\t\t\t\t\t\tint n = z->order[k];\n\t\t\t\t\t\t// scan out an mcu's worth of this component; that's just determined\n\t\t\t\t\t\t// by the basic H and V specified for the component\n\t\t\t\t\t\tfor (y = 0; y < z->img_comp[n].v; ++y) {\n\t\t\t\t\t\t\tfor (x = 0; x < z->img_comp[n].h; ++x) {\n\t\t\t\t\t\t\t\tint x2 = (i*z->img_comp[n].h + x) * 8;\n\t\t\t\t\t\t\t\tint y2 = (j*z->img_comp[n].v + y) * 8;\n\t\t\t\t\t\t\t\tint ha = z->img_comp[n].ha;\n\t\t\t\t\t\t\t\tif (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, z->huff_ac + ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0;\n\t\t\t\t\t\t\t\tz->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2*y2 + x2, z->img_comp[n].w2, data);\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\t// after all interleaved components, that's an interleaved MCU,\n\t\t\t\t\t// so now count down the restart interval\n\t\t\t\t\tif (--z->todo <= 0) {\n\t\t\t\t\t\tif (z->code_bits < 24) stbi__grow_buffer_unsafe(z);\n\t\t\t\t\t\tif (!STBI__RESTART(z->marker)) return 1;\n\t\t\t\t\t\tstbi__jpeg_reset(z);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t}\n\t}\n\telse {\n\t\tif (z->scan_n == 1) {\n\t\t\tint i, j;\n\t\t\tint n = z->order[0];\n\t\t\t// non-interleaved data, we just need to process one block at a time,\n\t\t\t// in trivial scanline order\n\t\t\t// number of blocks to do just depends on how many actual \"pixels\" this\n\t\t\t// component has, independent of interleaved MCU blocking and such\n\t\t\tint w = (z->img_comp[n].x + 7) >> 3;\n\t\t\tint h = (z->img_comp[n].y + 7) >> 3;\n\t\t\tfor (j = 0; j < h; ++j) {\n\t\t\t\tfor (i = 0; i < w; ++i) {\n\t\t\t\t\tshort *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w);\n\t\t\t\t\tif (z->spec_start == 0) {\n\t\t\t\t\t\tif (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n))\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint ha = z->img_comp[n].ha;\n\t\t\t\t\t\tif (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha]))\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\t// every data block is an MCU, so countdown the restart interval\n\t\t\t\t\tif (--z->todo <= 0) {\n\t\t\t\t\t\tif (z->code_bits < 24) stbi__grow_buffer_unsafe(z);\n\t\t\t\t\t\tif (!STBI__RESTART(z->marker)) return 1;\n\t\t\t\t\t\tstbi__jpeg_reset(z);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t}\n\t\telse { // interleaved\n\t\t\tint i, j, k, x, y;\n\t\t\tfor (j = 0; j < z->img_mcu_y; ++j) {\n\t\t\t\tfor (i = 0; i < z->img_mcu_x; ++i) {\n\t\t\t\t\t// scan an interleaved mcu... process scan_n components in order\n\t\t\t\t\tfor (k = 0; k < z->scan_n; ++k) {\n\t\t\t\t\t\tint n = z->order[k];\n\t\t\t\t\t\t// scan out an mcu's worth of this component; that's just determined\n\t\t\t\t\t\t// by the basic H and V specified for the component\n\t\t\t\t\t\tfor (y = 0; y < z->img_comp[n].v; ++y) {\n\t\t\t\t\t\t\tfor (x = 0; x < z->img_comp[n].h; ++x) {\n\t\t\t\t\t\t\t\tint x2 = (i*z->img_comp[n].h + x);\n\t\t\t\t\t\t\t\tint y2 = (j*z->img_comp[n].v + y);\n\t\t\t\t\t\t\t\tshort *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w);\n\t\t\t\t\t\t\t\tif (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n))\n\t\t\t\t\t\t\t\t\treturn 0;\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\t// after all interleaved components, that's an interleaved MCU,\n\t\t\t\t\t// so now count down the restart interval\n\t\t\t\t\tif (--z->todo <= 0) {\n\t\t\t\t\t\tif (z->code_bits < 24) stbi__grow_buffer_unsafe(z);\n\t\t\t\t\t\tif (!STBI__RESTART(z->marker)) return 1;\n\t\t\t\t\t\tstbi__jpeg_reset(z);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t}\n\t}\n}\n\nstatic void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant)\n{\n\tint i;\n\tfor (i = 0; i < 64; ++i)\n\t\tdata[i] *= dequant[i];\n}\n\nstatic void stbi__jpeg_finish(stbi__jpeg *z)\n{\n\tif (z->progressive) {\n\t\t// dequantize and idct the data\n\t\tint i, j, n;\n\t\tfor (n = 0; n < z->s->img_n; ++n) {\n\t\t\tint w = (z->img_comp[n].x + 7) >> 3;\n\t\t\tint h = (z->img_comp[n].y + 7) >> 3;\n\t\t\tfor (j = 0; j < h; ++j) {\n\t\t\t\tfor (i = 0; i < w; ++i) {\n\t\t\t\t\tshort *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w);\n\t\t\t\t\tstbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]);\n\t\t\t\t\tz->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2*j * 8 + i * 8, z->img_comp[n].w2, data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic int stbi__process_marker(stbi__jpeg *z, int m)\n{\n\tint L;\n\tswitch (m) {\n\tcase STBI__MARKER_none: // no marker found\n\t\treturn stbi__err(\"expected marker\", \"Corrupt JPEG\");\n\n\tcase 0xDD: // DRI - specify restart interval\n\t\tif (stbi__get16be(z->s) != 4) return stbi__err(\"bad DRI len\", \"Corrupt JPEG\");\n\t\tz->restart_interval = stbi__get16be(z->s);\n\t\treturn 1;\n\n\tcase 0xDB: // DQT - define quantization table\n\t\tL = stbi__get16be(z->s) - 2;\n\t\twhile (L > 0) {\n\t\t\tint q = stbi__get8(z->s);\n\t\t\tint p = q >> 4, sixteen = (p != 0);\n\t\t\tint t = q & 15, i;\n\t\t\tif (p != 0 && p != 1) return stbi__err(\"bad DQT type\", \"Corrupt JPEG\");\n\t\t\tif (t > 3) return stbi__err(\"bad DQT table\", \"Corrupt JPEG\");\n\n\t\t\tfor (i = 0; i < 64; ++i)\n\t\t\t\tz->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s));\n\t\t\tL -= (sixteen ? 129 : 65);\n\t\t}\n\t\treturn L == 0;\n\n\tcase 0xC4: // DHT - define huffman table\n\t\tL = stbi__get16be(z->s) - 2;\n\t\twhile (L > 0) {\n\t\t\tstbi_uc *v;\n\t\t\tint sizes[16], i, n = 0;\n\t\t\tint q = stbi__get8(z->s);\n\t\t\tint tc = q >> 4;\n\t\t\tint th = q & 15;\n\t\t\tif (tc > 1 || th > 3) return stbi__err(\"bad DHT header\", \"Corrupt JPEG\");\n\t\t\tfor (i = 0; i < 16; ++i) {\n\t\t\t\tsizes[i] = stbi__get8(z->s);\n\t\t\t\tn += sizes[i];\n\t\t\t}\n\t\t\tL -= 17;\n\t\t\tif (tc == 0) {\n\t\t\t\tif (!stbi__build_huffman(z->huff_dc + th, sizes)) return 0;\n\t\t\t\tv = z->huff_dc[th].values;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!stbi__build_huffman(z->huff_ac + th, sizes)) return 0;\n\t\t\t\tv = z->huff_ac[th].values;\n\t\t\t}\n\t\t\tfor (i = 0; i < n; ++i)\n\t\t\t\tv[i] = stbi__get8(z->s);\n\t\t\tif (tc != 0)\n\t\t\t\tstbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th);\n\t\t\tL -= n;\n\t\t}\n\t\treturn L == 0;\n\t}\n\n\t// check for comment block or APP blocks\n\tif ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) {\n\t\tL = stbi__get16be(z->s);\n\t\tif (L < 2) {\n\t\t\tif (m == 0xFE)\n\t\t\t\treturn stbi__err(\"bad COM len\", \"Corrupt JPEG\");\n\t\t\telse\n\t\t\t\treturn stbi__err(\"bad APP len\", \"Corrupt JPEG\");\n\t\t}\n\t\tL -= 2;\n\n\t\tif (m == 0xE0 && L >= 5) { // JFIF APP0 segment\n\t\t\tstatic const unsigned char tag[5] = { 'J','F','I','F','\\0' };\n\t\t\tint ok = 1;\n\t\t\tint i;\n\t\t\tfor (i = 0; i < 5; ++i)\n\t\t\t\tif (stbi__get8(z->s) != tag[i])\n\t\t\t\t\tok = 0;\n\t\t\tL -= 5;\n\t\t\tif (ok)\n\t\t\t\tz->jfif = 1;\n\t\t}\n\t\telse if (m == 0xEE && L >= 12) { // Adobe APP14 segment\n\t\t\tstatic const unsigned char tag[6] = { 'A','d','o','b','e','\\0' };\n\t\t\tint ok = 1;\n\t\t\tint i;\n\t\t\tfor (i = 0; i < 6; ++i)\n\t\t\t\tif (stbi__get8(z->s) != tag[i])\n\t\t\t\t\tok = 0;\n\t\t\tL -= 6;\n\t\t\tif (ok) {\n\t\t\t\tstbi__get8(z->s); // version\n\t\t\t\tstbi__get16be(z->s); // flags0\n\t\t\t\tstbi__get16be(z->s); // flags1\n\t\t\t\tz->app14_color_transform = stbi__get8(z->s); // color transform\n\t\t\t\tL -= 6;\n\t\t\t}\n\t\t}\n\n\t\tstbi__skip(z->s, L);\n\t\treturn 1;\n\t}\n\n\treturn stbi__err(\"unknown marker\", \"Corrupt JPEG\");\n}\n\n// after we see SOS\nstatic int stbi__process_scan_header(stbi__jpeg *z)\n{\n\tint i;\n\tint Ls = stbi__get16be(z->s);\n\tz->scan_n = stbi__get8(z->s);\n\tif (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int)z->s->img_n) return stbi__err(\"bad SOS component count\", \"Corrupt JPEG\");\n\tif (Ls != 6 + 2 * z->scan_n) return stbi__err(\"bad SOS len\", \"Corrupt JPEG\");\n\tfor (i = 0; i < z->scan_n; ++i) {\n\t\tint id = stbi__get8(z->s), which;\n\t\tint q = stbi__get8(z->s);\n\t\tfor (which = 0; which < z->s->img_n; ++which)\n\t\t\tif (z->img_comp[which].id == id)\n\t\t\t\tbreak;\n\t\tif (which == z->s->img_n) return 0; // no match\n\t\tz->img_comp[which].hd = q >> 4;   if (z->img_comp[which].hd > 3) return stbi__err(\"bad DC huff\", \"Corrupt JPEG\");\n\t\tz->img_comp[which].ha = q & 15;   if (z->img_comp[which].ha > 3) return stbi__err(\"bad AC huff\", \"Corrupt JPEG\");\n\t\tz->order[i] = which;\n\t}\n\n\t{\n\t\tint aa;\n\t\tz->spec_start = stbi__get8(z->s);\n\t\tz->spec_end = stbi__get8(z->s); // should be 63, but might be 0\n\t\taa = stbi__get8(z->s);\n\t\tz->succ_high = (aa >> 4);\n\t\tz->succ_low = (aa & 15);\n\t\tif (z->progressive) {\n\t\t\tif (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13)\n\t\t\t\treturn stbi__err(\"bad SOS\", \"Corrupt JPEG\");\n\t\t}\n\t\telse {\n\t\t\tif (z->spec_start != 0) return stbi__err(\"bad SOS\", \"Corrupt JPEG\");\n\t\t\tif (z->succ_high != 0 || z->succ_low != 0) return stbi__err(\"bad SOS\", \"Corrupt JPEG\");\n\t\t\tz->spec_end = 63;\n\t\t}\n\t}\n\n\treturn 1;\n}\n\nstatic int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why)\n{\n\tint i;\n\tfor (i = 0; i < ncomp; ++i) {\n\t\tif (z->img_comp[i].raw_data) {\n\t\t\tSTBI_FREE(z->img_comp[i].raw_data);\n\t\t\tz->img_comp[i].raw_data = NULL;\n\t\t\tz->img_comp[i].data = NULL;\n\t\t}\n\t\tif (z->img_comp[i].raw_coeff) {\n\t\t\tSTBI_FREE(z->img_comp[i].raw_coeff);\n\t\t\tz->img_comp[i].raw_coeff = 0;\n\t\t\tz->img_comp[i].coeff = 0;\n\t\t}\n\t\tif (z->img_comp[i].linebuf) {\n\t\t\tSTBI_FREE(z->img_comp[i].linebuf);\n\t\t\tz->img_comp[i].linebuf = NULL;\n\t\t}\n\t}\n\treturn why;\n}\n\nstatic int stbi__process_frame_header(stbi__jpeg *z, int scan)\n{\n\tstbi__context *s = z->s;\n\tint Lf, p, i, q, h_max = 1, v_max = 1, c;\n\tLf = stbi__get16be(s);         if (Lf < 11) return stbi__err(\"bad SOF len\", \"Corrupt JPEG\"); // JPEG\n\tp = stbi__get8(s);            if (p != 8) return stbi__err(\"only 8-bit\", \"JPEG format not supported: 8-bit only\"); // JPEG baseline\n\ts->img_y = stbi__get16be(s);   if (s->img_y == 0) return stbi__err(\"no header height\", \"JPEG format not supported: delayed height\"); // Legal, but we don't handle it--but neither does IJG\n\ts->img_x = stbi__get16be(s);   if (s->img_x == 0) return stbi__err(\"0 width\", \"Corrupt JPEG\"); // JPEG requires\n\tc = stbi__get8(s);\n\tif (c != 3 && c != 1 && c != 4) return stbi__err(\"bad component count\", \"Corrupt JPEG\");\n\ts->img_n = c;\n\tfor (i = 0; i < c; ++i) {\n\t\tz->img_comp[i].data = NULL;\n\t\tz->img_comp[i].linebuf = NULL;\n\t}\n\n\tif (Lf != 8 + 3 * s->img_n) return stbi__err(\"bad SOF len\", \"Corrupt JPEG\");\n\n\tz->rgb = 0;\n\tfor (i = 0; i < s->img_n; ++i) {\n\t\tstatic const unsigned char rgb[3] = { 'R', 'G', 'B' };\n\t\tz->img_comp[i].id = stbi__get8(s);\n\t\tif (s->img_n == 3 && z->img_comp[i].id == rgb[i])\n\t\t\t++z->rgb;\n\t\tq = stbi__get8(s);\n\t\tz->img_comp[i].h = (q >> 4);  if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err(\"bad H\", \"Corrupt JPEG\");\n\t\tz->img_comp[i].v = q & 15;    if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err(\"bad V\", \"Corrupt JPEG\");\n\t\tz->img_comp[i].tq = stbi__get8(s);  if (z->img_comp[i].tq > 3) return stbi__err(\"bad TQ\", \"Corrupt JPEG\");\n\t}\n\n\tif (scan != STBI__SCAN_load) return 1;\n\n\tif (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err(\"too large\", \"Image too large to decode\");\n\n\tfor (i = 0; i < s->img_n; ++i) {\n\t\tif (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h;\n\t\tif (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v;\n\t}\n\n\t// compute interleaved mcu info\n\tz->img_h_max = h_max;\n\tz->img_v_max = v_max;\n\tz->img_mcu_w = h_max * 8;\n\tz->img_mcu_h = v_max * 8;\n\t// these sizes can't be more than 17 bits\n\tz->img_mcu_x = (s->img_x + z->img_mcu_w - 1) / z->img_mcu_w;\n\tz->img_mcu_y = (s->img_y + z->img_mcu_h - 1) / z->img_mcu_h;\n\n\tfor (i = 0; i < s->img_n; ++i) {\n\t\t// number of effective pixels (e.g. for non-interleaved MCU)\n\t\tz->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max - 1) / h_max;\n\t\tz->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max - 1) / v_max;\n\t\t// to simplify generation, we'll allocate enough memory to decode\n\t\t// the bogus oversized data from using interleaved MCUs and their\n\t\t// big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't\n\t\t// discard the extra data until colorspace conversion\n\t\t//\n\t\t// img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier)\n\t\t// so these muls can't overflow with 32-bit ints (which we require)\n\t\tz->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8;\n\t\tz->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8;\n\t\tz->img_comp[i].coeff = 0;\n\t\tz->img_comp[i].raw_coeff = 0;\n\t\tz->img_comp[i].linebuf = NULL;\n\t\tz->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15);\n\t\tif (z->img_comp[i].raw_data == NULL)\n\t\t\treturn stbi__free_jpeg_components(z, i + 1, stbi__err(\"outofmem\", \"Out of memory\"));\n\t\t// align blocks for idct using mmx/sse\n\t\tz->img_comp[i].data = (stbi_uc*)(((size_t)z->img_comp[i].raw_data + 15) & ~15);\n\t\tif (z->progressive) {\n\t\t\t// w2, h2 are multiples of 8 (see above)\n\t\t\tz->img_comp[i].coeff_w = z->img_comp[i].w2 / 8;\n\t\t\tz->img_comp[i].coeff_h = z->img_comp[i].h2 / 8;\n\t\t\tz->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15);\n\t\t\tif (z->img_comp[i].raw_coeff == NULL)\n\t\t\t\treturn stbi__free_jpeg_components(z, i + 1, stbi__err(\"outofmem\", \"Out of memory\"));\n\t\t\tz->img_comp[i].coeff = (short*)(((size_t)z->img_comp[i].raw_coeff + 15) & ~15);\n\t\t}\n\t}\n\n\treturn 1;\n}\n\n// use comparisons since in some cases we handle more than one case (e.g. SOF)\n#define stbi__DNL(x)         ((x) == 0xdc)\n#define stbi__SOI(x)         ((x) == 0xd8)\n#define stbi__EOI(x)         ((x) == 0xd9)\n#define stbi__SOF(x)         ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2)\n#define stbi__SOS(x)         ((x) == 0xda)\n\n#define stbi__SOF_progressive(x)   ((x) == 0xc2)\n\nstatic int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)\n{\n\tint m;\n\tz->jfif = 0;\n\tz->app14_color_transform = -1; // valid values are 0,1,2\n\tz->marker = STBI__MARKER_none; // initialize cached marker to empty\n\tm = stbi__get_marker(z);\n\tif (!stbi__SOI(m)) return stbi__err(\"no SOI\", \"Corrupt JPEG\");\n\tif (scan == STBI__SCAN_type) return 1;\n\tm = stbi__get_marker(z);\n\twhile (!stbi__SOF(m)) {\n\t\tif (!stbi__process_marker(z, m)) return 0;\n\t\tm = stbi__get_marker(z);\n\t\twhile (m == STBI__MARKER_none) {\n\t\t\t// some files have extra padding after their blocks, so ok, we'll scan\n\t\t\tif (stbi__at_eof(z->s)) return stbi__err(\"no SOF\", \"Corrupt JPEG\");\n\t\t\tm = stbi__get_marker(z);\n\t\t}\n\t}\n\tz->progressive = stbi__SOF_progressive(m);\n\tif (!stbi__process_frame_header(z, scan)) return 0;\n\treturn 1;\n}\n\n// decode image to YCbCr format\nstatic int stbi__decode_jpeg_image(stbi__jpeg *j)\n{\n\tint m;\n\tfor (m = 0; m < 4; m++) {\n\t\tj->img_comp[m].raw_data = NULL;\n\t\tj->img_comp[m].raw_coeff = NULL;\n\t}\n\tj->restart_interval = 0;\n\tif (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0;\n\tm = stbi__get_marker(j);\n\twhile (!stbi__EOI(m)) {\n\t\tif (stbi__SOS(m)) {\n\t\t\tif (!stbi__process_scan_header(j)) return 0;\n\t\t\tif (!stbi__parse_entropy_coded_data(j)) return 0;\n\t\t\tif (j->marker == STBI__MARKER_none) {\n\t\t\t\t// handle 0s at the end of image data from IP Kamera 9060\n\t\t\t\twhile (!stbi__at_eof(j->s)) {\n\t\t\t\t\tint x = stbi__get8(j->s);\n\t\t\t\t\tif (x == 255) {\n\t\t\t\t\t\tj->marker = stbi__get8(j->s);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0\n\t\t\t}\n\t\t}\n\t\telse if (stbi__DNL(m)) {\n\t\t\tint Ld = stbi__get16be(j->s);\n\t\t\tstbi__uint32 NL = stbi__get16be(j->s);\n\t\t\tif (Ld != 4) return stbi__err(\"bad DNL len\", \"Corrupt JPEG\");\n\t\t\tif (NL != j->s->img_y) return stbi__err(\"bad DNL height\", \"Corrupt JPEG\");\n\t\t}\n\t\telse {\n\t\t\tif (!stbi__process_marker(j, m)) return 0;\n\t\t}\n\t\tm = stbi__get_marker(j);\n\t}\n\tif (j->progressive)\n\t\tstbi__jpeg_finish(j);\n\treturn 1;\n}\n\n// static jfif-centered resampling (across block boundaries)\n\ntypedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1,\n\tint w, int hs);\n\n#define stbi__div4(x) ((stbi_uc) ((x) >> 2))\n\nstatic stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)\n{\n\tSTBI_NOTUSED(out);\n\tSTBI_NOTUSED(in_far);\n\tSTBI_NOTUSED(w);\n\tSTBI_NOTUSED(hs);\n\treturn in_near;\n}\n\nstatic stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)\n{\n\t// need to generate two samples vertically for every one in input\n\tint i;\n\tSTBI_NOTUSED(hs);\n\tfor (i = 0; i < w; ++i)\n\t\tout[i] = stbi__div4(3 * in_near[i] + in_far[i] + 2);\n\treturn out;\n}\n\nstatic stbi_uc*  stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)\n{\n\t// need to generate two samples horizontally for every one in input\n\tint i;\n\tstbi_uc *input = in_near;\n\n\tif (w == 1) {\n\t\t// if only one sample, can't do any interpolation\n\t\tout[0] = out[1] = input[0];\n\t\treturn out;\n\t}\n\n\tout[0] = input[0];\n\tout[1] = stbi__div4(input[0] * 3 + input[1] + 2);\n\tfor (i = 1; i < w - 1; ++i) {\n\t\tint n = 3 * input[i] + 2;\n\t\tout[i * 2 + 0] = stbi__div4(n + input[i - 1]);\n\t\tout[i * 2 + 1] = stbi__div4(n + input[i + 1]);\n\t}\n\tout[i * 2 + 0] = stbi__div4(input[w - 2] * 3 + input[w - 1] + 2);\n\tout[i * 2 + 1] = input[w - 1];\n\n\tSTBI_NOTUSED(in_far);\n\tSTBI_NOTUSED(hs);\n\n\treturn out;\n}\n\n#define stbi__div16(x) ((stbi_uc) ((x) >> 4))\n\nstatic stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)\n{\n\t// need to generate 2x2 samples for every one in input\n\tint i, t0, t1;\n\tif (w == 1) {\n\t\tout[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2);\n\t\treturn out;\n\t}\n\n\tt1 = 3 * in_near[0] + in_far[0];\n\tout[0] = stbi__div4(t1 + 2);\n\tfor (i = 1; i < w; ++i) {\n\t\tt0 = t1;\n\t\tt1 = 3 * in_near[i] + in_far[i];\n\t\tout[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8);\n\t\tout[i * 2] = stbi__div16(3 * t1 + t0 + 8);\n\t}\n\tout[w * 2 - 1] = stbi__div4(t1 + 2);\n\n\tSTBI_NOTUSED(hs);\n\n\treturn out;\n}\n\n#if defined(STBI_SSE2) || defined(STBI_NEON)\nstatic stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)\n{\n\t// need to generate 2x2 samples for every one in input\n\tint i = 0, t0, t1;\n\n\tif (w == 1) {\n\t\tout[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2);\n\t\treturn out;\n\t}\n\n\tt1 = 3 * in_near[0] + in_far[0];\n\t// process groups of 8 pixels for as long as we can.\n\t// note we can't handle the last pixel in a row in this loop\n\t// because we need to handle the filter boundary conditions.\n\tfor (; i < ((w - 1) & ~7); i += 8) {\n#if defined(STBI_SSE2)\n\t\t// load and perform the vertical filtering pass\n\t\t// this uses 3*x + y = 4*x + (y - x)\n\t\t__m128i zero = _mm_setzero_si128();\n\t\t__m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i));\n\t\t__m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i));\n\t\t__m128i farw = _mm_unpacklo_epi8(farb, zero);\n\t\t__m128i nearw = _mm_unpacklo_epi8(nearb, zero);\n\t\t__m128i diff = _mm_sub_epi16(farw, nearw);\n\t\t__m128i nears = _mm_slli_epi16(nearw, 2);\n\t\t__m128i curr = _mm_add_epi16(nears, diff); // current row\n\n\t\t// horizontal filter works the same based on shifted vers of current\n\t\t// row. \"prev\" is current row shifted right by 1 pixel; we need to\n\t\t// insert the previous pixel value (from t1).\n\t\t// \"next\" is current row shifted left by 1 pixel, with first pixel\n\t\t// of next block of 8 pixels added in.\n\t\t__m128i prv0 = _mm_slli_si128(curr, 2);\n\t\t__m128i nxt0 = _mm_srli_si128(curr, 2);\n\t\t__m128i prev = _mm_insert_epi16(prv0, t1, 0);\n\t\t__m128i next = _mm_insert_epi16(nxt0, 3 * in_near[i + 8] + in_far[i + 8], 7);\n\n\t\t// horizontal filter, polyphase implementation since it's convenient:\n\t\t// even pixels = 3*cur + prev = cur*4 + (prev - cur)\n\t\t// odd  pixels = 3*cur + next = cur*4 + (next - cur)\n\t\t// note the shared term.\n\t\t__m128i bias = _mm_set1_epi16(8);\n\t\t__m128i curs = _mm_slli_epi16(curr, 2);\n\t\t__m128i prvd = _mm_sub_epi16(prev, curr);\n\t\t__m128i nxtd = _mm_sub_epi16(next, curr);\n\t\t__m128i curb = _mm_add_epi16(curs, bias);\n\t\t__m128i even = _mm_add_epi16(prvd, curb);\n\t\t__m128i odd = _mm_add_epi16(nxtd, curb);\n\n\t\t// interleave even and odd pixels, then undo scaling.\n\t\t__m128i int0 = _mm_unpacklo_epi16(even, odd);\n\t\t__m128i int1 = _mm_unpackhi_epi16(even, odd);\n\t\t__m128i de0 = _mm_srli_epi16(int0, 4);\n\t\t__m128i de1 = _mm_srli_epi16(int1, 4);\n\n\t\t// pack and write output\n\t\t__m128i outv = _mm_packus_epi16(de0, de1);\n\t\t_mm_storeu_si128((__m128i *) (out + i * 2), outv);\n#elif defined(STBI_NEON)\n\t\t// load and perform the vertical filtering pass\n\t\t// this uses 3*x + y = 4*x + (y - x)\n\t\tuint8x8_t farb = vld1_u8(in_far + i);\n\t\tuint8x8_t nearb = vld1_u8(in_near + i);\n\t\tint16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb));\n\t\tint16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2));\n\t\tint16x8_t curr = vaddq_s16(nears, diff); // current row\n\n\t\t// horizontal filter works the same based on shifted vers of current\n\t\t// row. \"prev\" is current row shifted right by 1 pixel; we need to\n\t\t// insert the previous pixel value (from t1).\n\t\t// \"next\" is current row shifted left by 1 pixel, with first pixel\n\t\t// of next block of 8 pixels added in.\n\t\tint16x8_t prv0 = vextq_s16(curr, curr, 7);\n\t\tint16x8_t nxt0 = vextq_s16(curr, curr, 1);\n\t\tint16x8_t prev = vsetq_lane_s16(t1, prv0, 0);\n\t\tint16x8_t next = vsetq_lane_s16(3 * in_near[i + 8] + in_far[i + 8], nxt0, 7);\n\n\t\t// horizontal filter, polyphase implementation since it's convenient:\n\t\t// even pixels = 3*cur + prev = cur*4 + (prev - cur)\n\t\t// odd  pixels = 3*cur + next = cur*4 + (next - cur)\n\t\t// note the shared term.\n\t\tint16x8_t curs = vshlq_n_s16(curr, 2);\n\t\tint16x8_t prvd = vsubq_s16(prev, curr);\n\t\tint16x8_t nxtd = vsubq_s16(next, curr);\n\t\tint16x8_t even = vaddq_s16(curs, prvd);\n\t\tint16x8_t odd = vaddq_s16(curs, nxtd);\n\n\t\t// undo scaling and round, then store with even/odd phases interleaved\n\t\tuint8x8x2_t o;\n\t\to.val[0] = vqrshrun_n_s16(even, 4);\n\t\to.val[1] = vqrshrun_n_s16(odd, 4);\n\t\tvst2_u8(out + i * 2, o);\n#endif\n\n\t\t// \"previous\" value for next iter\n\t\tt1 = 3 * in_near[i + 7] + in_far[i + 7];\n\t}\n\n\tt0 = t1;\n\tt1 = 3 * in_near[i] + in_far[i];\n\tout[i * 2] = stbi__div16(3 * t1 + t0 + 8);\n\n\tfor (++i; i < w; ++i) {\n\t\tt0 = t1;\n\t\tt1 = 3 * in_near[i] + in_far[i];\n\t\tout[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8);\n\t\tout[i * 2] = stbi__div16(3 * t1 + t0 + 8);\n\t}\n\tout[w * 2 - 1] = stbi__div4(t1 + 2);\n\n\tSTBI_NOTUSED(hs);\n\n\treturn out;\n}\n#endif\n\nstatic stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)\n{\n\t// resample with nearest-neighbor\n\tint i, j;\n\tSTBI_NOTUSED(in_far);\n\tfor (i = 0; i < w; ++i)\n\t\tfor (j = 0; j < hs; ++j)\n\t\t\tout[i*hs + j] = in_near[i];\n\treturn out;\n}\n\n// this is a reduced-precision calculation of YCbCr-to-RGB introduced\n// to make sure the code produces the same results in both SIMD and scalar\n#define stbi__float2fixed(x)  (((int) ((x) * 4096.0f + 0.5f)) << 8)\nstatic void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)\n{\n\tint i;\n\tfor (i = 0; i < count; ++i) {\n\t\tint y_fixed = (y[i] << 20) + (1 << 19); // rounding\n\t\tint r, g, b;\n\t\tint cr = pcr[i] - 128;\n\t\tint cb = pcb[i] - 128;\n\t\tr = y_fixed + cr * stbi__float2fixed(1.40200f);\n\t\tg = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000);\n\t\tb = y_fixed + cb * stbi__float2fixed(1.77200f);\n\t\tr >>= 20;\n\t\tg >>= 20;\n\t\tb >>= 20;\n\t\tif ((unsigned)r > 255) { if (r < 0) r = 0; else r = 255; }\n\t\tif ((unsigned)g > 255) { if (g < 0) g = 0; else g = 255; }\n\t\tif ((unsigned)b > 255) { if (b < 0) b = 0; else b = 255; }\n\t\tout[0] = (stbi_uc)r;\n\t\tout[1] = (stbi_uc)g;\n\t\tout[2] = (stbi_uc)b;\n\t\tout[3] = 255;\n\t\tout += step;\n\t}\n}\n\n#if defined(STBI_SSE2) || defined(STBI_NEON)\nstatic void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step)\n{\n\tint i = 0;\n\n#ifdef STBI_SSE2\n\t// step == 3 is pretty ugly on the final interleave, and i'm not convinced\n\t// it's useful in practice (you wouldn't use it for textures, for example).\n\t// so just accelerate step == 4 case.\n\tif (step == 4) {\n\t\t// this is a fairly straightforward implementation and not super-optimized.\n\t\t__m128i signflip = _mm_set1_epi8(-0x80);\n\t\t__m128i cr_const0 = _mm_set1_epi16((short)(1.40200f*4096.0f + 0.5f));\n\t\t__m128i cr_const1 = _mm_set1_epi16(-(short)(0.71414f*4096.0f + 0.5f));\n\t\t__m128i cb_const0 = _mm_set1_epi16(-(short)(0.34414f*4096.0f + 0.5f));\n\t\t__m128i cb_const1 = _mm_set1_epi16((short)(1.77200f*4096.0f + 0.5f));\n\t\t__m128i y_bias = _mm_set1_epi8((char)(unsigned char)128);\n\t\t__m128i xw = _mm_set1_epi16(255); // alpha channel\n\n\t\tfor (; i + 7 < count; i += 8) {\n\t\t\t// load\n\t\t\t__m128i y_bytes = _mm_loadl_epi64((__m128i *) (y + i));\n\t\t\t__m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr + i));\n\t\t\t__m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb + i));\n\t\t\t__m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128\n\t\t\t__m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128\n\n\t\t\t// unpack to short (and left-shift cr, cb by 8)\n\t\t\t__m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes);\n\t\t\t__m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased);\n\t\t\t__m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased);\n\n\t\t\t// color transform\n\t\t\t__m128i yws = _mm_srli_epi16(yw, 4);\n\t\t\t__m128i cr0 = _mm_mulhi_epi16(cr_const0, crw);\n\t\t\t__m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw);\n\t\t\t__m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1);\n\t\t\t__m128i cr1 = _mm_mulhi_epi16(crw, cr_const1);\n\t\t\t__m128i rws = _mm_add_epi16(cr0, yws);\n\t\t\t__m128i gwt = _mm_add_epi16(cb0, yws);\n\t\t\t__m128i bws = _mm_add_epi16(yws, cb1);\n\t\t\t__m128i gws = _mm_add_epi16(gwt, cr1);\n\n\t\t\t// descale\n\t\t\t__m128i rw = _mm_srai_epi16(rws, 4);\n\t\t\t__m128i bw = _mm_srai_epi16(bws, 4);\n\t\t\t__m128i gw = _mm_srai_epi16(gws, 4);\n\n\t\t\t// back to byte, set up for transpose\n\t\t\t__m128i brb = _mm_packus_epi16(rw, bw);\n\t\t\t__m128i gxb = _mm_packus_epi16(gw, xw);\n\n\t\t\t// transpose to interleave channels\n\t\t\t__m128i t0 = _mm_unpacklo_epi8(brb, gxb);\n\t\t\t__m128i t1 = _mm_unpackhi_epi8(brb, gxb);\n\t\t\t__m128i o0 = _mm_unpacklo_epi16(t0, t1);\n\t\t\t__m128i o1 = _mm_unpackhi_epi16(t0, t1);\n\n\t\t\t// store\n\t\t\t_mm_storeu_si128((__m128i *) (out + 0), o0);\n\t\t\t_mm_storeu_si128((__m128i *) (out + 16), o1);\n\t\t\tout += 32;\n\t\t}\n\t}\n#endif\n\n#ifdef STBI_NEON\n\t// in this version, step=3 support would be easy to add. but is there demand?\n\tif (step == 4) {\n\t\t// this is a fairly straightforward implementation and not super-optimized.\n\t\tuint8x8_t signflip = vdup_n_u8(0x80);\n\t\tint16x8_t cr_const0 = vdupq_n_s16((short)(1.40200f*4096.0f + 0.5f));\n\t\tint16x8_t cr_const1 = vdupq_n_s16(-(short)(0.71414f*4096.0f + 0.5f));\n\t\tint16x8_t cb_const0 = vdupq_n_s16(-(short)(0.34414f*4096.0f + 0.5f));\n\t\tint16x8_t cb_const1 = vdupq_n_s16((short)(1.77200f*4096.0f + 0.5f));\n\n\t\tfor (; i + 7 < count; i += 8) {\n\t\t\t// load\n\t\t\tuint8x8_t y_bytes = vld1_u8(y + i);\n\t\t\tuint8x8_t cr_bytes = vld1_u8(pcr + i);\n\t\t\tuint8x8_t cb_bytes = vld1_u8(pcb + i);\n\t\t\tint8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip));\n\t\t\tint8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip));\n\n\t\t\t// expand to s16\n\t\t\tint16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4));\n\t\t\tint16x8_t crw = vshll_n_s8(cr_biased, 7);\n\t\t\tint16x8_t cbw = vshll_n_s8(cb_biased, 7);\n\n\t\t\t// color transform\n\t\t\tint16x8_t cr0 = vqdmulhq_s16(crw, cr_const0);\n\t\t\tint16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0);\n\t\t\tint16x8_t cr1 = vqdmulhq_s16(crw, cr_const1);\n\t\t\tint16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1);\n\t\t\tint16x8_t rws = vaddq_s16(yws, cr0);\n\t\t\tint16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1);\n\t\t\tint16x8_t bws = vaddq_s16(yws, cb1);\n\n\t\t\t// undo scaling, round, convert to byte\n\t\t\tuint8x8x4_t o;\n\t\t\to.val[0] = vqrshrun_n_s16(rws, 4);\n\t\t\to.val[1] = vqrshrun_n_s16(gws, 4);\n\t\t\to.val[2] = vqrshrun_n_s16(bws, 4);\n\t\t\to.val[3] = vdup_n_u8(255);\n\n\t\t\t// store, interleaving r/g/b/a\n\t\t\tvst4_u8(out, o);\n\t\t\tout += 8 * 4;\n\t\t}\n\t}\n#endif\n\n\tfor (; i < count; ++i) {\n\t\tint y_fixed = (y[i] << 20) + (1 << 19); // rounding\n\t\tint r, g, b;\n\t\tint cr = pcr[i] - 128;\n\t\tint cb = pcb[i] - 128;\n\t\tr = y_fixed + cr * stbi__float2fixed(1.40200f);\n\t\tg = y_fixed + cr * -stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000);\n\t\tb = y_fixed + cb * stbi__float2fixed(1.77200f);\n\t\tr >>= 20;\n\t\tg >>= 20;\n\t\tb >>= 20;\n\t\tif ((unsigned)r > 255) { if (r < 0) r = 0; else r = 255; }\n\t\tif ((unsigned)g > 255) { if (g < 0) g = 0; else g = 255; }\n\t\tif ((unsigned)b > 255) { if (b < 0) b = 0; else b = 255; }\n\t\tout[0] = (stbi_uc)r;\n\t\tout[1] = (stbi_uc)g;\n\t\tout[2] = (stbi_uc)b;\n\t\tout[3] = 255;\n\t\tout += step;\n\t}\n}\n#endif\n\n// set up the kernels\nstatic void stbi__setup_jpeg(stbi__jpeg *j)\n{\n\tj->idct_block_kernel = stbi__idct_block;\n\tj->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row;\n\tj->resample_row_hv_2_kernel = stbi__resample_row_hv_2;\n\n#ifdef STBI_SSE2\n\tif (stbi__sse2_available()) {\n\t\tj->idct_block_kernel = stbi__idct_simd;\n\t\tj->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;\n\t\tj->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;\n\t}\n#endif\n\n#ifdef STBI_NEON\n\tj->idct_block_kernel = stbi__idct_simd;\n\tj->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;\n\tj->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;\n#endif\n}\n\n// clean up the temporary component buffers\nstatic void stbi__cleanup_jpeg(stbi__jpeg *j)\n{\n\tstbi__free_jpeg_components(j, j->s->img_n, 0);\n}\n\ntypedef struct\n{\n\tresample_row_func resample;\n\tstbi_uc *line0, *line1;\n\tint hs, vs;   // expansion factor in each axis\n\tint w_lores; // horizontal pixels pre-expansion\n\tint ystep;   // how far through vertical expansion we are\n\tint ypos;    // which pre-expansion row we're on\n} stbi__resample;\n\n// fast 0..255 * 0..255 => 0..255 rounded multiplication\nstatic stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y)\n{\n\tunsigned int t = x * y + 128;\n\treturn (stbi_uc)((t + (t >> 8)) >> 8);\n}\n\nstatic stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp)\n{\n\tint n, decode_n, is_rgb;\n\tz->s->img_n = 0; // make stbi__cleanup_jpeg safe\n\n\t// validate req_comp\n\tif (req_comp < 0 || req_comp > 4) return stbi__errpuc(\"bad req_comp\", \"Internal error\");\n\n\t// load a jpeg image from whichever source, but leave in YCbCr format\n\tif (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; }\n\n\t// determine actual number of components to generate\n\tn = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1;\n\n\tis_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif));\n\n\tif (z->s->img_n == 3 && n < 3 && !is_rgb)\n\t\tdecode_n = 1;\n\telse\n\t\tdecode_n = z->s->img_n;\n\n\t// resample and color-convert\n\t{\n\t\tint k;\n\t\tunsigned int i, j;\n\t\tstbi_uc *output;\n\t\tstbi_uc *coutput[4] = { NULL, NULL, NULL, NULL };\n\n\t\tstbi__resample res_comp[4];\n\n\t\tfor (k = 0; k < decode_n; ++k) {\n\t\t\tstbi__resample *r = &res_comp[k];\n\n\t\t\t// allocate line buffer big enough for upsampling off the edges\n\t\t\t// with upsample factor of 4\n\t\t\tz->img_comp[k].linebuf = (stbi_uc *)stbi__malloc(z->s->img_x + 3);\n\t\t\tif (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc(\"outofmem\", \"Out of memory\"); }\n\n\t\t\tr->hs = z->img_h_max / z->img_comp[k].h;\n\t\t\tr->vs = z->img_v_max / z->img_comp[k].v;\n\t\t\tr->ystep = r->vs >> 1;\n\t\t\tr->w_lores = (z->s->img_x + r->hs - 1) / r->hs;\n\t\t\tr->ypos = 0;\n\t\t\tr->line0 = r->line1 = z->img_comp[k].data;\n\n\t\t\tif (r->hs == 1 && r->vs == 1) r->resample = resample_row_1;\n\t\t\telse if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2;\n\t\t\telse if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2;\n\t\t\telse if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel;\n\t\t\telse                               r->resample = stbi__resample_row_generic;\n\t\t}\n\n\t\t// can't error after this so, this is safe\n\t\toutput = (stbi_uc *)stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1);\n\t\tif (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc(\"outofmem\", \"Out of memory\"); }\n\n\t\t// now go ahead and resample\n\t\tfor (j = 0; j < z->s->img_y; ++j) {\n\t\t\tstbi_uc *out = output + n * z->s->img_x * j;\n\t\t\tfor (k = 0; k < decode_n; ++k) {\n\t\t\t\tstbi__resample *r = &res_comp[k];\n\t\t\t\tint y_bot = r->ystep >= (r->vs >> 1);\n\t\t\t\tcoutput[k] = r->resample(z->img_comp[k].linebuf,\n\t\t\t\t\ty_bot ? r->line1 : r->line0,\n\t\t\t\t\ty_bot ? r->line0 : r->line1,\n\t\t\t\t\tr->w_lores, r->hs);\n\t\t\t\tif (++r->ystep >= r->vs) {\n\t\t\t\t\tr->ystep = 0;\n\t\t\t\t\tr->line0 = r->line1;\n\t\t\t\t\tif (++r->ypos < z->img_comp[k].y)\n\t\t\t\t\t\tr->line1 += z->img_comp[k].w2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (n >= 3) {\n\t\t\t\tstbi_uc *y = coutput[0];\n\t\t\t\tif (z->s->img_n == 3) {\n\t\t\t\t\tif (is_rgb) {\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) {\n\t\t\t\t\t\t\tout[0] = y[i];\n\t\t\t\t\t\t\tout[1] = coutput[1][i];\n\t\t\t\t\t\t\tout[2] = coutput[2][i];\n\t\t\t\t\t\t\tout[3] = 255;\n\t\t\t\t\t\t\tout += n;\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\tz->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (z->s->img_n == 4) {\n\t\t\t\t\tif (z->app14_color_transform == 0) { // CMYK\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) {\n\t\t\t\t\t\t\tstbi_uc m = coutput[3][i];\n\t\t\t\t\t\t\tout[0] = stbi__blinn_8x8(coutput[0][i], m);\n\t\t\t\t\t\t\tout[1] = stbi__blinn_8x8(coutput[1][i], m);\n\t\t\t\t\t\t\tout[2] = stbi__blinn_8x8(coutput[2][i], m);\n\t\t\t\t\t\t\tout[3] = 255;\n\t\t\t\t\t\t\tout += n;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (z->app14_color_transform == 2) { // YCCK\n\t\t\t\t\t\tz->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) {\n\t\t\t\t\t\t\tstbi_uc m = coutput[3][i];\n\t\t\t\t\t\t\tout[0] = stbi__blinn_8x8(255 - out[0], m);\n\t\t\t\t\t\t\tout[1] = stbi__blinn_8x8(255 - out[1], m);\n\t\t\t\t\t\t\tout[2] = stbi__blinn_8x8(255 - out[2], m);\n\t\t\t\t\t\t\tout += n;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse { // YCbCr + alpha?  Ignore the fourth channel for now\n\t\t\t\t\t\tz->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) {\n\t\t\t\t\t\tout[0] = out[1] = out[2] = y[i];\n\t\t\t\t\t\tout[3] = 255; // not used if n==3\n\t\t\t\t\t\tout += n;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (is_rgb) {\n\t\t\t\t\tif (n == 1)\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i)\n\t\t\t\t\t\t\t*out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]);\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i, out += 2) {\n\t\t\t\t\t\t\tout[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]);\n\t\t\t\t\t\t\tout[1] = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (z->s->img_n == 4 && z->app14_color_transform == 0) {\n\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) {\n\t\t\t\t\t\tstbi_uc m = coutput[3][i];\n\t\t\t\t\t\tstbi_uc r = stbi__blinn_8x8(coutput[0][i], m);\n\t\t\t\t\t\tstbi_uc g = stbi__blinn_8x8(coutput[1][i], m);\n\t\t\t\t\t\tstbi_uc b = stbi__blinn_8x8(coutput[2][i], m);\n\t\t\t\t\t\tout[0] = stbi__compute_y(r, g, b);\n\t\t\t\t\t\tout[1] = 255;\n\t\t\t\t\t\tout += n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (z->s->img_n == 4 && z->app14_color_transform == 2) {\n\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) {\n\t\t\t\t\t\tout[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]);\n\t\t\t\t\t\tout[1] = 255;\n\t\t\t\t\t\tout += n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstbi_uc *y = coutput[0];\n\t\t\t\t\tif (n == 1)\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) out[i] = y[i];\n\t\t\t\t\telse\n\t\t\t\t\t\tfor (i = 0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstbi__cleanup_jpeg(z);\n\t\t*out_x = z->s->img_x;\n\t\t*out_y = z->s->img_y;\n\t\tif (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output\n\t\treturn output;\n\t}\n}\n\nstatic void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tunsigned char* result;\n\tstbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg));\n\tSTBI_NOTUSED(ri);\n\tj->s = s;\n\tstbi__setup_jpeg(j);\n\tresult = load_jpeg_image(j, x, y, comp, req_comp);\n\tSTBI_FREE(j);\n\treturn result;\n}\n\nstatic int stbi__jpeg_test(stbi__context *s)\n{\n\tint r;\n\tstbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg));\n\tj->s = s;\n\tstbi__setup_jpeg(j);\n\tr = stbi__decode_jpeg_header(j, STBI__SCAN_type);\n\tstbi__rewind(s);\n\tSTBI_FREE(j);\n\treturn r;\n}\n\nstatic int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)\n{\n\tif (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) {\n\t\tstbi__rewind(j->s);\n\t\treturn 0;\n\t}\n\tif (x) *x = j->s->img_x;\n\tif (y) *y = j->s->img_y;\n\tif (comp) *comp = j->s->img_n >= 3 ? 3 : 1;\n\treturn 1;\n}\n\nstatic int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tint result;\n\tstbi__jpeg* j = (stbi__jpeg*)(stbi__malloc(sizeof(stbi__jpeg)));\n\tj->s = s;\n\tresult = stbi__jpeg_info_raw(j, x, y, comp);\n\tSTBI_FREE(j);\n\treturn result;\n}\n#endif\n\n// public domain zlib decode    v0.2  Sean Barrett 2006-11-18\n//    simple implementation\n//      - all input must be provided in an upfront buffer\n//      - all output is written to a single output buffer (can malloc/realloc)\n//    performance\n//      - fast huffman\n\n#ifndef STBI_NO_ZLIB\n\n// fast-way is faster to check than jpeg huffman, but slow way is slower\n#define STBI__ZFAST_BITS  9 // accelerate all cases in default tables\n#define STBI__ZFAST_MASK  ((1 << STBI__ZFAST_BITS) - 1)\n\n// zlib-style huffman encoding\n// (jpegs packs from left, zlib from right, so can't share code)\ntypedef struct\n{\n\tstbi__uint16 fast[1 << STBI__ZFAST_BITS];\n\tstbi__uint16 firstcode[16];\n\tint maxcode[17];\n\tstbi__uint16 firstsymbol[16];\n\tstbi_uc  size[288];\n\tstbi__uint16 value[288];\n} stbi__zhuffman;\n\nstbi_inline static int stbi__bitreverse16(int n)\n{\n\tn = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1);\n\tn = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2);\n\tn = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4);\n\tn = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8);\n\treturn n;\n}\n\nstbi_inline static int stbi__bit_reverse(int v, int bits)\n{\n\tSTBI_ASSERT(bits <= 16);\n\t// to bit reverse n bits, reverse 16 and shift\n\t// e.g. 11 bits, bit reverse and shift away 5\n\treturn stbi__bitreverse16(v) >> (16 - bits);\n}\n\nstatic int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num)\n{\n\tint i, k = 0;\n\tint code, next_code[16], sizes[17];\n\n\t// DEFLATE spec for generating codes\n\tmemset(sizes, 0, sizeof(sizes));\n\tmemset(z->fast, 0, sizeof(z->fast));\n\tfor (i = 0; i < num; ++i)\n\t\t++sizes[sizelist[i]];\n\tsizes[0] = 0;\n\tfor (i = 1; i < 16; ++i)\n\t\tif (sizes[i] > (1 << i))\n\t\t\treturn stbi__err(\"bad sizes\", \"Corrupt PNG\");\n\tcode = 0;\n\tfor (i = 1; i < 16; ++i) {\n\t\tnext_code[i] = code;\n\t\tz->firstcode[i] = (stbi__uint16)code;\n\t\tz->firstsymbol[i] = (stbi__uint16)k;\n\t\tcode = (code + sizes[i]);\n\t\tif (sizes[i])\n\t\t\tif (code - 1 >= (1 << i)) return stbi__err(\"bad codelengths\", \"Corrupt PNG\");\n\t\tz->maxcode[i] = code << (16 - i); // preshift for inner loop\n\t\tcode <<= 1;\n\t\tk += sizes[i];\n\t}\n\tz->maxcode[16] = 0x10000; // sentinel\n\tfor (i = 0; i < num; ++i) {\n\t\tint s = sizelist[i];\n\t\tif (s) {\n\t\t\tint c = next_code[s] - z->firstcode[s] + z->firstsymbol[s];\n\t\t\tstbi__uint16 fastv = (stbi__uint16)((s << 9) | i);\n\t\t\tz->size[c] = (stbi_uc)s;\n\t\t\tz->value[c] = (stbi__uint16)i;\n\t\t\tif (s <= STBI__ZFAST_BITS) {\n\t\t\t\tint j = stbi__bit_reverse(next_code[s], s);\n\t\t\t\twhile (j < (1 << STBI__ZFAST_BITS)) {\n\t\t\t\t\tz->fast[j] = fastv;\n\t\t\t\t\tj += (1 << s);\n\t\t\t\t}\n\t\t\t}\n\t\t\t++next_code[s];\n\t\t}\n\t}\n\treturn 1;\n}\n\n// zlib-from-memory implementation for PNG reading\n//    because PNG allows splitting the zlib stream arbitrarily,\n//    and it's annoying structurally to have PNG call ZLIB call PNG,\n//    we require PNG read all the IDATs and combine them into a single\n//    memory buffer\n\ntypedef struct\n{\n\tstbi_uc *zbuffer, *zbuffer_end;\n\tint num_bits;\n\tstbi__uint32 code_buffer;\n\n\tchar *zout;\n\tchar *zout_start;\n\tchar *zout_end;\n\tint   z_expandable;\n\n\tstbi__zhuffman z_length, z_distance;\n} stbi__zbuf;\n\nstbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)\n{\n\tif (z->zbuffer >= z->zbuffer_end) return 0;\n\treturn *z->zbuffer++;\n}\n\nstatic void stbi__fill_bits(stbi__zbuf *z)\n{\n\tdo {\n\t\tSTBI_ASSERT(z->code_buffer < (1U << z->num_bits));\n\t\tz->code_buffer |= (unsigned int)stbi__zget8(z) << z->num_bits;\n\t\tz->num_bits += 8;\n\t} while (z->num_bits <= 24);\n}\n\nstbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n)\n{\n\tunsigned int k;\n\tif (z->num_bits < n) stbi__fill_bits(z);\n\tk = z->code_buffer & ((1 << n) - 1);\n\tz->code_buffer >>= n;\n\tz->num_bits -= n;\n\treturn k;\n}\n\nstatic int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z)\n{\n\tint b, s, k;\n\t// not resolved by fast table, so compute it the slow way\n\t// use jpeg approach, which requires MSbits at top\n\tk = stbi__bit_reverse(a->code_buffer, 16);\n\tfor (s = STBI__ZFAST_BITS + 1; ; ++s)\n\t\tif (k < z->maxcode[s])\n\t\t\tbreak;\n\tif (s == 16) return -1; // invalid code!\n\t// code size is s, so:\n\tb = (k >> (16 - s)) - z->firstcode[s] + z->firstsymbol[s];\n\tSTBI_ASSERT(z->size[b] == s);\n\ta->code_buffer >>= s;\n\ta->num_bits -= s;\n\treturn z->value[b];\n}\n\nstbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z)\n{\n\tint b, s;\n\tif (a->num_bits < 16) stbi__fill_bits(a);\n\tb = z->fast[a->code_buffer & STBI__ZFAST_MASK];\n\tif (b) {\n\t\ts = b >> 9;\n\t\ta->code_buffer >>= s;\n\t\ta->num_bits -= s;\n\t\treturn b & 511;\n\t}\n\treturn stbi__zhuffman_decode_slowpath(a, z);\n}\n\nstatic int stbi__zexpand(stbi__zbuf *z, char *zout, int n)  // need to make room for n bytes\n{\n\tchar *q;\n\tint cur, limit, old_limit;\n\tz->zout = zout;\n\tif (!z->z_expandable) return stbi__err(\"output buffer limit\", \"Corrupt PNG\");\n\tcur = (int)(z->zout - z->zout_start);\n\tlimit = old_limit = (int)(z->zout_end - z->zout_start);\n\twhile (cur + n > limit)\n\t\tlimit *= 2;\n\tq = (char *)STBI_REALLOC_SIZED(z->zout_start, old_limit, limit);\n\tSTBI_NOTUSED(old_limit);\n\tif (q == NULL) return stbi__err(\"outofmem\", \"Out of memory\");\n\tz->zout_start = q;\n\tz->zout = q + cur;\n\tz->zout_end = q + limit;\n\treturn 1;\n}\n\nstatic const int stbi__zlength_base[31] = {\n   3,4,5,6,7,8,9,10,11,13,\n   15,17,19,23,27,31,35,43,51,59,\n   67,83,99,115,131,163,195,227,258,0,0 };\n\nstatic const int stbi__zlength_extra[31] =\n{ 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,0,0 };\n\nstatic const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,\n257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0 };\n\nstatic const int stbi__zdist_extra[32] =\n{ 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\nstatic int stbi__parse_huffman_block(stbi__zbuf *a)\n{\n\tchar *zout = a->zout;\n\tfor (;;) {\n\t\tint z = stbi__zhuffman_decode(a, &a->z_length);\n\t\tif (z < 256) {\n\t\t\tif (z < 0) return stbi__err(\"bad huffman code\", \"Corrupt PNG\"); // error in huffman codes\n\t\t\tif (zout >= a->zout_end) {\n\t\t\t\tif (!stbi__zexpand(a, zout, 1)) return 0;\n\t\t\t\tzout = a->zout;\n\t\t\t}\n\t\t\t*zout++ = (char)z;\n\t\t}\n\t\telse {\n\t\t\tstbi_uc *p;\n\t\t\tint len, dist;\n\t\t\tif (z == 256) {\n\t\t\t\ta->zout = zout;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tz -= 257;\n\t\t\tlen = stbi__zlength_base[z];\n\t\t\tif (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]);\n\t\t\tz = stbi__zhuffman_decode(a, &a->z_distance);\n\t\t\tif (z < 0) return stbi__err(\"bad huffman code\", \"Corrupt PNG\");\n\t\t\tdist = stbi__zdist_base[z];\n\t\t\tif (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]);\n\t\t\tif (zout - a->zout_start < dist) return stbi__err(\"bad dist\", \"Corrupt PNG\");\n\t\t\tif (zout + len > a->zout_end) {\n\t\t\t\tif (!stbi__zexpand(a, zout, len)) return 0;\n\t\t\t\tzout = a->zout;\n\t\t\t}\n\t\t\tp = (stbi_uc *)(zout - dist);\n\t\t\tif (dist == 1) { // run of one byte; common in images.\n\t\t\t\tstbi_uc v = *p;\n\t\t\t\tif (len) { do *zout++ = v; while (--len); }\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (len) { do *zout++ = *p++; while (--len); }\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic int stbi__compute_huffman_codes(stbi__zbuf *a)\n{\n\tstatic const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 };\n\tstbi__zhuffman z_codelength;\n\tstbi_uc lencodes[286 + 32 + 137];//padding for maximum single op\n\tstbi_uc codelength_sizes[19];\n\tint i, n;\n\n\tint hlit = stbi__zreceive(a, 5) + 257;\n\tint hdist = stbi__zreceive(a, 5) + 1;\n\tint hclen = stbi__zreceive(a, 4) + 4;\n\tint ntot = hlit + hdist;\n\n\tmemset(codelength_sizes, 0, sizeof(codelength_sizes));\n\tfor (i = 0; i < hclen; ++i) {\n\t\tint s = stbi__zreceive(a, 3);\n\t\tcodelength_sizes[length_dezigzag[i]] = (stbi_uc)s;\n\t}\n\tif (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0;\n\n\tn = 0;\n\twhile (n < ntot) {\n\t\tint c = stbi__zhuffman_decode(a, &z_codelength);\n\t\tif (c < 0 || c >= 19) return stbi__err(\"bad codelengths\", \"Corrupt PNG\");\n\t\tif (c < 16)\n\t\t\tlencodes[n++] = (stbi_uc)c;\n\t\telse {\n\t\t\tstbi_uc fill = 0;\n\t\t\tif (c == 16) {\n\t\t\t\tc = stbi__zreceive(a, 2) + 3;\n\t\t\t\tif (n == 0) return stbi__err(\"bad codelengths\", \"Corrupt PNG\");\n\t\t\t\tfill = lencodes[n - 1];\n\t\t\t}\n\t\t\telse if (c == 17)\n\t\t\t\tc = stbi__zreceive(a, 3) + 3;\n\t\t\telse {\n\t\t\t\tSTBI_ASSERT(c == 18);\n\t\t\t\tc = stbi__zreceive(a, 7) + 11;\n\t\t\t}\n\t\t\tif (ntot - n < c) return stbi__err(\"bad codelengths\", \"Corrupt PNG\");\n\t\t\tmemset(lencodes + n, fill, c);\n\t\t\tn += c;\n\t\t}\n\t}\n\tif (n != ntot) return stbi__err(\"bad codelengths\", \"Corrupt PNG\");\n\tif (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0;\n\tif (!stbi__zbuild_huffman(&a->z_distance, lencodes + hlit, hdist)) return 0;\n\treturn 1;\n}\n\nstatic int stbi__parse_uncompressed_block(stbi__zbuf *a)\n{\n\tstbi_uc header[4];\n\tint len, nlen, k;\n\tif (a->num_bits & 7)\n\t\tstbi__zreceive(a, a->num_bits & 7); // discard\n\t // drain the bit-packed data into header\n\tk = 0;\n\twhile (a->num_bits > 0) {\n\t\theader[k++] = (stbi_uc)(a->code_buffer & 255); // suppress MSVC run-time check\n\t\ta->code_buffer >>= 8;\n\t\ta->num_bits -= 8;\n\t}\n\tSTBI_ASSERT(a->num_bits == 0);\n\t// now fill header the normal way\n\twhile (k < 4)\n\t\theader[k++] = stbi__zget8(a);\n\tlen = header[1] * 256 + header[0];\n\tnlen = header[3] * 256 + header[2];\n\tif (nlen != (len ^ 0xffff)) return stbi__err(\"zlib corrupt\", \"Corrupt PNG\");\n\tif (a->zbuffer + len > a->zbuffer_end) return stbi__err(\"read past buffer\", \"Corrupt PNG\");\n\tif (a->zout + len > a->zout_end)\n\t\tif (!stbi__zexpand(a, a->zout, len)) return 0;\n\tmemcpy(a->zout, a->zbuffer, len);\n\ta->zbuffer += len;\n\ta->zout += len;\n\treturn 1;\n}\n\nstatic int stbi__parse_zlib_header(stbi__zbuf *a)\n{\n\tint cmf = stbi__zget8(a);\n\tint cm = cmf & 15;\n\t/* int cinfo = cmf >> 4; */\n\tint flg = stbi__zget8(a);\n\tif ((cmf * 256 + flg) % 31 != 0) return stbi__err(\"bad zlib header\", \"Corrupt PNG\"); // zlib spec\n\tif (flg & 32) return stbi__err(\"no preset dict\", \"Corrupt PNG\"); // preset dictionary not allowed in png\n\tif (cm != 8) return stbi__err(\"bad compression\", \"Corrupt PNG\"); // DEFLATE required for png\n\t// window = 1 << (8 + cinfo)... but who cares, we fully buffer output\n\treturn 1;\n}\n\nstatic const stbi_uc stbi__zdefault_length[288] =\n{\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,\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,\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,\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,\n   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 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,\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,\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,\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,8,8,8,8,8,8,8,8\n};\nstatic const stbi_uc stbi__zdefault_distance[32] =\n{\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\n};\n/*\nInit algorithm:\n{\n   int i;   // use <= to match clearly with spec\n   for (i=0; i <= 143; ++i)     stbi__zdefault_length[i]   = 8;\n   for (   ; i <= 255; ++i)     stbi__zdefault_length[i]   = 9;\n   for (   ; i <= 279; ++i)     stbi__zdefault_length[i]   = 7;\n   for (   ; i <= 287; ++i)     stbi__zdefault_length[i]   = 8;\n\n   for (i=0; i <=  31; ++i)     stbi__zdefault_distance[i] = 5;\n}\n*/\n\nstatic int stbi__parse_zlib(stbi__zbuf *a, int parse_header)\n{\n\tint final, type;\n\tif (parse_header)\n\t\tif (!stbi__parse_zlib_header(a)) return 0;\n\ta->num_bits = 0;\n\ta->code_buffer = 0;\n\tdo {\n\t\tfinal = stbi__zreceive(a, 1);\n\t\ttype = stbi__zreceive(a, 2);\n\t\tif (type == 0) {\n\t\t\tif (!stbi__parse_uncompressed_block(a)) return 0;\n\t\t}\n\t\telse if (type == 3) {\n\t\t\treturn 0;\n\t\t}\n\t\telse {\n\t\t\tif (type == 1) {\n\t\t\t\t// use fixed code lengths\n\t\t\t\tif (!stbi__zbuild_huffman(&a->z_length, stbi__zdefault_length, 288)) return 0;\n\t\t\t\tif (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!stbi__compute_huffman_codes(a)) return 0;\n\t\t\t}\n\t\t\tif (!stbi__parse_huffman_block(a)) return 0;\n\t\t}\n\t} while (!final);\n\treturn 1;\n}\n\nstatic int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header)\n{\n\ta->zout_start = obuf;\n\ta->zout = obuf;\n\ta->zout_end = obuf + olen;\n\ta->z_expandable = exp;\n\n\treturn stbi__parse_zlib(a, parse_header);\n}\n\nSTBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen)\n{\n\tstbi__zbuf a;\n\tchar *p = (char *)stbi__malloc(initial_size);\n\tif (p == NULL) return NULL;\n\ta.zbuffer = (stbi_uc *)buffer;\n\ta.zbuffer_end = (stbi_uc *)buffer + len;\n\tif (stbi__do_zlib(&a, p, initial_size, 1, 1)) {\n\t\tif (outlen) *outlen = (int)(a.zout - a.zout_start);\n\t\treturn a.zout_start;\n\t}\n\telse {\n\t\tSTBI_FREE(a.zout_start);\n\t\treturn NULL;\n\t}\n}\n\nSTBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen)\n{\n\treturn stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen);\n}\n\nSTBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header)\n{\n\tstbi__zbuf a;\n\tchar *p = (char *)stbi__malloc(initial_size);\n\tif (p == NULL) return NULL;\n\ta.zbuffer = (stbi_uc *)buffer;\n\ta.zbuffer_end = (stbi_uc *)buffer + len;\n\tif (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) {\n\t\tif (outlen) *outlen = (int)(a.zout - a.zout_start);\n\t\treturn a.zout_start;\n\t}\n\telse {\n\t\tSTBI_FREE(a.zout_start);\n\t\treturn NULL;\n\t}\n}\n\nSTBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen)\n{\n\tstbi__zbuf a;\n\ta.zbuffer = (stbi_uc *)ibuffer;\n\ta.zbuffer_end = (stbi_uc *)ibuffer + ilen;\n\tif (stbi__do_zlib(&a, obuffer, olen, 0, 1))\n\t\treturn (int)(a.zout - a.zout_start);\n\telse\n\t\treturn -1;\n}\n\nSTBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen)\n{\n\tstbi__zbuf a;\n\tchar *p = (char *)stbi__malloc(16384);\n\tif (p == NULL) return NULL;\n\ta.zbuffer = (stbi_uc *)buffer;\n\ta.zbuffer_end = (stbi_uc *)buffer + len;\n\tif (stbi__do_zlib(&a, p, 16384, 1, 0)) {\n\t\tif (outlen) *outlen = (int)(a.zout - a.zout_start);\n\t\treturn a.zout_start;\n\t}\n\telse {\n\t\tSTBI_FREE(a.zout_start);\n\t\treturn NULL;\n\t}\n}\n\nSTBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen)\n{\n\tstbi__zbuf a;\n\ta.zbuffer = (stbi_uc *)ibuffer;\n\ta.zbuffer_end = (stbi_uc *)ibuffer + ilen;\n\tif (stbi__do_zlib(&a, obuffer, olen, 0, 0))\n\t\treturn (int)(a.zout - a.zout_start);\n\telse\n\t\treturn -1;\n}\n#endif\n\n// public domain \"baseline\" PNG decoder   v0.10  Sean Barrett 2006-11-18\n//    simple implementation\n//      - only 8-bit samples\n//      - no CRC checking\n//      - allocates lots of intermediate memory\n//        - avoids problem of streaming data between subsystems\n//        - avoids explicit window management\n//    performance\n//      - uses stb_zlib, a PD zlib implementation with fast huffman decoding\n\n#ifndef STBI_NO_PNG\ntypedef struct\n{\n\tstbi__uint32 length;\n\tstbi__uint32 type;\n} stbi__pngchunk;\n\nstatic stbi__pngchunk stbi__get_chunk_header(stbi__context *s)\n{\n\tstbi__pngchunk c;\n\tc.length = stbi__get32be(s);\n\tc.type = stbi__get32be(s);\n\treturn c;\n}\n\nstatic int stbi__check_png_header(stbi__context *s)\n{\n\tstatic const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 };\n\tint i;\n\tfor (i = 0; i < 8; ++i)\n\t\tif (stbi__get8(s) != png_sig[i]) return stbi__err(\"bad png sig\", \"Not a PNG\");\n\treturn 1;\n}\n\ntypedef struct\n{\n\tstbi__context *s;\n\tstbi_uc *idata, *expanded, *out;\n\tint depth;\n} stbi__png;\n\n\nenum {\n\tSTBI__F_none = 0,\n\tSTBI__F_sub = 1,\n\tSTBI__F_up = 2,\n\tSTBI__F_avg = 3,\n\tSTBI__F_paeth = 4,\n\t// synthetic filters used for first scanline to avoid needing a dummy row of 0s\n\tSTBI__F_avg_first,\n\tSTBI__F_paeth_first\n};\n\nstatic stbi_uc first_row_filter[5] =\n{\n   STBI__F_none,\n   STBI__F_sub,\n   STBI__F_none,\n   STBI__F_avg_first,\n   STBI__F_paeth_first\n};\n\nstatic int stbi__paeth(int a, int b, int c)\n{\n\tint p = a + b - c;\n\tint pa = abs(p - a);\n\tint pb = abs(p - b);\n\tint pc = abs(p - c);\n\tif (pa <= pb && pa <= pc) return a;\n\tif (pb <= pc) return b;\n\treturn c;\n}\n\nstatic const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 };\n\n// create the png data from post-deflated data\nstatic int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color)\n{\n\tint bytes = (depth == 16 ? 2 : 1);\n\tstbi__context *s = a->s;\n\tstbi__uint32 i, j, stride = x * out_n*bytes;\n\tstbi__uint32 img_len, img_width_bytes;\n\tint k;\n\tint img_n = s->img_n; // copy it into a local for later\n\n\tint output_bytes = out_n * bytes;\n\tint filter_bytes = img_n * bytes;\n\tint width = x;\n\n\tSTBI_ASSERT(out_n == s->img_n || out_n == s->img_n + 1);\n\ta->out = (stbi_uc *)stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into\n\tif (!a->out) return stbi__err(\"outofmem\", \"Out of memory\");\n\n\tif (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err(\"too large\", \"Corrupt PNG\");\n\timg_width_bytes = (((img_n * x * depth) + 7) >> 3);\n\timg_len = (img_width_bytes + 1) * y;\n\n\t// we used to check for exact match between raw_len and img_len on non-interlaced PNGs,\n\t// but issue #276 reported a PNG in the wild that had extra data at the end (all zeros),\n\t// so just check for raw_len < img_len always.\n\tif (raw_len < img_len) return stbi__err(\"not enough pixels\", \"Corrupt PNG\");\n\n\tfor (j = 0; j < y; ++j) {\n\t\tstbi_uc *cur = a->out + stride * j;\n\t\tstbi_uc *prior;\n\t\tint filter = *raw++;\n\n\t\tif (filter > 4)\n\t\t\treturn stbi__err(\"invalid filter\", \"Corrupt PNG\");\n\n\t\tif (depth < 8) {\n\t\t\tSTBI_ASSERT(img_width_bytes <= x);\n\t\t\tcur += x * out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place\n\t\t\tfilter_bytes = 1;\n\t\t\twidth = img_width_bytes;\n\t\t}\n\t\tprior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above\n\n\t\t// if first row, use special filter that doesn't sample previous row\n\t\tif (j == 0) filter = first_row_filter[filter];\n\n\t\t// handle first byte explicitly\n\t\tfor (k = 0; k < filter_bytes; ++k) {\n\t\t\tswitch (filter) {\n\t\t\tcase STBI__F_none: cur[k] = raw[k]; break;\n\t\t\tcase STBI__F_sub: cur[k] = raw[k]; break;\n\t\t\tcase STBI__F_up: cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;\n\t\t\tcase STBI__F_avg: cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); break;\n\t\t\tcase STBI__F_paeth: cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0, prior[k], 0)); break;\n\t\t\tcase STBI__F_avg_first: cur[k] = raw[k]; break;\n\t\t\tcase STBI__F_paeth_first: cur[k] = raw[k]; break;\n\t\t\t}\n\t\t}\n\n\t\tif (depth == 8) {\n\t\t\tif (img_n != out_n)\n\t\t\t\tcur[img_n] = 255; // first pixel\n\t\t\traw += img_n;\n\t\t\tcur += out_n;\n\t\t\tprior += out_n;\n\t\t}\n\t\telse if (depth == 16) {\n\t\t\tif (img_n != out_n) {\n\t\t\t\tcur[filter_bytes] = 255; // first pixel top byte\n\t\t\t\tcur[filter_bytes + 1] = 255; // first pixel bottom byte\n\t\t\t}\n\t\t\traw += filter_bytes;\n\t\t\tcur += output_bytes;\n\t\t\tprior += output_bytes;\n\t\t}\n\t\telse {\n\t\t\traw += 1;\n\t\t\tcur += 1;\n\t\t\tprior += 1;\n\t\t}\n\n\t\t// this is a little gross, so that we don't switch per-pixel or per-component\n\t\tif (depth < 8 || img_n == out_n) {\n\t\t\tint nk = (width - 1)*filter_bytes;\n#define STBI__CASE(f) \\\n             case f:     \\\n                for (k=0; k < nk; ++k)\n\t\t\tswitch (filter) {\n\t\t\t\t// \"none\" filter turns into a memcpy here; make that explicit.\n\t\t\tcase STBI__F_none:         memcpy(cur, raw, nk); break;\n\t\t\t\tSTBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); } break;\n\t\t\t\tSTBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break;\n\t\t\t\tSTBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - filter_bytes]) >> 1)); } break;\n\t\t\t\tSTBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - filter_bytes], prior[k], prior[k - filter_bytes])); } break;\n\t\t\t\tSTBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); } break;\n\t\t\t\tSTBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - filter_bytes], 0, 0)); } break;\n\t\t\t}\n#undef STBI__CASE\n\t\t\traw += nk;\n\t\t}\n\t\telse {\n\t\t\tSTBI_ASSERT(img_n + 1 == out_n);\n#define STBI__CASE(f) \\\n             case f:     \\\n                for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \\\n                   for (k=0; k < filter_bytes; ++k)\n\t\t\tswitch (filter) {\n\t\t\t\tSTBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break;\n\t\t\t\tSTBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k - output_bytes]); } break;\n\t\t\t\tSTBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break;\n\t\t\t\tSTBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - output_bytes]) >> 1)); } break;\n\t\t\t\tSTBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - output_bytes], prior[k], prior[k - output_bytes])); } break;\n\t\t\t\tSTBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k - output_bytes] >> 1)); } break;\n\t\t\t\tSTBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - output_bytes], 0, 0)); } break;\n\t\t\t}\n#undef STBI__CASE\n\n\t\t\t// the loop above sets the high byte of the pixels' alpha, but for\n\t\t\t// 16 bit png files we also need the low byte set. we'll do that here.\n\t\t\tif (depth == 16) {\n\t\t\t\tcur = a->out + stride * j; // start at the beginning of the row again\n\t\t\t\tfor (i = 0; i < x; ++i, cur += output_bytes) {\n\t\t\t\t\tcur[filter_bytes + 1] = 255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// we make a separate pass to expand bits to pixels; for performance,\n\t// this could run two scanlines behind the above code, so it won't\n\t// intefere with filtering but will still be in the cache.\n\tif (depth < 8) {\n\t\tfor (j = 0; j < y; ++j) {\n\t\t\tstbi_uc *cur = a->out + stride * j;\n\t\t\tstbi_uc *in = a->out + stride * j + x * out_n - img_width_bytes;\n\t\t\t// unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit\n\t\t\t// png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop\n\t\t\tstbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range\n\n\t\t\t// note that the final byte might overshoot and write more data than desired.\n\t\t\t// we can allocate enough data that this never writes out of memory, but it\n\t\t\t// could also overwrite the next scanline. can it overwrite non-empty data\n\t\t\t// on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel.\n\t\t\t// so we need to explicitly clamp the final ones\n\n\t\t\tif (depth == 4) {\n\t\t\t\tfor (k = x * img_n; k >= 2; k -= 2, ++in) {\n\t\t\t\t\t*cur++ = scale * ((*in >> 4));\n\t\t\t\t\t*cur++ = scale * ((*in) & 0x0f);\n\t\t\t\t}\n\t\t\t\tif (k > 0) *cur++ = scale * ((*in >> 4));\n\t\t\t}\n\t\t\telse if (depth == 2) {\n\t\t\t\tfor (k = x * img_n; k >= 4; k -= 4, ++in) {\n\t\t\t\t\t*cur++ = scale * ((*in >> 6));\n\t\t\t\t\t*cur++ = scale * ((*in >> 4) & 0x03);\n\t\t\t\t\t*cur++ = scale * ((*in >> 2) & 0x03);\n\t\t\t\t\t*cur++ = scale * ((*in) & 0x03);\n\t\t\t\t}\n\t\t\t\tif (k > 0) *cur++ = scale * ((*in >> 6));\n\t\t\t\tif (k > 1) *cur++ = scale * ((*in >> 4) & 0x03);\n\t\t\t\tif (k > 2) *cur++ = scale * ((*in >> 2) & 0x03);\n\t\t\t}\n\t\t\telse if (depth == 1) {\n\t\t\t\tfor (k = x * img_n; k >= 8; k -= 8, ++in) {\n\t\t\t\t\t*cur++ = scale * ((*in >> 7));\n\t\t\t\t\t*cur++ = scale * ((*in >> 6) & 0x01);\n\t\t\t\t\t*cur++ = scale * ((*in >> 5) & 0x01);\n\t\t\t\t\t*cur++ = scale * ((*in >> 4) & 0x01);\n\t\t\t\t\t*cur++ = scale * ((*in >> 3) & 0x01);\n\t\t\t\t\t*cur++ = scale * ((*in >> 2) & 0x01);\n\t\t\t\t\t*cur++ = scale * ((*in >> 1) & 0x01);\n\t\t\t\t\t*cur++ = scale * ((*in) & 0x01);\n\t\t\t\t}\n\t\t\t\tif (k > 0) *cur++ = scale * ((*in >> 7));\n\t\t\t\tif (k > 1) *cur++ = scale * ((*in >> 6) & 0x01);\n\t\t\t\tif (k > 2) *cur++ = scale * ((*in >> 5) & 0x01);\n\t\t\t\tif (k > 3) *cur++ = scale * ((*in >> 4) & 0x01);\n\t\t\t\tif (k > 4) *cur++ = scale * ((*in >> 3) & 0x01);\n\t\t\t\tif (k > 5) *cur++ = scale * ((*in >> 2) & 0x01);\n\t\t\t\tif (k > 6) *cur++ = scale * ((*in >> 1) & 0x01);\n\t\t\t}\n\t\t\tif (img_n != out_n) {\n\t\t\t\tint q;\n\t\t\t\t// insert alpha = 255\n\t\t\t\tcur = a->out + stride * j;\n\t\t\t\tif (img_n == 1) {\n\t\t\t\t\tfor (q = x - 1; q >= 0; --q) {\n\t\t\t\t\t\tcur[q * 2 + 1] = 255;\n\t\t\t\t\t\tcur[q * 2 + 0] = cur[q];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tSTBI_ASSERT(img_n == 3);\n\t\t\t\t\tfor (q = x - 1; q >= 0; --q) {\n\t\t\t\t\t\tcur[q * 4 + 3] = 255;\n\t\t\t\t\t\tcur[q * 4 + 2] = cur[q * 3 + 2];\n\t\t\t\t\t\tcur[q * 4 + 1] = cur[q * 3 + 1];\n\t\t\t\t\t\tcur[q * 4 + 0] = cur[q * 3 + 0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse if (depth == 16) {\n\t\t// force the image data from big-endian to platform-native.\n\t\t// this is done in a separate pass due to the decoding relying\n\t\t// on the data being untouched, but could probably be done\n\t\t// per-line during decode if care is taken.\n\t\tstbi_uc *cur = a->out;\n\t\tstbi__uint16 *cur16 = (stbi__uint16*)cur;\n\n\t\tfor (i = 0; i < x*y*out_n; ++i, cur16++, cur += 2) {\n\t\t\t*cur16 = (cur[0] << 8) | cur[1];\n\t\t}\n\t}\n\n\treturn 1;\n}\n\nstatic int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced)\n{\n\tint bytes = (depth == 16 ? 2 : 1);\n\tint out_bytes = out_n * bytes;\n\tstbi_uc *final;\n\tint p;\n\tif (!interlaced)\n\t\treturn stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color);\n\n\t// de-interlacing\n\tfinal = (stbi_uc *)stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0);\n\tfor (p = 0; p < 7; ++p) {\n\t\tint xorig[] = { 0,4,0,2,0,1,0 };\n\t\tint yorig[] = { 0,0,4,0,2,0,1 };\n\t\tint xspc[] = { 8,8,4,4,2,2,1 };\n\t\tint yspc[] = { 8,8,8,4,4,2,2 };\n\t\tint i, j, x, y;\n\t\t// pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1\n\t\tx = (a->s->img_x - xorig[p] + xspc[p] - 1) / xspc[p];\n\t\ty = (a->s->img_y - yorig[p] + yspc[p] - 1) / yspc[p];\n\t\tif (x && y) {\n\t\t\tstbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y;\n\t\t\tif (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) {\n\t\t\t\tSTBI_FREE(final);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tfor (j = 0; j < y; ++j) {\n\t\t\t\tfor (i = 0; i < x; ++i) {\n\t\t\t\t\tint out_y = j * yspc[p] + yorig[p];\n\t\t\t\t\tint out_x = i * xspc[p] + xorig[p];\n\t\t\t\t\tmemcpy(final + out_y * a->s->img_x*out_bytes + out_x * out_bytes,\n\t\t\t\t\t\ta->out + (j*x + i)*out_bytes, out_bytes);\n\t\t\t\t}\n\t\t\t}\n\t\t\tSTBI_FREE(a->out);\n\t\t\timage_data += img_len;\n\t\t\timage_data_len -= img_len;\n\t\t}\n\t}\n\ta->out = final;\n\n\treturn 1;\n}\n\nstatic int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n)\n{\n\tstbi__context *s = z->s;\n\tstbi__uint32 i, pixel_count = s->img_x * s->img_y;\n\tstbi_uc *p = z->out;\n\n\t// compute color-based transparency, assuming we've\n\t// already got 255 as the alpha value in the output\n\tSTBI_ASSERT(out_n == 2 || out_n == 4);\n\n\tif (out_n == 2) {\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tp[1] = (p[0] == tc[0] ? 0 : 255);\n\t\t\tp += 2;\n\t\t}\n\t}\n\telse {\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tif (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2])\n\t\t\t\tp[3] = 0;\n\t\t\tp += 4;\n\t\t}\n\t}\n\treturn 1;\n}\n\nstatic int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n)\n{\n\tstbi__context *s = z->s;\n\tstbi__uint32 i, pixel_count = s->img_x * s->img_y;\n\tstbi__uint16 *p = (stbi__uint16*)z->out;\n\n\t// compute color-based transparency, assuming we've\n\t// already got 65535 as the alpha value in the output\n\tSTBI_ASSERT(out_n == 2 || out_n == 4);\n\n\tif (out_n == 2) {\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tp[1] = (p[0] == tc[0] ? 0 : 65535);\n\t\t\tp += 2;\n\t\t}\n\t}\n\telse {\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tif (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2])\n\t\t\t\tp[3] = 0;\n\t\t\tp += 4;\n\t\t}\n\t}\n\treturn 1;\n}\n\nstatic int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n)\n{\n\tstbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y;\n\tstbi_uc *p, *temp_out, *orig = a->out;\n\n\tp = (stbi_uc *)stbi__malloc_mad2(pixel_count, pal_img_n, 0);\n\tif (p == NULL) return stbi__err(\"outofmem\", \"Out of memory\");\n\n\t// between here and free(out) below, exitting would leak\n\ttemp_out = p;\n\n\tif (pal_img_n == 3) {\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tint n = orig[i] * 4;\n\t\t\tp[0] = palette[n];\n\t\t\tp[1] = palette[n + 1];\n\t\t\tp[2] = palette[n + 2];\n\t\t\tp += 3;\n\t\t}\n\t}\n\telse {\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tint n = orig[i] * 4;\n\t\t\tp[0] = palette[n];\n\t\t\tp[1] = palette[n + 1];\n\t\t\tp[2] = palette[n + 2];\n\t\t\tp[3] = palette[n + 3];\n\t\t\tp += 4;\n\t\t}\n\t}\n\tSTBI_FREE(a->out);\n\ta->out = temp_out;\n\n\tSTBI_NOTUSED(len);\n\n\treturn 1;\n}\n\nstatic int stbi__unpremultiply_on_load = 0;\nstatic int stbi__de_iphone_flag = 0;\n\nSTBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply)\n{\n\tstbi__unpremultiply_on_load = flag_true_if_should_unpremultiply;\n}\n\nSTBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert)\n{\n\tstbi__de_iphone_flag = flag_true_if_should_convert;\n}\n\nstatic void stbi__de_iphone(stbi__png *z)\n{\n\tstbi__context *s = z->s;\n\tstbi__uint32 i, pixel_count = s->img_x * s->img_y;\n\tstbi_uc *p = z->out;\n\n\tif (s->img_out_n == 3) {  // convert bgr to rgb\n\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\tstbi_uc t = p[0];\n\t\t\tp[0] = p[2];\n\t\t\tp[2] = t;\n\t\t\tp += 3;\n\t\t}\n\t}\n\telse {\n\t\tSTBI_ASSERT(s->img_out_n == 4);\n\t\tif (stbi__unpremultiply_on_load) {\n\t\t\t// convert bgr to rgb and unpremultiply\n\t\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\t\tstbi_uc a = p[3];\n\t\t\t\tstbi_uc t = p[0];\n\t\t\t\tif (a) {\n\t\t\t\t\tstbi_uc half = a / 2;\n\t\t\t\t\tp[0] = (p[2] * 255 + half) / a;\n\t\t\t\t\tp[1] = (p[1] * 255 + half) / a;\n\t\t\t\t\tp[2] = (t * 255 + half) / a;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tp[0] = p[2];\n\t\t\t\t\tp[2] = t;\n\t\t\t\t}\n\t\t\t\tp += 4;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// convert bgr to rgb\n\t\t\tfor (i = 0; i < pixel_count; ++i) {\n\t\t\t\tstbi_uc t = p[0];\n\t\t\t\tp[0] = p[2];\n\t\t\t\tp[2] = t;\n\t\t\t\tp += 4;\n\t\t\t}\n\t\t}\n\t}\n}\n\n#define STBI__PNG_TYPE(a,b,c,d)  (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d))\n\nstatic int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)\n{\n\tstbi_uc palette[1024], pal_img_n = 0;\n\tstbi_uc has_trans = 0, tc[3] = { 0 };\n\tstbi__uint16 tc16[3];\n\tstbi__uint32 ioff = 0, idata_limit = 0, i, pal_len = 0;\n\tint first = 1, k, interlace = 0, color = 0, is_iphone = 0;\n\tstbi__context *s = z->s;\n\n\tz->expanded = NULL;\n\tz->idata = NULL;\n\tz->out = NULL;\n\n\tif (!stbi__check_png_header(s)) return 0;\n\n\tif (scan == STBI__SCAN_type) return 1;\n\n\tfor (;;) {\n\t\tstbi__pngchunk c = stbi__get_chunk_header(s);\n\t\tswitch (c.type) {\n\t\tcase STBI__PNG_TYPE('C', 'g', 'B', 'I'):\n\t\t\tis_iphone = 1;\n\t\t\tstbi__skip(s, c.length);\n\t\t\tbreak;\n\t\tcase STBI__PNG_TYPE('I', 'H', 'D', 'R'): {\n\t\t\tint comp, filter;\n\t\t\tif (!first) return stbi__err(\"multiple IHDR\", \"Corrupt PNG\");\n\t\t\tfirst = 0;\n\t\t\tif (c.length != 13) return stbi__err(\"bad IHDR len\", \"Corrupt PNG\");\n\t\t\ts->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err(\"too large\", \"Very large image (corrupt?)\");\n\t\t\ts->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err(\"too large\", \"Very large image (corrupt?)\");\n\t\t\tz->depth = stbi__get8(s);  if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16)  return stbi__err(\"1/2/4/8/16-bit only\", \"PNG not supported: 1/2/4/8/16-bit only\");\n\t\t\tcolor = stbi__get8(s);  if (color > 6)         return stbi__err(\"bad ctype\", \"Corrupt PNG\");\n\t\t\tif (color == 3 && z->depth == 16)                  return stbi__err(\"bad ctype\", \"Corrupt PNG\");\n\t\t\tif (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err(\"bad ctype\", \"Corrupt PNG\");\n\t\t\tcomp = stbi__get8(s);  if (comp) return stbi__err(\"bad comp method\", \"Corrupt PNG\");\n\t\t\tfilter = stbi__get8(s);  if (filter) return stbi__err(\"bad filter method\", \"Corrupt PNG\");\n\t\t\tinterlace = stbi__get8(s); if (interlace > 1) return stbi__err(\"bad interlace method\", \"Corrupt PNG\");\n\t\t\tif (!s->img_x || !s->img_y) return stbi__err(\"0-pixel image\", \"Corrupt PNG\");\n\t\t\tif (!pal_img_n) {\n\t\t\t\ts->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0);\n\t\t\t\tif ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err(\"too large\", \"Image too large to decode\");\n\t\t\t\tif (scan == STBI__SCAN_header) return 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// if paletted, then pal_n is our final components, and\n\t\t\t\t// img_n is # components to decompress/filter.\n\t\t\t\ts->img_n = 1;\n\t\t\t\tif ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err(\"too large\", \"Corrupt PNG\");\n\t\t\t\t// if SCAN_header, have to scan to see if we have a tRNS\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase STBI__PNG_TYPE('P', 'L', 'T', 'E'): {\n\t\t\tif (first) return stbi__err(\"first not IHDR\", \"Corrupt PNG\");\n\t\t\tif (c.length > 256 * 3) return stbi__err(\"invalid PLTE\", \"Corrupt PNG\");\n\t\t\tpal_len = c.length / 3;\n\t\t\tif (pal_len * 3 != c.length) return stbi__err(\"invalid PLTE\", \"Corrupt PNG\");\n\t\t\tfor (i = 0; i < pal_len; ++i) {\n\t\t\t\tpalette[i * 4 + 0] = stbi__get8(s);\n\t\t\t\tpalette[i * 4 + 1] = stbi__get8(s);\n\t\t\t\tpalette[i * 4 + 2] = stbi__get8(s);\n\t\t\t\tpalette[i * 4 + 3] = 255;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase STBI__PNG_TYPE('t', 'R', 'N', 'S'): {\n\t\t\tif (first) return stbi__err(\"first not IHDR\", \"Corrupt PNG\");\n\t\t\tif (z->idata) return stbi__err(\"tRNS after IDAT\", \"Corrupt PNG\");\n\t\t\tif (pal_img_n) {\n\t\t\t\tif (scan == STBI__SCAN_header) { s->img_n = 4; return 1; }\n\t\t\t\tif (pal_len == 0) return stbi__err(\"tRNS before PLTE\", \"Corrupt PNG\");\n\t\t\t\tif (c.length > pal_len) return stbi__err(\"bad tRNS len\", \"Corrupt PNG\");\n\t\t\t\tpal_img_n = 4;\n\t\t\t\tfor (i = 0; i < c.length; ++i)\n\t\t\t\t\tpalette[i * 4 + 3] = stbi__get8(s);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!(s->img_n & 1)) return stbi__err(\"tRNS with alpha\", \"Corrupt PNG\");\n\t\t\t\tif (c.length != (stbi__uint32)s->img_n * 2) return stbi__err(\"bad tRNS len\", \"Corrupt PNG\");\n\t\t\t\thas_trans = 1;\n\t\t\t\tif (z->depth == 16) {\n\t\t\t\t\tfor (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase STBI__PNG_TYPE('I', 'D', 'A', 'T'): {\n\t\t\tif (first) return stbi__err(\"first not IHDR\", \"Corrupt PNG\");\n\t\t\tif (pal_img_n && !pal_len) return stbi__err(\"no PLTE\", \"Corrupt PNG\");\n\t\t\tif (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; }\n\t\t\tif ((int)(ioff + c.length) < (int)ioff) return 0;\n\t\t\tif (ioff + c.length > idata_limit) {\n\t\t\t\tstbi__uint32 idata_limit_old = idata_limit;\n\t\t\t\tstbi_uc *p;\n\t\t\t\tif (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096;\n\t\t\t\twhile (ioff + c.length > idata_limit)\n\t\t\t\t\tidata_limit *= 2;\n\t\t\t\tSTBI_NOTUSED(idata_limit_old);\n\t\t\t\tp = (stbi_uc *)STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err(\"outofmem\", \"Out of memory\");\n\t\t\t\tz->idata = p;\n\t\t\t}\n\t\t\tif (!stbi__getn(s, z->idata + ioff, c.length)) return stbi__err(\"outofdata\", \"Corrupt PNG\");\n\t\t\tioff += c.length;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase STBI__PNG_TYPE('I', 'E', 'N', 'D'): {\n\t\t\tstbi__uint32 raw_len, bpl;\n\t\t\tif (first) return stbi__err(\"first not IHDR\", \"Corrupt PNG\");\n\t\t\tif (scan != STBI__SCAN_load) return 1;\n\t\t\tif (z->idata == NULL) return stbi__err(\"no IDAT\", \"Corrupt PNG\");\n\t\t\t// initial guess for decoded data size to avoid unnecessary reallocs\n\t\t\tbpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component\n\t\t\traw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */;\n\t\t\tz->expanded = (stbi_uc *)stbi_zlib_decode_malloc_guesssize_headerflag((char *)z->idata, ioff, raw_len, (int *)&raw_len, !is_iphone);\n\t\t\tif (z->expanded == NULL) return 0; // zlib should set error\n\t\t\tSTBI_FREE(z->idata); z->idata = NULL;\n\t\t\tif ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || has_trans)\n\t\t\t\ts->img_out_n = s->img_n + 1;\n\t\t\telse\n\t\t\t\ts->img_out_n = s->img_n;\n\t\t\tif (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0;\n\t\t\tif (has_trans) {\n\t\t\t\tif (z->depth == 16) {\n\t\t\t\t\tif (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2)\n\t\t\t\tstbi__de_iphone(z);\n\t\t\tif (pal_img_n) {\n\t\t\t\t// pal_img_n == 3 or 4\n\t\t\t\ts->img_n = pal_img_n; // record the actual colors we had\n\t\t\t\ts->img_out_n = pal_img_n;\n\t\t\t\tif (req_comp >= 3) s->img_out_n = req_comp;\n\t\t\t\tif (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n))\n\t\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse if (has_trans) {\n\t\t\t\t// non-paletted image with tRNS -> source image has (constant) alpha\n\t\t\t\t++s->img_n;\n\t\t\t}\n\t\t\tSTBI_FREE(z->expanded); z->expanded = NULL;\n\t\t\treturn 1;\n\t\t}\n\n\t\tdefault:\n\t\t\t// if critical, fail\n\t\t\tif (first) return stbi__err(\"first not IHDR\", \"Corrupt PNG\");\n\t\t\tif ((c.type & (1 << 29)) == 0) {\n#ifndef STBI_NO_FAILURE_STRINGS\n\t\t\t\t// not threadsafe\n\t\t\t\tstatic char invalid_chunk[] = \"XXXX PNG chunk not known\";\n\t\t\t\tinvalid_chunk[0] = STBI__BYTECAST(c.type >> 24);\n\t\t\t\tinvalid_chunk[1] = STBI__BYTECAST(c.type >> 16);\n\t\t\t\tinvalid_chunk[2] = STBI__BYTECAST(c.type >> 8);\n\t\t\t\tinvalid_chunk[3] = STBI__BYTECAST(c.type >> 0);\n#endif\n\t\t\t\treturn stbi__err(invalid_chunk, \"PNG not supported: unknown PNG chunk type\");\n\t\t\t}\n\t\t\tstbi__skip(s, c.length);\n\t\t\tbreak;\n\t\t}\n\t\t// end of PNG chunk, read and skip CRC\n\t\tstbi__get32be(s);\n\t}\n}\n\nstatic void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri)\n{\n\tvoid *result = NULL;\n\tif (req_comp < 0 || req_comp > 4) return stbi__errpuc(\"bad req_comp\", \"Internal error\");\n\tif (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) {\n\t\tif (p->depth < 8)\n\t\t\tri->bits_per_channel = 8;\n\t\telse\n\t\t\tri->bits_per_channel = p->depth;\n\t\tresult = p->out;\n\t\tp->out = NULL;\n\t\tif (req_comp && req_comp != p->s->img_out_n) {\n\t\t\tif (ri->bits_per_channel == 8)\n\t\t\t\tresult = stbi__convert_format((unsigned char *)result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);\n\t\t\telse\n\t\t\t\tresult = stbi__convert_format16((stbi__uint16 *)result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);\n\t\t\tp->s->img_out_n = req_comp;\n\t\t\tif (result == NULL) return result;\n\t\t}\n\t\t*x = p->s->img_x;\n\t\t*y = p->s->img_y;\n\t\tif (n) *n = p->s->img_n;\n\t}\n\tSTBI_FREE(p->out);      p->out = NULL;\n\tSTBI_FREE(p->expanded); p->expanded = NULL;\n\tSTBI_FREE(p->idata);    p->idata = NULL;\n\n\treturn result;\n}\n\nstatic void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tstbi__png p;\n\tp.s = s;\n\treturn stbi__do_png(&p, x, y, comp, req_comp, ri);\n}\n\nstatic int stbi__png_test(stbi__context *s)\n{\n\tint r;\n\tr = stbi__check_png_header(s);\n\tstbi__rewind(s);\n\treturn r;\n}\n\nstatic int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)\n{\n\tif (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) {\n\t\tstbi__rewind(p->s);\n\t\treturn 0;\n\t}\n\tif (x) *x = p->s->img_x;\n\tif (y) *y = p->s->img_y;\n\tif (comp) *comp = p->s->img_n;\n\treturn 1;\n}\n\nstatic int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tstbi__png p;\n\tp.s = s;\n\treturn stbi__png_info_raw(&p, x, y, comp);\n}\n\nstatic int stbi__png_is16(stbi__context *s)\n{\n\tstbi__png p;\n\tp.s = s;\n\tif (!stbi__png_info_raw(&p, NULL, NULL, NULL))\n\t\treturn 0;\n\tif (p.depth != 16) {\n\t\tstbi__rewind(p.s);\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n#endif\n\n// Microsoft/Windows BMP image\n\n#ifndef STBI_NO_BMP\nstatic int stbi__bmp_test_raw(stbi__context *s)\n{\n\tint r;\n\tint sz;\n\tif (stbi__get8(s) != 'B') return 0;\n\tif (stbi__get8(s) != 'M') return 0;\n\tstbi__get32le(s); // discard filesize\n\tstbi__get16le(s); // discard reserved\n\tstbi__get16le(s); // discard reserved\n\tstbi__get32le(s); // discard data offset\n\tsz = stbi__get32le(s);\n\tr = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124);\n\treturn r;\n}\n\nstatic int stbi__bmp_test(stbi__context *s)\n{\n\tint r = stbi__bmp_test_raw(s);\n\tstbi__rewind(s);\n\treturn r;\n}\n\n\n// returns 0..31 for the highest set bit\nstatic int stbi__high_bit(unsigned int z)\n{\n\tint n = 0;\n\tif (z == 0) return -1;\n\tif (z >= 0x10000) { n += 16; z >>= 16; }\n\tif (z >= 0x00100) { n += 8; z >>= 8; }\n\tif (z >= 0x00010) { n += 4; z >>= 4; }\n\tif (z >= 0x00004) { n += 2; z >>= 2; }\n\tif (z >= 0x00002) { n += 1;/* >>=  1;*/ }\n\treturn n;\n}\n\nstatic int stbi__bitcount(unsigned int a)\n{\n\ta = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2\n\ta = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4\n\ta = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits\n\ta = (a + (a >> 8)); // max 16 per 8 bits\n\ta = (a + (a >> 16)); // max 32 per 8 bits\n\treturn a & 0xff;\n}\n\n// extract an arbitrarily-aligned N-bit value (N=bits)\n// from v, and then make it 8-bits long and fractionally\n// extend it to full full range.\nstatic int stbi__shiftsigned(unsigned int v, int shift, int bits)\n{\n\tstatic unsigned int mul_table[9] = {\n\t   0,\n\t   0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/,\n\t   0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/,\n\t};\n\tstatic unsigned int shift_table[9] = {\n\t   0, 0,0,1,0,2,4,6,0,\n\t};\n\tif (shift < 0)\n\t\tv <<= -shift;\n\telse\n\t\tv >>= shift;\n\tSTBI_ASSERT(v >= 0 && v < 256);\n\tv >>= (8 - bits);\n\tSTBI_ASSERT(bits >= 0 && bits <= 8);\n\treturn (int)((unsigned)v * mul_table[bits]) >> shift_table[bits];\n}\n\ntypedef struct\n{\n\tint bpp, offset, hsz;\n\tunsigned int mr, mg, mb, ma, all_a;\n} stbi__bmp_data;\n\nstatic void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info)\n{\n\tint hsz;\n\tif (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc(\"not BMP\", \"Corrupt BMP\");\n\tstbi__get32le(s); // discard filesize\n\tstbi__get16le(s); // discard reserved\n\tstbi__get16le(s); // discard reserved\n\tinfo->offset = stbi__get32le(s);\n\tinfo->hsz = hsz = stbi__get32le(s);\n\tinfo->mr = info->mg = info->mb = info->ma = 0;\n\n\tif (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc(\"unknown BMP\", \"BMP type not supported: unknown\");\n\tif (hsz == 12) {\n\t\ts->img_x = stbi__get16le(s);\n\t\ts->img_y = stbi__get16le(s);\n\t}\n\telse {\n\t\ts->img_x = stbi__get32le(s);\n\t\ts->img_y = stbi__get32le(s);\n\t}\n\tif (stbi__get16le(s) != 1) return stbi__errpuc(\"bad BMP\", \"bad BMP\");\n\tinfo->bpp = stbi__get16le(s);\n\tif (hsz != 12) {\n\t\tint compress = stbi__get32le(s);\n\t\tif (compress == 1 || compress == 2) return stbi__errpuc(\"BMP RLE\", \"BMP type not supported: RLE\");\n\t\tstbi__get32le(s); // discard sizeof\n\t\tstbi__get32le(s); // discard hres\n\t\tstbi__get32le(s); // discard vres\n\t\tstbi__get32le(s); // discard colorsused\n\t\tstbi__get32le(s); // discard max important\n\t\tif (hsz == 40 || hsz == 56) {\n\t\t\tif (hsz == 56) {\n\t\t\t\tstbi__get32le(s);\n\t\t\t\tstbi__get32le(s);\n\t\t\t\tstbi__get32le(s);\n\t\t\t\tstbi__get32le(s);\n\t\t\t}\n\t\t\tif (info->bpp == 16 || info->bpp == 32) {\n\t\t\t\tif (compress == 0) {\n\t\t\t\t\tif (info->bpp == 32) {\n\t\t\t\t\t\tinfo->mr = 0xffu << 16;\n\t\t\t\t\t\tinfo->mg = 0xffu << 8;\n\t\t\t\t\t\tinfo->mb = 0xffu << 0;\n\t\t\t\t\t\tinfo->ma = 0xffu << 24;\n\t\t\t\t\t\tinfo->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinfo->mr = 31u << 10;\n\t\t\t\t\t\tinfo->mg = 31u << 5;\n\t\t\t\t\t\tinfo->mb = 31u << 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (compress == 3) {\n\t\t\t\t\tinfo->mr = stbi__get32le(s);\n\t\t\t\t\tinfo->mg = stbi__get32le(s);\n\t\t\t\t\tinfo->mb = stbi__get32le(s);\n\t\t\t\t\t// not documented, but generated by photoshop and handled by mspaint\n\t\t\t\t\tif (info->mr == info->mg && info->mg == info->mb) {\n\t\t\t\t\t\t// ?!?!?\n\t\t\t\t\t\treturn stbi__errpuc(\"bad BMP\", \"bad BMP\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\treturn stbi__errpuc(\"bad BMP\", \"bad BMP\");\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tint i;\n\t\t\tif (hsz != 108 && hsz != 124)\n\t\t\t\treturn stbi__errpuc(\"bad BMP\", \"bad BMP\");\n\t\t\tinfo->mr = stbi__get32le(s);\n\t\t\tinfo->mg = stbi__get32le(s);\n\t\t\tinfo->mb = stbi__get32le(s);\n\t\t\tinfo->ma = stbi__get32le(s);\n\t\t\tstbi__get32le(s); // discard color space\n\t\t\tfor (i = 0; i < 12; ++i)\n\t\t\t\tstbi__get32le(s); // discard color space parameters\n\t\t\tif (hsz == 124) {\n\t\t\t\tstbi__get32le(s); // discard rendering intent\n\t\t\t\tstbi__get32le(s); // discard offset of profile data\n\t\t\t\tstbi__get32le(s); // discard size of profile data\n\t\t\t\tstbi__get32le(s); // discard reserved\n\t\t\t}\n\t\t}\n\t}\n\treturn (void *)1;\n}\n\n\nstatic void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tstbi_uc *out;\n\tunsigned int mr = 0, mg = 0, mb = 0, ma = 0, all_a;\n\tstbi_uc pal[256][4];\n\tint psize = 0, i, j, width;\n\tint flip_vertically, pad, target;\n\tstbi__bmp_data info;\n\tSTBI_NOTUSED(ri);\n\n\tinfo.all_a = 255;\n\tif (stbi__bmp_parse_header(s, &info) == NULL)\n\t\treturn NULL; // error code already set\n\n\tflip_vertically = ((int)s->img_y) > 0;\n\ts->img_y = abs((int)s->img_y);\n\n\tmr = info.mr;\n\tmg = info.mg;\n\tmb = info.mb;\n\tma = info.ma;\n\tall_a = info.all_a;\n\n\tif (info.hsz == 12) {\n\t\tif (info.bpp < 24)\n\t\t\tpsize = (info.offset - 14 - 24) / 3;\n\t}\n\telse {\n\t\tif (info.bpp < 16)\n\t\t\tpsize = (info.offset - 14 - info.hsz) >> 2;\n\t}\n\n\tif (info.bpp == 24 && ma == 0xff000000)\n\t\ts->img_n = 3;\n\telse\n\t\ts->img_n = ma ? 4 : 3;\n\tif (req_comp && req_comp >= 3) // we can directly decode 3 or 4\n\t\ttarget = req_comp;\n\telse\n\t\ttarget = s->img_n; // if they want monochrome, we'll post-convert\n\n\t // sanity-check size\n\tif (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0))\n\t\treturn stbi__errpuc(\"too large\", \"Corrupt BMP\");\n\n\tout = (stbi_uc *)stbi__malloc_mad3(target, s->img_x, s->img_y, 0);\n\tif (!out) return stbi__errpuc(\"outofmem\", \"Out of memory\");\n\tif (info.bpp < 16) {\n\t\tint z = 0;\n\t\tif (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc(\"invalid\", \"Corrupt BMP\"); }\n\t\tfor (i = 0; i < psize; ++i) {\n\t\t\tpal[i][2] = stbi__get8(s);\n\t\t\tpal[i][1] = stbi__get8(s);\n\t\t\tpal[i][0] = stbi__get8(s);\n\t\t\tif (info.hsz != 12) stbi__get8(s);\n\t\t\tpal[i][3] = 255;\n\t\t}\n\t\tstbi__skip(s, info.offset - 14 - info.hsz - psize * (info.hsz == 12 ? 3 : 4));\n\t\tif (info.bpp == 1) width = (s->img_x + 7) >> 3;\n\t\telse if (info.bpp == 4) width = (s->img_x + 1) >> 1;\n\t\telse if (info.bpp == 8) width = s->img_x;\n\t\telse { STBI_FREE(out); return stbi__errpuc(\"bad bpp\", \"Corrupt BMP\"); }\n\t\tpad = (-width) & 3;\n\t\tif (info.bpp == 1) {\n\t\t\tfor (j = 0; j < (int)s->img_y; ++j) {\n\t\t\t\tint bit_offset = 7, v = stbi__get8(s);\n\t\t\t\tfor (i = 0; i < (int)s->img_x; ++i) {\n\t\t\t\t\tint color = (v >> bit_offset) & 0x1;\n\t\t\t\t\tout[z++] = pal[color][0];\n\t\t\t\t\tout[z++] = pal[color][1];\n\t\t\t\t\tout[z++] = pal[color][2];\n\t\t\t\t\tif (target == 4) out[z++] = 255;\n\t\t\t\t\tif (i + 1 == (int)s->img_x) break;\n\t\t\t\t\tif ((--bit_offset) < 0) {\n\t\t\t\t\t\tbit_offset = 7;\n\t\t\t\t\t\tv = stbi__get8(s);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstbi__skip(s, pad);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (j = 0; j < (int)s->img_y; ++j) {\n\t\t\t\tfor (i = 0; i < (int)s->img_x; i += 2) {\n\t\t\t\t\tint v = stbi__get8(s), v2 = 0;\n\t\t\t\t\tif (info.bpp == 4) {\n\t\t\t\t\t\tv2 = v & 15;\n\t\t\t\t\t\tv >>= 4;\n\t\t\t\t\t}\n\t\t\t\t\tout[z++] = pal[v][0];\n\t\t\t\t\tout[z++] = pal[v][1];\n\t\t\t\t\tout[z++] = pal[v][2];\n\t\t\t\t\tif (target == 4) out[z++] = 255;\n\t\t\t\t\tif (i + 1 == (int)s->img_x) break;\n\t\t\t\t\tv = (info.bpp == 8) ? stbi__get8(s) : v2;\n\t\t\t\t\tout[z++] = pal[v][0];\n\t\t\t\t\tout[z++] = pal[v][1];\n\t\t\t\t\tout[z++] = pal[v][2];\n\t\t\t\t\tif (target == 4) out[z++] = 255;\n\t\t\t\t}\n\t\t\t\tstbi__skip(s, pad);\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tint rshift = 0, gshift = 0, bshift = 0, ashift = 0, rcount = 0, gcount = 0, bcount = 0, acount = 0;\n\t\tint z = 0;\n\t\tint easy = 0;\n\t\tstbi__skip(s, info.offset - 14 - info.hsz);\n\t\tif (info.bpp == 24) width = 3 * s->img_x;\n\t\telse if (info.bpp == 16) width = 2 * s->img_x;\n\t\telse /* bpp = 32 and pad = 0 */ width = 0;\n\t\tpad = (-width) & 3;\n\t\tif (info.bpp == 24) {\n\t\t\teasy = 1;\n\t\t}\n\t\telse if (info.bpp == 32) {\n\t\t\tif (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000)\n\t\t\t\teasy = 2;\n\t\t}\n\t\tif (!easy) {\n\t\t\tif (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc(\"bad masks\", \"Corrupt BMP\"); }\n\t\t\t// right shift amt to put high bit in position #7\n\t\t\trshift = stbi__high_bit(mr) - 7; rcount = stbi__bitcount(mr);\n\t\t\tgshift = stbi__high_bit(mg) - 7; gcount = stbi__bitcount(mg);\n\t\t\tbshift = stbi__high_bit(mb) - 7; bcount = stbi__bitcount(mb);\n\t\t\tashift = stbi__high_bit(ma) - 7; acount = stbi__bitcount(ma);\n\t\t}\n\t\tfor (j = 0; j < (int)s->img_y; ++j) {\n\t\t\tif (easy) {\n\t\t\t\tfor (i = 0; i < (int)s->img_x; ++i) {\n\t\t\t\t\tunsigned char a;\n\t\t\t\t\tout[z + 2] = stbi__get8(s);\n\t\t\t\t\tout[z + 1] = stbi__get8(s);\n\t\t\t\t\tout[z + 0] = stbi__get8(s);\n\t\t\t\t\tz += 3;\n\t\t\t\t\ta = (easy == 2 ? stbi__get8(s) : 255);\n\t\t\t\t\tall_a |= a;\n\t\t\t\t\tif (target == 4) out[z++] = a;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tint bpp = info.bpp;\n\t\t\t\tfor (i = 0; i < (int)s->img_x; ++i) {\n\t\t\t\t\tstbi__uint32 v = (bpp == 16 ? (stbi__uint32)stbi__get16le(s) : stbi__get32le(s));\n\t\t\t\t\tunsigned int a;\n\t\t\t\t\tout[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount));\n\t\t\t\t\tout[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount));\n\t\t\t\t\tout[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount));\n\t\t\t\t\ta = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255);\n\t\t\t\t\tall_a |= a;\n\t\t\t\t\tif (target == 4) out[z++] = STBI__BYTECAST(a);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstbi__skip(s, pad);\n\t\t}\n\t}\n\n\t// if alpha channel is all 0s, replace with all 255s\n\tif (target == 4 && all_a == 0)\n\t\tfor (i = 4 * s->img_x*s->img_y - 1; i >= 0; i -= 4)\n\t\t\tout[i] = 255;\n\n\tif (flip_vertically) {\n\t\tstbi_uc t;\n\t\tfor (j = 0; j < (int)s->img_y >> 1; ++j) {\n\t\t\tstbi_uc *p1 = out + j * s->img_x*target;\n\t\t\tstbi_uc *p2 = out + (s->img_y - 1 - j)*s->img_x*target;\n\t\t\tfor (i = 0; i < (int)s->img_x*target; ++i) {\n\t\t\t\tt = p1[i]; p1[i] = p2[i]; p2[i] = t;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (req_comp && req_comp != target) {\n\t\tout = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y);\n\t\tif (out == NULL) return out; // stbi__convert_format frees input on failure\n\t}\n\n\t*x = s->img_x;\n\t*y = s->img_y;\n\tif (comp) *comp = s->img_n;\n\treturn out;\n}\n#endif\n\n// Targa Truevision - TGA\n// by Jonathan Dummer\n#ifndef STBI_NO_TGA\n// returns STBI_rgb or whatever, 0 on error\nstatic int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16)\n{\n\t// only RGB or RGBA (incl. 16bit) or grey allowed\n\tif (is_rgb16) *is_rgb16 = 0;\n\tswitch (bits_per_pixel) {\n\tcase 8:  return STBI_grey;\n\tcase 16: if (is_grey) return STBI_grey_alpha;\n\t\t// fallthrough\n\tcase 15: if (is_rgb16) *is_rgb16 = 1;\n\t\treturn STBI_rgb;\n\tcase 24: // fallthrough\n\tcase 32: return bits_per_pixel / 8;\n\tdefault: return 0;\n\t}\n}\n\nstatic int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tint tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp;\n\tint sz, tga_colormap_type;\n\tstbi__get8(s);                   // discard Offset\n\ttga_colormap_type = stbi__get8(s); // colormap type\n\tif (tga_colormap_type > 1) {\n\t\tstbi__rewind(s);\n\t\treturn 0;      // only RGB or indexed allowed\n\t}\n\ttga_image_type = stbi__get8(s); // image type\n\tif (tga_colormap_type == 1) { // colormapped (paletted) image\n\t\tif (tga_image_type != 1 && tga_image_type != 9) {\n\t\t\tstbi__rewind(s);\n\t\t\treturn 0;\n\t\t}\n\t\tstbi__skip(s, 4);       // skip index of first colormap entry and number of entries\n\t\tsz = stbi__get8(s);    //   check bits per palette color entry\n\t\tif ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) {\n\t\t\tstbi__rewind(s);\n\t\t\treturn 0;\n\t\t}\n\t\tstbi__skip(s, 4);       // skip image x and y origin\n\t\ttga_colormap_bpp = sz;\n\t}\n\telse { // \"normal\" image w/o colormap - only RGB or grey allowed, +/- RLE\n\t\tif ((tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11)) {\n\t\t\tstbi__rewind(s);\n\t\t\treturn 0; // only RGB or grey allowed, +/- RLE\n\t\t}\n\t\tstbi__skip(s, 9); // skip colormap specification and image x/y origin\n\t\ttga_colormap_bpp = 0;\n\t}\n\ttga_w = stbi__get16le(s);\n\tif (tga_w < 1) {\n\t\tstbi__rewind(s);\n\t\treturn 0;   // test width\n\t}\n\ttga_h = stbi__get16le(s);\n\tif (tga_h < 1) {\n\t\tstbi__rewind(s);\n\t\treturn 0;   // test height\n\t}\n\ttga_bits_per_pixel = stbi__get8(s); // bits per pixel\n\tstbi__get8(s); // ignore alpha bits\n\tif (tga_colormap_bpp != 0) {\n\t\tif ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) {\n\t\t\t// when using a colormap, tga_bits_per_pixel is the size of the indexes\n\t\t\t// I don't think anything but 8 or 16bit indexes makes sense\n\t\t\tstbi__rewind(s);\n\t\t\treturn 0;\n\t\t}\n\t\ttga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL);\n\t}\n\telse {\n\t\ttga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL);\n\t}\n\tif (!tga_comp) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tif (x) *x = tga_w;\n\tif (y) *y = tga_h;\n\tif (comp) *comp = tga_comp;\n\treturn 1;                   // seems to have passed everything\n}\n\nstatic int stbi__tga_test(stbi__context *s)\n{\n\tint res = 0;\n\tint sz, tga_color_type;\n\tstbi__get8(s);      //   discard Offset\n\ttga_color_type = stbi__get8(s);   //   color type\n\tif (tga_color_type > 1) goto errorEnd;   //   only RGB or indexed allowed\n\tsz = stbi__get8(s);   //   image type\n\tif (tga_color_type == 1) { // colormapped (paletted) image\n\t\tif (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9\n\t\tstbi__skip(s, 4);       // skip index of first colormap entry and number of entries\n\t\tsz = stbi__get8(s);    //   check bits per palette color entry\n\t\tif ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) goto errorEnd;\n\t\tstbi__skip(s, 4);       // skip image x and y origin\n\t}\n\telse { // \"normal\" image w/o colormap\n\t\tif ((sz != 2) && (sz != 3) && (sz != 10) && (sz != 11)) goto errorEnd; // only RGB or grey allowed, +/- RLE\n\t\tstbi__skip(s, 9); // skip colormap specification and image x/y origin\n\t}\n\tif (stbi__get16le(s) < 1) goto errorEnd;      //   test width\n\tif (stbi__get16le(s) < 1) goto errorEnd;      //   test height\n\tsz = stbi__get8(s);   //   bits per pixel\n\tif ((tga_color_type == 1) && (sz != 8) && (sz != 16)) goto errorEnd; // for colormapped images, bpp is size of an index\n\tif ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) goto errorEnd;\n\n\tres = 1; // if we got this far, everything's good and we can return 1 instead of 0\n\nerrorEnd:\n\tstbi__rewind(s);\n\treturn res;\n}\n\n// read 16bit value and convert to 24bit RGB\nstatic void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)\n{\n\tstbi__uint16 px = (stbi__uint16)stbi__get16le(s);\n\tstbi__uint16 fiveBitMask = 31;\n\t// we have 3 channels with 5bits each\n\tint r = (px >> 10) & fiveBitMask;\n\tint g = (px >> 5) & fiveBitMask;\n\tint b = px & fiveBitMask;\n\t// Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later\n\tout[0] = (stbi_uc)((r * 255) / 31);\n\tout[1] = (stbi_uc)((g * 255) / 31);\n\tout[2] = (stbi_uc)((b * 255) / 31);\n\n\t// some people claim that the most significant bit might be used for alpha\n\t// (possibly if an alpha-bit is set in the \"image descriptor byte\")\n\t// but that only made 16bit test images completely translucent..\n\t// so let's treat all 15 and 16bit TGAs as RGB with no alpha.\n}\n\nstatic void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\t//   read in the TGA header stuff\n\tint tga_offset = stbi__get8(s);\n\tint tga_indexed = stbi__get8(s);\n\tint tga_image_type = stbi__get8(s);\n\tint tga_is_RLE = 0;\n\tint tga_palette_start = stbi__get16le(s);\n\tint tga_palette_len = stbi__get16le(s);\n\tint tga_palette_bits = stbi__get8(s);\n\tint tga_x_origin = stbi__get16le(s);\n\tint tga_y_origin = stbi__get16le(s);\n\tint tga_width = stbi__get16le(s);\n\tint tga_height = stbi__get16le(s);\n\tint tga_bits_per_pixel = stbi__get8(s);\n\tint tga_comp, tga_rgb16 = 0;\n\tint tga_inverted = stbi__get8(s);\n\t// int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?)\n\t//   image data\n\tunsigned char *tga_data;\n\tunsigned char *tga_palette = NULL;\n\tint i, j;\n\tunsigned char raw_data[4] = { 0 };\n\tint RLE_count = 0;\n\tint RLE_repeating = 0;\n\tint read_next_pixel = 1;\n\tSTBI_NOTUSED(ri);\n\tSTBI_NOTUSED(tga_x_origin); // @TODO\n\tSTBI_NOTUSED(tga_y_origin); // @TODO\n\n\t//   do a tiny bit of precessing\n\tif (tga_image_type >= 8)\n\t{\n\t\ttga_image_type -= 8;\n\t\ttga_is_RLE = 1;\n\t}\n\ttga_inverted = 1 - ((tga_inverted >> 5) & 1);\n\n\t//   If I'm paletted, then I'll use the number of bits from the palette\n\tif (tga_indexed) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16);\n\telse tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16);\n\n\tif (!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency\n\t\treturn stbi__errpuc(\"bad format\", \"Can't find out TGA pixelformat\");\n\n\t//   tga info\n\t*x = tga_width;\n\t*y = tga_height;\n\tif (comp) *comp = tga_comp;\n\n\tif (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0))\n\t\treturn stbi__errpuc(\"too large\", \"Corrupt TGA\");\n\n\ttga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0);\n\tif (!tga_data) return stbi__errpuc(\"outofmem\", \"Out of memory\");\n\n\t// skip to the data's starting position (offset usually = 0)\n\tstbi__skip(s, tga_offset);\n\n\tif (!tga_indexed && !tga_is_RLE && !tga_rgb16) {\n\t\tfor (i = 0; i < tga_height; ++i) {\n\t\t\tint row = tga_inverted ? tga_height - i - 1 : i;\n\t\t\tstbi_uc *tga_row = tga_data + row * tga_width*tga_comp;\n\t\t\tstbi__getn(s, tga_row, tga_width * tga_comp);\n\t\t}\n\t}\n\telse {\n\t\t//   do I need to load a palette?\n\t\tif (tga_indexed)\n\t\t{\n\t\t\t//   any data to skip? (offset usually = 0)\n\t\t\tstbi__skip(s, tga_palette_start);\n\t\t\t//   load the palette\n\t\t\ttga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0);\n\t\t\tif (!tga_palette) {\n\t\t\t\tSTBI_FREE(tga_data);\n\t\t\t\treturn stbi__errpuc(\"outofmem\", \"Out of memory\");\n\t\t\t}\n\t\t\tif (tga_rgb16) {\n\t\t\t\tstbi_uc *pal_entry = tga_palette;\n\t\t\t\tSTBI_ASSERT(tga_comp == STBI_rgb);\n\t\t\t\tfor (i = 0; i < tga_palette_len; ++i) {\n\t\t\t\t\tstbi__tga_read_rgb16(s, pal_entry);\n\t\t\t\t\tpal_entry += tga_comp;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) {\n\t\t\t\tSTBI_FREE(tga_data);\n\t\t\t\tSTBI_FREE(tga_palette);\n\t\t\t\treturn stbi__errpuc(\"bad palette\", \"Corrupt TGA\");\n\t\t\t}\n\t\t}\n\t\t//   load the data\n\t\tfor (i = 0; i < tga_width * tga_height; ++i)\n\t\t{\n\t\t\t//   if I'm in RLE mode, do I need to get a RLE stbi__pngchunk?\n\t\t\tif (tga_is_RLE)\n\t\t\t{\n\t\t\t\tif (RLE_count == 0)\n\t\t\t\t{\n\t\t\t\t\t//   yep, get the next byte as a RLE command\n\t\t\t\t\tint RLE_cmd = stbi__get8(s);\n\t\t\t\t\tRLE_count = 1 + (RLE_cmd & 127);\n\t\t\t\t\tRLE_repeating = RLE_cmd >> 7;\n\t\t\t\t\tread_next_pixel = 1;\n\t\t\t\t}\n\t\t\t\telse if (!RLE_repeating)\n\t\t\t\t{\n\t\t\t\t\tread_next_pixel = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tread_next_pixel = 1;\n\t\t\t}\n\t\t\t//   OK, if I need to read a pixel, do it now\n\t\t\tif (read_next_pixel)\n\t\t\t{\n\t\t\t\t//   load however much data we did have\n\t\t\t\tif (tga_indexed)\n\t\t\t\t{\n\t\t\t\t\t// read in index, then perform the lookup\n\t\t\t\t\tint pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s);\n\t\t\t\t\tif (pal_idx >= tga_palette_len) {\n\t\t\t\t\t\t// invalid index\n\t\t\t\t\t\tpal_idx = 0;\n\t\t\t\t\t}\n\t\t\t\t\tpal_idx *= tga_comp;\n\t\t\t\t\tfor (j = 0; j < tga_comp; ++j) {\n\t\t\t\t\t\traw_data[j] = tga_palette[pal_idx + j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (tga_rgb16) {\n\t\t\t\t\tSTBI_ASSERT(tga_comp == STBI_rgb);\n\t\t\t\t\tstbi__tga_read_rgb16(s, raw_data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//   read in the data raw\n\t\t\t\t\tfor (j = 0; j < tga_comp; ++j) {\n\t\t\t\t\t\traw_data[j] = stbi__get8(s);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//   clear the reading flag for the next pixel\n\t\t\t\tread_next_pixel = 0;\n\t\t\t} // end of reading a pixel\n\n\t\t\t// copy data\n\t\t\tfor (j = 0; j < tga_comp; ++j)\n\t\t\t\ttga_data[i*tga_comp + j] = raw_data[j];\n\n\t\t\t//   in case we're in RLE mode, keep counting down\n\t\t\t--RLE_count;\n\t\t}\n\t\t//   do I need to invert the image?\n\t\tif (tga_inverted)\n\t\t{\n\t\t\tfor (j = 0; j * 2 < tga_height; ++j)\n\t\t\t{\n\t\t\t\tint index1 = j * tga_width * tga_comp;\n\t\t\t\tint index2 = (tga_height - 1 - j) * tga_width * tga_comp;\n\t\t\t\tfor (i = tga_width * tga_comp; i > 0; --i)\n\t\t\t\t{\n\t\t\t\t\tunsigned char temp = tga_data[index1];\n\t\t\t\t\ttga_data[index1] = tga_data[index2];\n\t\t\t\t\ttga_data[index2] = temp;\n\t\t\t\t\t++index1;\n\t\t\t\t\t++index2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//   clear my palette, if I had one\n\t\tif (tga_palette != NULL)\n\t\t{\n\t\t\tSTBI_FREE(tga_palette);\n\t\t}\n\t}\n\n\t// swap RGB - if the source data was RGB16, it already is in the right order\n\tif (tga_comp >= 3 && !tga_rgb16)\n\t{\n\t\tunsigned char* tga_pixel = tga_data;\n\t\tfor (i = 0; i < tga_width * tga_height; ++i)\n\t\t{\n\t\t\tunsigned char temp = tga_pixel[0];\n\t\t\ttga_pixel[0] = tga_pixel[2];\n\t\t\ttga_pixel[2] = temp;\n\t\t\ttga_pixel += tga_comp;\n\t\t}\n\t}\n\n\t// convert to target component count\n\tif (req_comp && req_comp != tga_comp)\n\t\ttga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height);\n\n\t//   the things I do to get rid of an error message, and yet keep\n\t//   Microsoft's C compilers happy... [8^(\n\ttga_palette_start = tga_palette_len = tga_palette_bits =\n\t\ttga_x_origin = tga_y_origin = 0;\n\tSTBI_NOTUSED(tga_palette_start);\n\t//   OK, done\n\treturn tga_data;\n}\n#endif\n\n// *************************************************************************************************\n// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB\n\n#ifndef STBI_NO_PSD\nstatic int stbi__psd_test(stbi__context *s)\n{\n\tint r = (stbi__get32be(s) == 0x38425053);\n\tstbi__rewind(s);\n\treturn r;\n}\n\nstatic int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount)\n{\n\tint count, nleft, len;\n\n\tcount = 0;\n\twhile ((nleft = pixelCount - count) > 0) {\n\t\tlen = stbi__get8(s);\n\t\tif (len == 128) {\n\t\t\t// No-op.\n\t\t}\n\t\telse if (len < 128) {\n\t\t\t// Copy next len+1 bytes literally.\n\t\t\tlen++;\n\t\t\tif (len > nleft) return 0; // corrupt data\n\t\t\tcount += len;\n\t\t\twhile (len) {\n\t\t\t\t*p = stbi__get8(s);\n\t\t\t\tp += 4;\n\t\t\t\tlen--;\n\t\t\t}\n\t\t}\n\t\telse if (len > 128) {\n\t\t\tstbi_uc   val;\n\t\t\t// Next -len+1 bytes in the dest are replicated from next source byte.\n\t\t\t// (Interpret len as a negative 8-bit int.)\n\t\t\tlen = 257 - len;\n\t\t\tif (len > nleft) return 0; // corrupt data\n\t\t\tval = stbi__get8(s);\n\t\t\tcount += len;\n\t\t\twhile (len) {\n\t\t\t\t*p = val;\n\t\t\t\tp += 4;\n\t\t\t\tlen--;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 1;\n}\n\nstatic void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc)\n{\n\tint pixelCount;\n\tint channelCount, compression;\n\tint channel, i;\n\tint bitdepth;\n\tint w, h;\n\tstbi_uc *out;\n\tSTBI_NOTUSED(ri);\n\n\t// Check identifier\n\tif (stbi__get32be(s) != 0x38425053)   // \"8BPS\"\n\t\treturn stbi__errpuc(\"not PSD\", \"Corrupt PSD image\");\n\n\t// Check file type version.\n\tif (stbi__get16be(s) != 1)\n\t\treturn stbi__errpuc(\"wrong version\", \"Unsupported version of PSD image\");\n\n\t// Skip 6 reserved bytes.\n\tstbi__skip(s, 6);\n\n\t// Read the number of channels (R, G, B, A, etc).\n\tchannelCount = stbi__get16be(s);\n\tif (channelCount < 0 || channelCount > 16)\n\t\treturn stbi__errpuc(\"wrong channel count\", \"Unsupported number of channels in PSD image\");\n\n\t// Read the rows and columns of the image.\n\th = stbi__get32be(s);\n\tw = stbi__get32be(s);\n\n\t// Make sure the depth is 8 bits.\n\tbitdepth = stbi__get16be(s);\n\tif (bitdepth != 8 && bitdepth != 16)\n\t\treturn stbi__errpuc(\"unsupported bit depth\", \"PSD bit depth is not 8 or 16 bit\");\n\n\t// Make sure the color mode is RGB.\n\t// Valid options are:\n\t//   0: Bitmap\n\t//   1: Grayscale\n\t//   2: Indexed color\n\t//   3: RGB color\n\t//   4: CMYK color\n\t//   7: Multichannel\n\t//   8: Duotone\n\t//   9: Lab color\n\tif (stbi__get16be(s) != 3)\n\t\treturn stbi__errpuc(\"wrong color format\", \"PSD is not in RGB color format\");\n\n\t// Skip the Mode Data.  (It's the palette for indexed color; other info for other modes.)\n\tstbi__skip(s, stbi__get32be(s));\n\n\t// Skip the image resources.  (resolution, pen tool paths, etc)\n\tstbi__skip(s, stbi__get32be(s));\n\n\t// Skip the reserved data.\n\tstbi__skip(s, stbi__get32be(s));\n\n\t// Find out if the data is compressed.\n\t// Known values:\n\t//   0: no compression\n\t//   1: RLE compressed\n\tcompression = stbi__get16be(s);\n\tif (compression > 1)\n\t\treturn stbi__errpuc(\"bad compression\", \"PSD has an unknown compression format\");\n\n\t// Check size\n\tif (!stbi__mad3sizes_valid(4, w, h, 0))\n\t\treturn stbi__errpuc(\"too large\", \"Corrupt PSD\");\n\n\t// Create the destination image.\n\n\tif (!compression && bitdepth == 16 && bpc == 16) {\n\t\tout = (stbi_uc *)stbi__malloc_mad3(8, w, h, 0);\n\t\tri->bits_per_channel = 16;\n\t}\n\telse\n\t\tout = (stbi_uc *)stbi__malloc(4 * w*h);\n\n\tif (!out) return stbi__errpuc(\"outofmem\", \"Out of memory\");\n\tpixelCount = w * h;\n\n\t// Initialize the data to zero.\n\t//memset( out, 0, pixelCount * 4 );\n\n\t// Finally, the image data.\n\tif (compression) {\n\t\t// RLE as used by .PSD and .TIFF\n\t\t// Loop until you get the number of unpacked bytes you are expecting:\n\t\t//     Read the next source byte into n.\n\t\t//     If n is between 0 and 127 inclusive, copy the next n+1 bytes literally.\n\t\t//     Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times.\n\t\t//     Else if n is 128, noop.\n\t\t// Endloop\n\n\t\t// The RLE-compressed data is preceded by a 2-byte data count for each row in the data,\n\t\t// which we're going to just skip.\n\t\tstbi__skip(s, h * channelCount * 2);\n\n\t\t// Read the RLE data by channel.\n\t\tfor (channel = 0; channel < 4; channel++) {\n\t\t\tstbi_uc *p;\n\n\t\t\tp = out + channel;\n\t\t\tif (channel >= channelCount) {\n\t\t\t\t// Fill this channel with default data.\n\t\t\t\tfor (i = 0; i < pixelCount; i++, p += 4)\n\t\t\t\t\t*p = (channel == 3 ? 255 : 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Read the RLE data.\n\t\t\t\tif (!stbi__psd_decode_rle(s, p, pixelCount)) {\n\t\t\t\t\tSTBI_FREE(out);\n\t\t\t\t\treturn stbi__errpuc(\"corrupt\", \"bad RLE data\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\telse {\n\t\t// We're at the raw image data.  It's each channel in order (Red, Green, Blue, Alpha, ...)\n\t\t// where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image.\n\n\t\t// Read the data by channel.\n\t\tfor (channel = 0; channel < 4; channel++) {\n\t\t\tif (channel >= channelCount) {\n\t\t\t\t// Fill this channel with default data.\n\t\t\t\tif (bitdepth == 16 && bpc == 16) {\n\t\t\t\t\tstbi__uint16 *q = ((stbi__uint16 *)out) + channel;\n\t\t\t\t\tstbi__uint16 val = channel == 3 ? 65535 : 0;\n\t\t\t\t\tfor (i = 0; i < pixelCount; i++, q += 4)\n\t\t\t\t\t\t*q = val;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstbi_uc *p = out + channel;\n\t\t\t\t\tstbi_uc val = channel == 3 ? 255 : 0;\n\t\t\t\t\tfor (i = 0; i < pixelCount; i++, p += 4)\n\t\t\t\t\t\t*p = val;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (ri->bits_per_channel == 16) {    // output bpc\n\t\t\t\t\tstbi__uint16 *q = ((stbi__uint16 *)out) + channel;\n\t\t\t\t\tfor (i = 0; i < pixelCount; i++, q += 4)\n\t\t\t\t\t\t*q = (stbi__uint16)stbi__get16be(s);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstbi_uc *p = out + channel;\n\t\t\t\t\tif (bitdepth == 16) {  // input bpc\n\t\t\t\t\t\tfor (i = 0; i < pixelCount; i++, p += 4)\n\t\t\t\t\t\t\t*p = (stbi_uc)(stbi__get16be(s) >> 8);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (i = 0; i < pixelCount; i++, p += 4)\n\t\t\t\t\t\t\t*p = stbi__get8(s);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// remove weird white matte from PSD\n\tif (channelCount >= 4) {\n\t\tif (ri->bits_per_channel == 16) {\n\t\t\tfor (i = 0; i < w*h; ++i) {\n\t\t\t\tstbi__uint16 *pixel = (stbi__uint16 *)out + 4 * i;\n\t\t\t\tif (pixel[3] != 0 && pixel[3] != 65535) {\n\t\t\t\t\tfloat a = pixel[3] / 65535.0f;\n\t\t\t\t\tfloat ra = 1.0f / a;\n\t\t\t\t\tfloat inv_a = 65535.0f * (1 - ra);\n\t\t\t\t\tpixel[0] = (stbi__uint16)(pixel[0] * ra + inv_a);\n\t\t\t\t\tpixel[1] = (stbi__uint16)(pixel[1] * ra + inv_a);\n\t\t\t\t\tpixel[2] = (stbi__uint16)(pixel[2] * ra + inv_a);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (i = 0; i < w*h; ++i) {\n\t\t\t\tunsigned char *pixel = out + 4 * i;\n\t\t\t\tif (pixel[3] != 0 && pixel[3] != 255) {\n\t\t\t\t\tfloat a = pixel[3] / 255.0f;\n\t\t\t\t\tfloat ra = 1.0f / a;\n\t\t\t\t\tfloat inv_a = 255.0f * (1 - ra);\n\t\t\t\t\tpixel[0] = (unsigned char)(pixel[0] * ra + inv_a);\n\t\t\t\t\tpixel[1] = (unsigned char)(pixel[1] * ra + inv_a);\n\t\t\t\t\tpixel[2] = (unsigned char)(pixel[2] * ra + inv_a);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// convert to desired output format\n\tif (req_comp && req_comp != 4) {\n\t\tif (ri->bits_per_channel == 16)\n\t\t\tout = (stbi_uc *)stbi__convert_format16((stbi__uint16 *)out, 4, req_comp, w, h);\n\t\telse\n\t\t\tout = stbi__convert_format(out, 4, req_comp, w, h);\n\t\tif (out == NULL) return out; // stbi__convert_format frees input on failure\n\t}\n\n\tif (comp) *comp = 4;\n\t*y = h;\n\t*x = w;\n\n\treturn out;\n}\n#endif\n\n// *************************************************************************************************\n// Softimage PIC loader\n// by Tom Seddon\n//\n// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format\n// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/\n\n#ifndef STBI_NO_PIC\nstatic int stbi__pic_is4(stbi__context *s, const char *str)\n{\n\tint i;\n\tfor (i = 0; i < 4; ++i)\n\t\tif (stbi__get8(s) != (stbi_uc)str[i])\n\t\t\treturn 0;\n\n\treturn 1;\n}\n\nstatic int stbi__pic_test_core(stbi__context *s)\n{\n\tint i;\n\n\tif (!stbi__pic_is4(s, \"\\x53\\x80\\xF6\\x34\"))\n\t\treturn 0;\n\n\tfor (i = 0; i < 84; ++i)\n\t\tstbi__get8(s);\n\n\tif (!stbi__pic_is4(s, \"PICT\"))\n\t\treturn 0;\n\n\treturn 1;\n}\n\ntypedef struct\n{\n\tstbi_uc size, type, channel;\n} stbi__pic_packet;\n\nstatic stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)\n{\n\tint mask = 0x80, i;\n\n\tfor (i = 0; i < 4; ++i, mask >>= 1) {\n\t\tif (channel & mask) {\n\t\t\tif (stbi__at_eof(s)) return stbi__errpuc(\"bad file\", \"PIC file too short\");\n\t\t\tdest[i] = stbi__get8(s);\n\t\t}\n\t}\n\n\treturn dest;\n}\n\nstatic void stbi__copyval(int channel, stbi_uc *dest, const stbi_uc *src)\n{\n\tint mask = 0x80, i;\n\n\tfor (i = 0; i < 4; ++i, mask >>= 1)\n\t\tif (channel&mask)\n\t\t\tdest[i] = src[i];\n}\n\nstatic stbi_uc *stbi__pic_load_core(stbi__context *s, int width, int height, int *comp, stbi_uc *result)\n{\n\tint act_comp = 0, num_packets = 0, y, chained;\n\tstbi__pic_packet packets[10];\n\n\t// this will (should...) cater for even some bizarre stuff like having data\n\t // for the same channel in multiple packets.\n\tdo {\n\t\tstbi__pic_packet *packet;\n\n\t\tif (num_packets == sizeof(packets) / sizeof(packets[0]))\n\t\t\treturn stbi__errpuc(\"bad format\", \"too many packets\");\n\n\t\tpacket = &packets[num_packets++];\n\n\t\tchained = stbi__get8(s);\n\t\tpacket->size = stbi__get8(s);\n\t\tpacket->type = stbi__get8(s);\n\t\tpacket->channel = stbi__get8(s);\n\n\t\tact_comp |= packet->channel;\n\n\t\tif (stbi__at_eof(s))          return stbi__errpuc(\"bad file\", \"file too short (reading packets)\");\n\t\tif (packet->size != 8)  return stbi__errpuc(\"bad format\", \"packet isn't 8bpp\");\n\t} while (chained);\n\n\t*comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel?\n\n\tfor (y = 0; y < height; ++y) {\n\t\tint packet_idx;\n\n\t\tfor (packet_idx = 0; packet_idx < num_packets; ++packet_idx) {\n\t\t\tstbi__pic_packet *packet = &packets[packet_idx];\n\t\t\tstbi_uc *dest = result + y * width * 4;\n\n\t\t\tswitch (packet->type) {\n\t\t\tdefault:\n\t\t\t\treturn stbi__errpuc(\"bad format\", \"packet has bad compression type\");\n\n\t\t\tcase 0: {//uncompressed\n\t\t\t\tint x;\n\n\t\t\t\tfor (x = 0; x < width; ++x, dest += 4)\n\t\t\t\t\tif (!stbi__readval(s, packet->channel, dest))\n\t\t\t\t\t\treturn 0;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 1://Pure RLE\n\t\t\t{\n\t\t\t\tint left = width, i;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tstbi_uc count, value[4];\n\n\t\t\t\t\tcount = stbi__get8(s);\n\t\t\t\t\tif (stbi__at_eof(s))   return stbi__errpuc(\"bad file\", \"file too short (pure read count)\");\n\n\t\t\t\t\tif (count > left)\n\t\t\t\t\t\tcount = (stbi_uc)left;\n\n\t\t\t\t\tif (!stbi__readval(s, packet->channel, value))  return 0;\n\n\t\t\t\t\tfor (i = 0; i < count; ++i, dest += 4)\n\t\t\t\t\t\tstbi__copyval(packet->channel, dest, value);\n\t\t\t\t\tleft -= count;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\t\tcase 2: {//Mixed RLE\n\t\t\t\tint left = width;\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tint count = stbi__get8(s), i;\n\t\t\t\t\tif (stbi__at_eof(s))  return stbi__errpuc(\"bad file\", \"file too short (mixed read count)\");\n\n\t\t\t\t\tif (count >= 128) { // Repeated\n\t\t\t\t\t\tstbi_uc value[4];\n\n\t\t\t\t\t\tif (count == 128)\n\t\t\t\t\t\t\tcount = stbi__get16be(s);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcount -= 127;\n\t\t\t\t\t\tif (count > left)\n\t\t\t\t\t\t\treturn stbi__errpuc(\"bad file\", \"scanline overrun\");\n\n\t\t\t\t\t\tif (!stbi__readval(s, packet->channel, value))\n\t\t\t\t\t\t\treturn 0;\n\n\t\t\t\t\t\tfor (i = 0; i < count; ++i, dest += 4)\n\t\t\t\t\t\t\tstbi__copyval(packet->channel, dest, value);\n\t\t\t\t\t}\n\t\t\t\t\telse { // Raw\n\t\t\t\t\t\t++count;\n\t\t\t\t\t\tif (count > left) return stbi__errpuc(\"bad file\", \"scanline overrun\");\n\n\t\t\t\t\t\tfor (i = 0; i < count; ++i, dest += 4)\n\t\t\t\t\t\t\tif (!stbi__readval(s, packet->channel, dest))\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tleft -= count;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nstatic void *stbi__pic_load(stbi__context *s, int *px, int *py, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tstbi_uc *result;\n\tint i, x, y, internal_comp;\n\tSTBI_NOTUSED(ri);\n\n\tif (!comp) comp = &internal_comp;\n\n\tfor (i = 0; i < 92; ++i)\n\t\tstbi__get8(s);\n\n\tx = stbi__get16be(s);\n\ty = stbi__get16be(s);\n\tif (stbi__at_eof(s))  return stbi__errpuc(\"bad file\", \"file too short (pic header)\");\n\tif (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc(\"too large\", \"PIC image too large to decode\");\n\n\tstbi__get32be(s); //skip `ratio'\n\tstbi__get16be(s); //skip `fields'\n\tstbi__get16be(s); //skip `pad'\n\n\t// intermediate buffer is RGBA\n\tresult = (stbi_uc *)stbi__malloc_mad3(x, y, 4, 0);\n\tmemset(result, 0xff, x*y * 4);\n\n\tif (!stbi__pic_load_core(s, x, y, comp, result)) {\n\t\tSTBI_FREE(result);\n\t\tresult = 0;\n\t}\n\t*px = x;\n\t*py = y;\n\tif (req_comp == 0) req_comp = *comp;\n\tresult = stbi__convert_format(result, 4, req_comp, x, y);\n\n\treturn result;\n}\n\nstatic int stbi__pic_test(stbi__context *s)\n{\n\tint r = stbi__pic_test_core(s);\n\tstbi__rewind(s);\n\treturn r;\n}\n#endif\n\n// *************************************************************************************************\n// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb\n\n#ifndef STBI_NO_GIF\ntypedef struct\n{\n\tstbi__int16 prefix;\n\tstbi_uc first;\n\tstbi_uc suffix;\n} stbi__gif_lzw;\n\ntypedef struct\n{\n\tint w, h;\n\tstbi_uc *out;                 // output buffer (always 4 components)\n\tstbi_uc *background;          // The current \"background\" as far as a gif is concerned\n\tstbi_uc *history;\n\tint flags, bgindex, ratio, transparent, eflags;\n\tstbi_uc  pal[256][4];\n\tstbi_uc lpal[256][4];\n\tstbi__gif_lzw codes[8192];\n\tstbi_uc *color_table;\n\tint parse, step;\n\tint lflags;\n\tint start_x, start_y;\n\tint max_x, max_y;\n\tint cur_x, cur_y;\n\tint line_size;\n\tint delay;\n} stbi__gif;\n\nstatic int stbi__gif_test_raw(stbi__context *s)\n{\n\tint sz;\n\tif (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0;\n\tsz = stbi__get8(s);\n\tif (sz != '9' && sz != '7') return 0;\n\tif (stbi__get8(s) != 'a') return 0;\n\treturn 1;\n}\n\nstatic int stbi__gif_test(stbi__context *s)\n{\n\tint r = stbi__gif_test_raw(s);\n\tstbi__rewind(s);\n\treturn r;\n}\n\nstatic void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp)\n{\n\tint i;\n\tfor (i = 0; i < num_entries; ++i) {\n\t\tpal[i][2] = stbi__get8(s);\n\t\tpal[i][1] = stbi__get8(s);\n\t\tpal[i][0] = stbi__get8(s);\n\t\tpal[i][3] = transp == i ? 0 : 255;\n\t}\n}\n\nstatic int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info)\n{\n\tstbi_uc version;\n\tif (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8')\n\t\treturn stbi__err(\"not GIF\", \"Corrupt GIF\");\n\n\tversion = stbi__get8(s);\n\tif (version != '7' && version != '9')    return stbi__err(\"not GIF\", \"Corrupt GIF\");\n\tif (stbi__get8(s) != 'a')                return stbi__err(\"not GIF\", \"Corrupt GIF\");\n\n\tstbi__g_failure_reason = \"\";\n\tg->w = stbi__get16le(s);\n\tg->h = stbi__get16le(s);\n\tg->flags = stbi__get8(s);\n\tg->bgindex = stbi__get8(s);\n\tg->ratio = stbi__get8(s);\n\tg->transparent = -1;\n\n\tif (comp != 0) *comp = 4;  // can't actually tell whether it's 3 or 4 until we parse the comments\n\n\tif (is_info) return 1;\n\n\tif (g->flags & 0x80)\n\t\tstbi__gif_parse_colortable(s, g->pal, 2 << (g->flags & 7), -1);\n\n\treturn 1;\n}\n\nstatic int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)\n{\n\tstbi__gif* g = (stbi__gif*)stbi__malloc(sizeof(stbi__gif));\n\tif (!stbi__gif_header(s, g, comp, 1)) {\n\t\tSTBI_FREE(g);\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tif (x) *x = g->w;\n\tif (y) *y = g->h;\n\tSTBI_FREE(g);\n\treturn 1;\n}\n\nstatic void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)\n{\n\tstbi_uc *p, *c;\n\tint idx;\n\n\t// recurse to decode the prefixes, since the linked-list is backwards,\n\t// and working backwards through an interleaved image would be nasty\n\tif (g->codes[code].prefix >= 0)\n\t\tstbi__out_gif_code(g, g->codes[code].prefix);\n\n\tif (g->cur_y >= g->max_y) return;\n\n\tidx = g->cur_x + g->cur_y;\n\tp = &g->out[idx];\n\tg->history[idx / 4] = 1;\n\n\tc = &g->color_table[g->codes[code].suffix * 4];\n\tif (c[3] > 128) { // don't render transparent pixels; \n\t\tp[0] = c[2];\n\t\tp[1] = c[1];\n\t\tp[2] = c[0];\n\t\tp[3] = c[3];\n\t}\n\tg->cur_x += 4;\n\n\tif (g->cur_x >= g->max_x) {\n\t\tg->cur_x = g->start_x;\n\t\tg->cur_y += g->step;\n\n\t\twhile (g->cur_y >= g->max_y && g->parse > 0) {\n\t\t\tg->step = (1 << g->parse) * g->line_size;\n\t\t\tg->cur_y = g->start_y + (g->step >> 1);\n\t\t\t--g->parse;\n\t\t}\n\t}\n}\n\nstatic stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)\n{\n\tstbi_uc lzw_cs;\n\tstbi__int32 len, init_code;\n\tstbi__uint32 first;\n\tstbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear;\n\tstbi__gif_lzw *p;\n\n\tlzw_cs = stbi__get8(s);\n\tif (lzw_cs > 12) return NULL;\n\tclear = 1 << lzw_cs;\n\tfirst = 1;\n\tcodesize = lzw_cs + 1;\n\tcodemask = (1 << codesize) - 1;\n\tbits = 0;\n\tvalid_bits = 0;\n\tfor (init_code = 0; init_code < clear; init_code++) {\n\t\tg->codes[init_code].prefix = -1;\n\t\tg->codes[init_code].first = (stbi_uc)init_code;\n\t\tg->codes[init_code].suffix = (stbi_uc)init_code;\n\t}\n\n\t// support no starting clear code\n\tavail = clear + 2;\n\toldcode = -1;\n\n\tlen = 0;\n\tfor (;;) {\n\t\tif (valid_bits < codesize) {\n\t\t\tif (len == 0) {\n\t\t\t\tlen = stbi__get8(s); // start new block\n\t\t\t\tif (len == 0)\n\t\t\t\t\treturn g->out;\n\t\t\t}\n\t\t\t--len;\n\t\t\tbits |= (stbi__int32)stbi__get8(s) << valid_bits;\n\t\t\tvalid_bits += 8;\n\t\t}\n\t\telse {\n\t\t\tstbi__int32 code = bits & codemask;\n\t\t\tbits >>= codesize;\n\t\t\tvalid_bits -= codesize;\n\t\t\t// @OPTIMIZE: is there some way we can accelerate the non-clear path?\n\t\t\tif (code == clear) {  // clear code\n\t\t\t\tcodesize = lzw_cs + 1;\n\t\t\t\tcodemask = (1 << codesize) - 1;\n\t\t\t\tavail = clear + 2;\n\t\t\t\toldcode = -1;\n\t\t\t\tfirst = 0;\n\t\t\t}\n\t\t\telse if (code == clear + 1) { // end of stream code\n\t\t\t\tstbi__skip(s, len);\n\t\t\t\twhile ((len = stbi__get8(s)) > 0)\n\t\t\t\t\tstbi__skip(s, len);\n\t\t\t\treturn g->out;\n\t\t\t}\n\t\t\telse if (code <= avail) {\n\t\t\t\tif (first) {\n\t\t\t\t\treturn stbi__errpuc(\"no clear code\", \"Corrupt GIF\");\n\t\t\t\t}\n\n\t\t\t\tif (oldcode >= 0) {\n\t\t\t\t\tp = &g->codes[avail++];\n\t\t\t\t\tif (avail > 8192) {\n\t\t\t\t\t\treturn stbi__errpuc(\"too many codes\", \"Corrupt GIF\");\n\t\t\t\t\t}\n\n\t\t\t\t\tp->prefix = (stbi__int16)oldcode;\n\t\t\t\t\tp->first = g->codes[oldcode].first;\n\t\t\t\t\tp->suffix = (code == avail) ? p->first : g->codes[code].first;\n\t\t\t\t}\n\t\t\t\telse if (code == avail)\n\t\t\t\t\treturn stbi__errpuc(\"illegal code in raster\", \"Corrupt GIF\");\n\n\t\t\t\tstbi__out_gif_code(g, (stbi__uint16)code);\n\n\t\t\t\tif ((avail & codemask) == 0 && avail <= 0x0FFF) {\n\t\t\t\t\tcodesize++;\n\t\t\t\t\tcodemask = (1 << codesize) - 1;\n\t\t\t\t}\n\n\t\t\t\toldcode = code;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn stbi__errpuc(\"illegal code in raster\", \"Corrupt GIF\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n// this function is designed to support animated gifs, although stb_image doesn't support it\n// two back is the image from two frames ago, used for a very specific disposal format\nstatic stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back)\n{\n\tint dispose;\n\tint first_frame;\n\tint pi;\n\tint pcount;\n\tSTBI_NOTUSED(req_comp);\n\n\t// on first frame, any non-written pixels get the background colour (non-transparent)\n\tfirst_frame = 0;\n\tif (g->out == 0) {\n\t\tif (!stbi__gif_header(s, g, comp, 0)) return 0; // stbi__g_failure_reason set by stbi__gif_header\n\t\tif (!stbi__mad3sizes_valid(4, g->w, g->h, 0))\n\t\t\treturn stbi__errpuc(\"too large\", \"GIF image is too large\");\n\t\tpcount = g->w * g->h;\n\t\tg->out = (stbi_uc *)stbi__malloc(4 * pcount);\n\t\tg->background = (stbi_uc *)stbi__malloc(4 * pcount);\n\t\tg->history = (stbi_uc *)stbi__malloc(pcount);\n\t\tif (!g->out || !g->background || !g->history)\n\t\t\treturn stbi__errpuc(\"outofmem\", \"Out of memory\");\n\n\t\t// image is treated as \"transparent\" at the start - ie, nothing overwrites the current background; \n\t\t// background colour is only used for pixels that are not rendered first frame, after that \"background\"\n\t\t// color refers to the color that was there the previous frame. \n\t\tmemset(g->out, 0x00, 4 * pcount);\n\t\tmemset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent)\n\t\tmemset(g->history, 0x00, pcount);        // pixels that were affected previous frame\n\t\tfirst_frame = 1;\n\t}\n\telse {\n\t\t// second frame - how do we dispoase of the previous one?\n\t\tdispose = (g->eflags & 0x1C) >> 2;\n\t\tpcount = g->w * g->h;\n\n\t\tif ((dispose == 3) && (two_back == 0)) {\n\t\t\tdispose = 2; // if I don't have an image to revert back to, default to the old background\n\t\t}\n\n\t\tif (dispose == 3) { // use previous graphic\n\t\t\tfor (pi = 0; pi < pcount; ++pi) {\n\t\t\t\tif (g->history[pi]) {\n\t\t\t\t\tmemcpy(&g->out[pi * 4], &two_back[pi * 4], 4);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (dispose == 2) {\n\t\t\t// restore what was changed last frame to background before that frame; \n\t\t\tfor (pi = 0; pi < pcount; ++pi) {\n\t\t\t\tif (g->history[pi]) {\n\t\t\t\t\tmemcpy(&g->out[pi * 4], &g->background[pi * 4], 4);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// This is a non-disposal case eithe way, so just \n\t\t\t// leave the pixels as is, and they will become the new background\n\t\t\t// 1: do not dispose\n\t\t\t// 0:  not specified.\n\t\t}\n\n\t\t// background is what out is after the undoing of the previou frame; \n\t\tmemcpy(g->background, g->out, 4 * g->w * g->h);\n\t}\n\n\t// clear my history; \n\tmemset(g->history, 0x00, g->w * g->h);        // pixels that were affected previous frame\n\n\tfor (;;) {\n\t\tint tag = stbi__get8(s);\n\t\tswitch (tag) {\n\t\tcase 0x2C: /* Image Descriptor */\n\t\t{\n\t\t\tstbi__int32 x, y, w, h;\n\t\t\tstbi_uc *o;\n\n\t\t\tx = stbi__get16le(s);\n\t\t\ty = stbi__get16le(s);\n\t\t\tw = stbi__get16le(s);\n\t\t\th = stbi__get16le(s);\n\t\t\tif (((x + w) > (g->w)) || ((y + h) > (g->h)))\n\t\t\t\treturn stbi__errpuc(\"bad Image Descriptor\", \"Corrupt GIF\");\n\n\t\t\tg->line_size = g->w * 4;\n\t\t\tg->start_x = x * 4;\n\t\t\tg->start_y = y * g->line_size;\n\t\t\tg->max_x = g->start_x + w * 4;\n\t\t\tg->max_y = g->start_y + h * g->line_size;\n\t\t\tg->cur_x = g->start_x;\n\t\t\tg->cur_y = g->start_y;\n\n\t\t\t// if the width of the specified rectangle is 0, that means\n\t\t\t// we may not see *any* pixels or the image is malformed;\n\t\t\t// to make sure this is caught, move the current y down to\n\t\t\t// max_y (which is what out_gif_code checks).\n\t\t\tif (w == 0)\n\t\t\t\tg->cur_y = g->max_y;\n\n\t\t\tg->lflags = stbi__get8(s);\n\n\t\t\tif (g->lflags & 0x40) {\n\t\t\t\tg->step = 8 * g->line_size; // first interlaced spacing\n\t\t\t\tg->parse = 3;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tg->step = g->line_size;\n\t\t\t\tg->parse = 0;\n\t\t\t}\n\n\t\t\tif (g->lflags & 0x80) {\n\t\t\t\tstbi__gif_parse_colortable(s, g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1);\n\t\t\t\tg->color_table = (stbi_uc *)g->lpal;\n\t\t\t}\n\t\t\telse if (g->flags & 0x80) {\n\t\t\t\tg->color_table = (stbi_uc *)g->pal;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn stbi__errpuc(\"missing color table\", \"Corrupt GIF\");\n\n\t\t\to = stbi__process_gif_raster(s, g);\n\t\t\tif (!o) return NULL;\n\n\t\t\t// if this was the first frame, \n\t\t\tpcount = g->w * g->h;\n\t\t\tif (first_frame && (g->bgindex > 0)) {\n\t\t\t\t// if first frame, any pixel not drawn to gets the background color\n\t\t\t\tfor (pi = 0; pi < pcount; ++pi) {\n\t\t\t\t\tif (g->history[pi] == 0) {\n\t\t\t\t\t\tg->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; \n\t\t\t\t\t\tmemcpy(&g->out[pi * 4], &g->pal[g->bgindex], 4);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn o;\n\t\t}\n\n\t\tcase 0x21: // Comment Extension.\n\t\t{\n\t\t\tint len;\n\t\t\tint ext = stbi__get8(s);\n\t\t\tif (ext == 0xF9) { // Graphic Control Extension.\n\t\t\t\tlen = stbi__get8(s);\n\t\t\t\tif (len == 4) {\n\t\t\t\t\tg->eflags = stbi__get8(s);\n\t\t\t\t\tg->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths.\n\n\t\t\t\t\t// unset old transparent\n\t\t\t\t\tif (g->transparent >= 0) {\n\t\t\t\t\t\tg->pal[g->transparent][3] = 255;\n\t\t\t\t\t}\n\t\t\t\t\tif (g->eflags & 0x01) {\n\t\t\t\t\t\tg->transparent = stbi__get8(s);\n\t\t\t\t\t\tif (g->transparent >= 0) {\n\t\t\t\t\t\t\tg->pal[g->transparent][3] = 0;\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\t// don't need transparent\n\t\t\t\t\t\tstbi__skip(s, 1);\n\t\t\t\t\t\tg->transparent = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstbi__skip(s, len);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ((len = stbi__get8(s)) != 0) {\n\t\t\t\tstbi__skip(s, len);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 0x3B: // gif stream termination code\n\t\t\treturn (stbi_uc *)s; // using '1' causes warning on some compilers\n\n\t\tdefault:\n\t\t\treturn stbi__errpuc(\"unknown code\", \"Corrupt GIF\");\n\t\t}\n\t}\n}\n\nstatic void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp)\n{\n\tif (stbi__gif_test(s)) {\n\t\tint layers = 0;\n\t\tstbi_uc *u = 0;\n\t\tstbi_uc *out = 0;\n\t\tstbi_uc *two_back = 0;\n\t\tstbi__gif g;\n\t\tint stride;\n\t\tmemset(&g, 0, sizeof(g));\n\t\tif (delays) {\n\t\t\t*delays = 0;\n\t\t}\n\n\t\tdo {\n\t\t\tu = stbi__gif_load_next(s, &g, comp, req_comp, two_back);\n\t\t\tif (u == (stbi_uc *)s) u = 0;  // end of animated gif marker\n\n\t\t\tif (u) {\n\t\t\t\t*x = g.w;\n\t\t\t\t*y = g.h;\n\t\t\t\t++layers;\n\t\t\t\tstride = g.w * g.h * 4;\n\n\t\t\t\tif (out) {\n\t\t\t\t\tout = (stbi_uc*)STBI_REALLOC(out, layers * stride);\n\t\t\t\t\tif (delays) {\n\t\t\t\t\t\t*delays = (int*)STBI_REALLOC(*delays, sizeof(int) * layers);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout = (stbi_uc*)stbi__malloc(layers * stride);\n\t\t\t\t\tif (delays) {\n\t\t\t\t\t\t*delays = (int*)stbi__malloc(layers * sizeof(int));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmemcpy(out + ((layers - 1) * stride), u, stride);\n\t\t\t\tif (layers >= 2) {\n\t\t\t\t\ttwo_back = out - 2 * stride;\n\t\t\t\t}\n\n\t\t\t\tif (delays) {\n\t\t\t\t\t(*delays)[layers - 1U] = g.delay;\n\t\t\t\t}\n\t\t\t}\n\t\t} while (u != 0);\n\n\t\t// free temp buffer; \n\t\tSTBI_FREE(g.out);\n\t\tSTBI_FREE(g.history);\n\t\tSTBI_FREE(g.background);\n\n\t\t// do the final conversion after loading everything; \n\t\tif (req_comp && req_comp != 4)\n\t\t\tout = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h);\n\n\t\t*z = layers;\n\t\treturn out;\n\t}\n\telse {\n\t\treturn stbi__errpuc(\"not GIF\", \"Image was not as a gif type.\");\n\t}\n}\n\nstatic void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tstbi_uc *u = 0;\n\tstbi__gif g;\n\tmemset(&g, 0, sizeof(g));\n\tSTBI_NOTUSED(ri);\n\n\tu = stbi__gif_load_next(s, &g, comp, req_comp, 0);\n\tif (u == (stbi_uc *)s) u = 0;  // end of animated gif marker\n\tif (u) {\n\t\t*x = g.w;\n\t\t*y = g.h;\n\n\t\t// moved conversion to after successful load so that the same\n\t\t// can be done for multiple frames. \n\t\tif (req_comp && req_comp != 4)\n\t\t\tu = stbi__convert_format(u, 4, req_comp, g.w, g.h);\n\t}\n\telse if (g.out) {\n\t\t// if there was an error and we allocated an image buffer, free it!\n\t\tSTBI_FREE(g.out);\n\t}\n\n\t// free buffers needed for multiple frame loading; \n\tSTBI_FREE(g.history);\n\tSTBI_FREE(g.background);\n\n\treturn u;\n}\n\nstatic int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\treturn stbi__gif_info_raw(s, x, y, comp);\n}\n#endif\n\n// *************************************************************************************************\n// Radiance RGBE HDR loader\n// originally by Nicolas Schulz\n#ifndef STBI_NO_HDR\nstatic int stbi__hdr_test_core(stbi__context *s, const char *signature)\n{\n\tint i;\n\tfor (i = 0; signature[i]; ++i)\n\t\tif (stbi__get8(s) != signature[i])\n\t\t\treturn 0;\n\tstbi__rewind(s);\n\treturn 1;\n}\n\nstatic int stbi__hdr_test(stbi__context* s)\n{\n\tint r = stbi__hdr_test_core(s, \"#?RADIANCE\\n\");\n\tstbi__rewind(s);\n\tif (!r) {\n\t\tr = stbi__hdr_test_core(s, \"#?RGBE\\n\");\n\t\tstbi__rewind(s);\n\t}\n\treturn r;\n}\n\n#define STBI__HDR_BUFLEN  1024\nstatic char *stbi__hdr_gettoken(stbi__context *z, char *buffer)\n{\n\tint len = 0;\n\tchar c = '\\0';\n\n\tc = (char)stbi__get8(z);\n\n\twhile (!stbi__at_eof(z) && c != '\\n') {\n\t\tbuffer[len++] = c;\n\t\tif (len == STBI__HDR_BUFLEN - 1) {\n\t\t\t// flush to end of line\n\t\t\twhile (!stbi__at_eof(z) && stbi__get8(z) != '\\n')\n\t\t\t\t;\n\t\t\tbreak;\n\t\t}\n\t\tc = (char)stbi__get8(z);\n\t}\n\n\tbuffer[len] = 0;\n\treturn buffer;\n}\n\nstatic void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)\n{\n\tif (input[3] != 0) {\n\t\tfloat f1;\n\t\t// Exponent\n\t\tf1 = (float)ldexp(1.0f, input[3] - (int)(128 + 8));\n\t\tif (req_comp <= 2)\n\t\t\toutput[0] = (input[0] + input[1] + input[2]) * f1 / 3;\n\t\telse {\n\t\t\toutput[0] = input[0] * f1;\n\t\t\toutput[1] = input[1] * f1;\n\t\t\toutput[2] = input[2] * f1;\n\t\t}\n\t\tif (req_comp == 2) output[1] = 1;\n\t\tif (req_comp == 4) output[3] = 1;\n\t}\n\telse {\n\t\tswitch (req_comp) {\n\t\tcase 4: output[3] = 1; /* fallthrough */\n\t\tcase 3: output[0] = output[1] = output[2] = 0;\n\t\t\tbreak;\n\t\tcase 2: output[1] = 1; /* fallthrough */\n\t\tcase 1: output[0] = 0;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nstatic float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tchar buffer[STBI__HDR_BUFLEN];\n\tchar *token;\n\tint valid = 0;\n\tint width, height;\n\tstbi_uc *scanline;\n\tfloat *hdr_data;\n\tint len;\n\tunsigned char count, value;\n\tint i, j, k, c1, c2, z;\n\tconst char *headerToken;\n\tSTBI_NOTUSED(ri);\n\n\t// Check identifier\n\theaderToken = stbi__hdr_gettoken(s, buffer);\n\tif (strcmp(headerToken, \"#?RADIANCE\") != 0 && strcmp(headerToken, \"#?RGBE\") != 0)\n\t\treturn stbi__errpf(\"not HDR\", \"Corrupt HDR image\");\n\n\t// Parse header\n\tfor (;;) {\n\t\ttoken = stbi__hdr_gettoken(s, buffer);\n\t\tif (token[0] == 0) break;\n\t\tif (strcmp(token, \"FORMAT=32-bit_rle_rgbe\") == 0) valid = 1;\n\t}\n\n\tif (!valid)    return stbi__errpf(\"unsupported format\", \"Unsupported HDR format\");\n\n\t// Parse width and height\n\t// can't use sscanf() if we're not using stdio!\n\ttoken = stbi__hdr_gettoken(s, buffer);\n\tif (strncmp(token, \"-Y \", 3))  return stbi__errpf(\"unsupported data layout\", \"Unsupported HDR format\");\n\ttoken += 3;\n\theight = (int)strtol(token, &token, 10);\n\twhile (*token == ' ') ++token;\n\tif (strncmp(token, \"+X \", 3))  return stbi__errpf(\"unsupported data layout\", \"Unsupported HDR format\");\n\ttoken += 3;\n\twidth = (int)strtol(token, NULL, 10);\n\n\t*x = width;\n\t*y = height;\n\n\tif (comp) *comp = 3;\n\tif (req_comp == 0) req_comp = 3;\n\n\tif (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0))\n\t\treturn stbi__errpf(\"too large\", \"HDR image is too large\");\n\n\t// Read data\n\thdr_data = (float *)stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0);\n\tif (!hdr_data)\n\t\treturn stbi__errpf(\"outofmem\", \"Out of memory\");\n\n\t// Load image data\n\t// image data is stored as some number of sca\n\tif (width < 8 || width >= 32768) {\n\t\t// Read flat data\n\t\tfor (j = 0; j < height; ++j) {\n\t\t\tfor (i = 0; i < width; ++i) {\n\t\t\t\tstbi_uc rgbe[4];\n\t\t\tmain_decode_loop:\n\t\t\t\tstbi__getn(s, rgbe, 4);\n\t\t\t\tstbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp);\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Read RLE-encoded data\n\t\tscanline = NULL;\n\n\t\tfor (j = 0; j < height; ++j) {\n\t\t\tc1 = stbi__get8(s);\n\t\t\tc2 = stbi__get8(s);\n\t\t\tlen = stbi__get8(s);\n\t\t\tif (c1 != 2 || c2 != 2 || (len & 0x80)) {\n\t\t\t\t// not run-length encoded, so we have to actually use THIS data as a decoded\n\t\t\t\t// pixel (note this can't be a valid pixel--one of RGB must be >= 128)\n\t\t\t\tstbi_uc rgbe[4];\n\t\t\t\trgbe[0] = (stbi_uc)c1;\n\t\t\t\trgbe[1] = (stbi_uc)c2;\n\t\t\t\trgbe[2] = (stbi_uc)len;\n\t\t\t\trgbe[3] = (stbi_uc)stbi__get8(s);\n\t\t\t\tstbi__hdr_convert(hdr_data, rgbe, req_comp);\n\t\t\t\ti = 1;\n\t\t\t\tj = 0;\n\t\t\t\tSTBI_FREE(scanline);\n\t\t\t\tgoto main_decode_loop; // yes, this makes no sense\n\t\t\t}\n\t\t\tlen <<= 8;\n\t\t\tlen |= stbi__get8(s);\n\t\t\tif (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf(\"invalid decoded scanline length\", \"corrupt HDR\"); }\n\t\t\tif (scanline == NULL) {\n\t\t\t\tscanline = (stbi_uc *)stbi__malloc_mad2(width, 4, 0);\n\t\t\t\tif (!scanline) {\n\t\t\t\t\tSTBI_FREE(hdr_data);\n\t\t\t\t\treturn stbi__errpf(\"outofmem\", \"Out of memory\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (k = 0; k < 4; ++k) {\n\t\t\t\tint nleft;\n\t\t\t\ti = 0;\n\t\t\t\twhile ((nleft = width - i) > 0) {\n\t\t\t\t\tcount = stbi__get8(s);\n\t\t\t\t\tif (count > 128) {\n\t\t\t\t\t\t// Run\n\t\t\t\t\t\tvalue = stbi__get8(s);\n\t\t\t\t\t\tcount -= 128;\n\t\t\t\t\t\tif (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf(\"corrupt\", \"bad RLE data in HDR\"); }\n\t\t\t\t\t\tfor (z = 0; z < count; ++z)\n\t\t\t\t\t\t\tscanline[i++ * 4 + k] = value;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Dump\n\t\t\t\t\t\tif (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf(\"corrupt\", \"bad RLE data in HDR\"); }\n\t\t\t\t\t\tfor (z = 0; z < count; ++z)\n\t\t\t\t\t\t\tscanline[i++ * 4 + k] = stbi__get8(s);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = 0; i < width; ++i)\n\t\t\t\tstbi__hdr_convert(hdr_data + (j*width + i)*req_comp, scanline + i * 4, req_comp);\n\t\t}\n\t\tif (scanline)\n\t\t\tSTBI_FREE(scanline);\n\t}\n\n\treturn hdr_data;\n}\n\nstatic int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tchar buffer[STBI__HDR_BUFLEN];\n\tchar *token;\n\tint valid = 0;\n\tint dummy;\n\n\tif (!x) x = &dummy;\n\tif (!y) y = &dummy;\n\tif (!comp) comp = &dummy;\n\n\tif (stbi__hdr_test(s) == 0) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\n\tfor (;;) {\n\t\ttoken = stbi__hdr_gettoken(s, buffer);\n\t\tif (token[0] == 0) break;\n\t\tif (strcmp(token, \"FORMAT=32-bit_rle_rgbe\") == 0) valid = 1;\n\t}\n\n\tif (!valid) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\ttoken = stbi__hdr_gettoken(s, buffer);\n\tif (strncmp(token, \"-Y \", 3)) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\ttoken += 3;\n\t*y = (int)strtol(token, &token, 10);\n\twhile (*token == ' ') ++token;\n\tif (strncmp(token, \"+X \", 3)) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\ttoken += 3;\n\t*x = (int)strtol(token, NULL, 10);\n\t*comp = 3;\n\treturn 1;\n}\n#endif // STBI_NO_HDR\n\n#ifndef STBI_NO_BMP\nstatic int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tvoid *p;\n\tstbi__bmp_data info;\n\n\tinfo.all_a = 255;\n\tp = stbi__bmp_parse_header(s, &info);\n\tstbi__rewind(s);\n\tif (p == NULL)\n\t\treturn 0;\n\tif (x) *x = s->img_x;\n\tif (y) *y = s->img_y;\n\tif (comp) {\n\t\tif (info.bpp == 24 && info.ma == 0xff000000)\n\t\t\t*comp = 3;\n\t\telse\n\t\t\t*comp = info.ma ? 4 : 3;\n\t}\n\treturn 1;\n}\n#endif\n\n#ifndef STBI_NO_PSD\nstatic int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tint channelCount, dummy, depth;\n\tif (!x) x = &dummy;\n\tif (!y) y = &dummy;\n\tif (!comp) comp = &dummy;\n\tif (stbi__get32be(s) != 0x38425053) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tif (stbi__get16be(s) != 1) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tstbi__skip(s, 6);\n\tchannelCount = stbi__get16be(s);\n\tif (channelCount < 0 || channelCount > 16) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\t*y = stbi__get32be(s);\n\t*x = stbi__get32be(s);\n\tdepth = stbi__get16be(s);\n\tif (depth != 8 && depth != 16) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tif (stbi__get16be(s) != 3) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\t*comp = 4;\n\treturn 1;\n}\n\nstatic int stbi__psd_is16(stbi__context *s)\n{\n\tint channelCount, depth;\n\tif (stbi__get32be(s) != 0x38425053) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tif (stbi__get16be(s) != 1) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tstbi__skip(s, 6);\n\tchannelCount = stbi__get16be(s);\n\tif (channelCount < 0 || channelCount > 16) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\t(void)stbi__get32be(s);\n\t(void)stbi__get32be(s);\n\tdepth = stbi__get16be(s);\n\tif (depth != 16) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n#endif\n\n#ifndef STBI_NO_PIC\nstatic int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tint act_comp = 0, num_packets = 0, chained, dummy;\n\tstbi__pic_packet packets[10];\n\n\tif (!x) x = &dummy;\n\tif (!y) y = &dummy;\n\tif (!comp) comp = &dummy;\n\n\tif (!stbi__pic_is4(s, \"\\x53\\x80\\xF6\\x34\")) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\n\tstbi__skip(s, 88);\n\n\t*x = stbi__get16be(s);\n\t*y = stbi__get16be(s);\n\tif (stbi__at_eof(s)) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\tif ((*x) != 0 && (1 << 28) / (*x) < (*y)) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\n\tstbi__skip(s, 8);\n\n\tdo {\n\t\tstbi__pic_packet *packet;\n\n\t\tif (num_packets == sizeof(packets) / sizeof(packets[0]))\n\t\t\treturn 0;\n\n\t\tpacket = &packets[num_packets++];\n\t\tchained = stbi__get8(s);\n\t\tpacket->size = stbi__get8(s);\n\t\tpacket->type = stbi__get8(s);\n\t\tpacket->channel = stbi__get8(s);\n\t\tact_comp |= packet->channel;\n\n\t\tif (stbi__at_eof(s)) {\n\t\t\tstbi__rewind(s);\n\t\t\treturn 0;\n\t\t}\n\t\tif (packet->size != 8) {\n\t\t\tstbi__rewind(s);\n\t\t\treturn 0;\n\t\t}\n\t} while (chained);\n\n\t*comp = (act_comp & 0x10 ? 4 : 3);\n\n\treturn 1;\n}\n#endif\n\n// *************************************************************************************************\n// Portable Gray Map and Portable Pixel Map loader\n// by Ken Miller\n//\n// PGM: http://netpbm.sourceforge.net/doc/pgm.html\n// PPM: http://netpbm.sourceforge.net/doc/ppm.html\n//\n// Known limitations:\n//    Does not support comments in the header section\n//    Does not support ASCII image data (formats P2 and P3)\n//    Does not support 16-bit-per-channel\n\n#ifndef STBI_NO_PNM\n\nstatic int      stbi__pnm_test(stbi__context *s)\n{\n\tchar p, t;\n\tp = (char)stbi__get8(s);\n\tt = (char)stbi__get8(s);\n\tif (p != 'P' || (t != '5' && t != '6')) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n\nstatic void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)\n{\n\tstbi_uc *out;\n\tSTBI_NOTUSED(ri);\n\n\tif (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n))\n\t\treturn 0;\n\n\t*x = s->img_x;\n\t*y = s->img_y;\n\tif (comp) *comp = s->img_n;\n\n\tif (!stbi__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0))\n\t\treturn stbi__errpuc(\"too large\", \"PNM too large\");\n\n\tout = (stbi_uc *)stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0);\n\tif (!out) return stbi__errpuc(\"outofmem\", \"Out of memory\");\n\tstbi__getn(s, out, s->img_n * s->img_x * s->img_y);\n\n\tif (req_comp && req_comp != s->img_n) {\n\t\tout = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y);\n\t\tif (out == NULL) return out; // stbi__convert_format frees input on failure\n\t}\n\treturn out;\n}\n\nstatic int      stbi__pnm_isspace(char c)\n{\n\treturn c == ' ' || c == '\\t' || c == '\\n' || c == '\\v' || c == '\\f' || c == '\\r';\n}\n\nstatic void     stbi__pnm_skip_whitespace(stbi__context *s, char *c)\n{\n\tfor (;;) {\n\t\twhile (!stbi__at_eof(s) && stbi__pnm_isspace(*c))\n\t\t\t*c = (char)stbi__get8(s);\n\n\t\tif (stbi__at_eof(s) || *c != '#')\n\t\t\tbreak;\n\n\t\twhile (!stbi__at_eof(s) && *c != '\\n' && *c != '\\r')\n\t\t\t*c = (char)stbi__get8(s);\n\t}\n}\n\nstatic int      stbi__pnm_isdigit(char c)\n{\n\treturn c >= '0' && c <= '9';\n}\n\nstatic int      stbi__pnm_getinteger(stbi__context *s, char *c)\n{\n\tint value = 0;\n\n\twhile (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) {\n\t\tvalue = value * 10 + (*c - '0');\n\t\t*c = (char)stbi__get8(s);\n\t}\n\n\treturn value;\n}\n\nstatic int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)\n{\n\tint maxv, dummy;\n\tchar c, p, t;\n\n\tif (!x) x = &dummy;\n\tif (!y) y = &dummy;\n\tif (!comp) comp = &dummy;\n\n\tstbi__rewind(s);\n\n\t// Get identifier\n\tp = (char)stbi__get8(s);\n\tt = (char)stbi__get8(s);\n\tif (p != 'P' || (t != '5' && t != '6')) {\n\t\tstbi__rewind(s);\n\t\treturn 0;\n\t}\n\n\t*comp = (t == '6') ? 3 : 1;  // '5' is 1-component .pgm; '6' is 3-component .ppm\n\n\tc = (char)stbi__get8(s);\n\tstbi__pnm_skip_whitespace(s, &c);\n\n\t*x = stbi__pnm_getinteger(s, &c); // read width\n\tstbi__pnm_skip_whitespace(s, &c);\n\n\t*y = stbi__pnm_getinteger(s, &c); // read height\n\tstbi__pnm_skip_whitespace(s, &c);\n\n\tmaxv = stbi__pnm_getinteger(s, &c);  // read max value\n\n\tif (maxv > 255)\n\t\treturn stbi__err(\"max value > 255\", \"PPM image not 8-bit\");\n\telse\n\t\treturn 1;\n}\n#endif\n\nstatic int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)\n{\n#ifndef STBI_NO_JPEG\n\tif (stbi__jpeg_info(s, x, y, comp)) return 1;\n#endif\n\n#ifndef STBI_NO_PNG\n\tif (stbi__png_info(s, x, y, comp))  return 1;\n#endif\n\n#ifndef STBI_NO_GIF\n\tif (stbi__gif_info(s, x, y, comp))  return 1;\n#endif\n\n#ifndef STBI_NO_BMP\n\tif (stbi__bmp_info(s, x, y, comp))  return 1;\n#endif\n\n#ifndef STBI_NO_PSD\n\tif (stbi__psd_info(s, x, y, comp))  return 1;\n#endif\n\n#ifndef STBI_NO_PIC\n\tif (stbi__pic_info(s, x, y, comp))  return 1;\n#endif\n\n#ifndef STBI_NO_PNM\n\tif (stbi__pnm_info(s, x, y, comp))  return 1;\n#endif\n\n#ifndef STBI_NO_HDR\n\tif (stbi__hdr_info(s, x, y, comp))  return 1;\n#endif\n\n\t// test tga last because it's a crappy test!\n#ifndef STBI_NO_TGA\n\tif (stbi__tga_info(s, x, y, comp))\n\t\treturn 1;\n#endif\n\treturn stbi__err(\"unknown image type\", \"Image not of any known type, or corrupt\");\n}\n\nstatic int stbi__is_16_main(stbi__context *s)\n{\n#ifndef STBI_NO_PNG\n\tif (stbi__png_is16(s))  return 1;\n#endif\n\n#ifndef STBI_NO_PSD\n\tif (stbi__psd_is16(s))  return 1;\n#endif\n\n\treturn 0;\n}\n\n#ifndef STBI_NO_STDIO\nSTBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)\n{\n\tFILE *f = stbi__fopen(filename, \"rb\");\n\tint result;\n\tif (!f) return stbi__err(\"can't fopen\", \"Unable to open file\");\n\tresult = stbi_info_from_file(f, x, y, comp);\n\tfclose(f);\n\treturn result;\n}\n\nSTBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)\n{\n\tint r;\n\tstbi__context s;\n\tlong pos = ftell(f);\n\tstbi__start_file(&s, f);\n\tr = stbi__info_main(&s, x, y, comp);\n\tfseek(f, pos, SEEK_SET);\n\treturn r;\n}\n\nSTBIDEF int stbi_is_16_bit(char const *filename)\n{\n\tFILE *f = stbi__fopen(filename, \"rb\");\n\tint result;\n\tif (!f) return stbi__err(\"can't fopen\", \"Unable to open file\");\n\tresult = stbi_is_16_bit_from_file(f);\n\tfclose(f);\n\treturn result;\n}\n\nSTBIDEF int stbi_is_16_bit_from_file(FILE *f)\n{\n\tint r;\n\tstbi__context s;\n\tlong pos = ftell(f);\n\tstbi__start_file(&s, f);\n\tr = stbi__is_16_main(&s);\n\tfseek(f, pos, SEEK_SET);\n\treturn r;\n}\n#endif // !STBI_NO_STDIO\n\nSTBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp)\n{\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\treturn stbi__info_main(&s, x, y, comp);\n}\n\nSTBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp)\n{\n\tstbi__context s;\n\tstbi__start_callbacks(&s, (stbi_io_callbacks *)c, user);\n\treturn stbi__info_main(&s, x, y, comp);\n}\n\nSTBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len)\n{\n\tstbi__context s;\n\tstbi__start_mem(&s, buffer, len);\n\treturn stbi__is_16_main(&s);\n}\n\nSTBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user)\n{\n\tstbi__context s;\n\tstbi__start_callbacks(&s, (stbi_io_callbacks *)c, user);\n\treturn stbi__is_16_main(&s);\n}\n\n#endif // STB_IMAGE_IMPLEMENTATION\n\n/*\n   revision history:\n\t  2.20  (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs\n\t  2.19  (2018-02-11) fix warning\n\t  2.18  (2018-01-30) fix warnings\n\t  2.17  (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug\n\t\t\t\t\t\t 1-bit BMP\n\t\t\t\t\t\t *_is_16_bit api\n\t\t\t\t\t\t avoid warnings\n\t  2.16  (2017-07-23) all functions have 16-bit variants;\n\t\t\t\t\t\t STBI_NO_STDIO works again;\n\t\t\t\t\t\t compilation fixes;\n\t\t\t\t\t\t fix rounding in unpremultiply;\n\t\t\t\t\t\t optimize vertical flip;\n\t\t\t\t\t\t disable raw_len validation;\n\t\t\t\t\t\t documentation fixes\n\t  2.15  (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode;\n\t\t\t\t\t\t warning fixes; disable run-time SSE detection on gcc;\n\t\t\t\t\t\t uniform handling of optional \"return\" values;\n\t\t\t\t\t\t thread-safe initialization of zlib tables\n\t  2.14  (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs\n\t  2.13  (2016-11-29) add 16-bit API, only supported for PNG right now\n\t  2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes\n\t  2.11  (2016-04-02) allocate large structures on the stack\n\t\t\t\t\t\t remove white matting for transparent PSD\n\t\t\t\t\t\t fix reported channel count for PNG & BMP\n\t\t\t\t\t\t re-enable SSE2 in non-gcc 64-bit\n\t\t\t\t\t\t support RGB-formatted JPEG\n\t\t\t\t\t\t read 16-bit PNGs (only as 8-bit)\n\t  2.10  (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED\n\t  2.09  (2016-01-16) allow comments in PNM files\n\t\t\t\t\t\t 16-bit-per-pixel TGA (not bit-per-component)\n\t\t\t\t\t\t info() for TGA could break due to .hdr handling\n\t\t\t\t\t\t info() for BMP to shares code instead of sloppy parse\n\t\t\t\t\t\t can use STBI_REALLOC_SIZED if allocator doesn't support realloc\n\t\t\t\t\t\t code cleanup\n\t  2.08  (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA\n\t  2.07  (2015-09-13) fix compiler warnings\n\t\t\t\t\t\t partial animated GIF support\n\t\t\t\t\t\t limited 16-bpc PSD support\n\t\t\t\t\t\t #ifdef unused functions\n\t\t\t\t\t\t bug with < 92 byte PIC,PNM,HDR,TGA\n\t  2.06  (2015-04-19) fix bug where PSD returns wrong '*comp' value\n\t  2.05  (2015-04-19) fix bug in progressive JPEG handling, fix warning\n\t  2.04  (2015-04-15) try to re-enable SIMD on MinGW 64-bit\n\t  2.03  (2015-04-12) extra corruption checking (mmozeiko)\n\t\t\t\t\t\t stbi_set_flip_vertically_on_load (nguillemot)\n\t\t\t\t\t\t fix NEON support; fix mingw support\n\t  2.02  (2015-01-19) fix incorrect assert, fix warning\n\t  2.01  (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2\n\t  2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG\n\t  2.00  (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg)\n\t\t\t\t\t\t progressive JPEG (stb)\n\t\t\t\t\t\t PGM/PPM support (Ken Miller)\n\t\t\t\t\t\t STBI_MALLOC,STBI_REALLOC,STBI_FREE\n\t\t\t\t\t\t GIF bugfix -- seemingly never worked\n\t\t\t\t\t\t STBI_NO_*, STBI_ONLY_*\n\t  1.48  (2014-12-14) fix incorrectly-named assert()\n\t  1.47  (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb)\n\t\t\t\t\t\t optimize PNG (ryg)\n\t\t\t\t\t\t fix bug in interlaced PNG with user-specified channel count (stb)\n\t  1.46  (2014-08-26)\n\t\t\t  fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG\n\t  1.45  (2014-08-16)\n\t\t\t  fix MSVC-ARM internal compiler error by wrapping malloc\n\t  1.44  (2014-08-07)\n\t\t\t  various warning fixes from Ronny Chevalier\n\t  1.43  (2014-07-15)\n\t\t\t  fix MSVC-only compiler problem in code changed in 1.42\n\t  1.42  (2014-07-09)\n\t\t\t  don't define _CRT_SECURE_NO_WARNINGS (affects user code)\n\t\t\t  fixes to stbi__cleanup_jpeg path\n\t\t\t  added STBI_ASSERT to avoid requiring assert.h\n\t  1.41  (2014-06-25)\n\t\t\t  fix search&replace from 1.36 that messed up comments/error messages\n\t  1.40  (2014-06-22)\n\t\t\t  fix gcc struct-initialization warning\n\t  1.39  (2014-06-15)\n\t\t\t  fix to TGA optimization when req_comp != number of components in TGA;\n\t\t\t  fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite)\n\t\t\t  add support for BMP version 5 (more ignored fields)\n\t  1.38  (2014-06-06)\n\t\t\t  suppress MSVC warnings on integer casts truncating values\n\t\t\t  fix accidental rename of 'skip' field of I/O\n\t  1.37  (2014-06-04)\n\t\t\t  remove duplicate typedef\n\t  1.36  (2014-06-03)\n\t\t\t  convert to header file single-file library\n\t\t\t  if de-iphone isn't set, load iphone images color-swapped instead of returning NULL\n\t  1.35  (2014-05-27)\n\t\t\t  various warnings\n\t\t\t  fix broken STBI_SIMD path\n\t\t\t  fix bug where stbi_load_from_file no longer left file pointer in correct place\n\t\t\t  fix broken non-easy path for 32-bit BMP (possibly never used)\n\t\t\t  TGA optimization by Arseny Kapoulkine\n\t  1.34  (unknown)\n\t\t\t  use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case\n\t  1.33  (2011-07-14)\n\t\t\t  make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements\n\t  1.32  (2011-07-13)\n\t\t\t  support for \"info\" function for all supported filetypes (SpartanJ)\n\t  1.31  (2011-06-20)\n\t\t\t  a few more leak fixes, bug in PNG handling (SpartanJ)\n\t  1.30  (2011-06-11)\n\t\t\t  added ability to load files via callbacks to accomidate custom input streams (Ben Wenger)\n\t\t\t  removed deprecated format-specific test/load functions\n\t\t\t  removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway\n\t\t\t  error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha)\n\t\t\t  fix inefficiency in decoding 32-bit BMP (David Woo)\n\t  1.29  (2010-08-16)\n\t\t\t  various warning fixes from Aurelien Pocheville\n\t  1.28  (2010-08-01)\n\t\t\t  fix bug in GIF palette transparency (SpartanJ)\n\t  1.27  (2010-08-01)\n\t\t\t  cast-to-stbi_uc to fix warnings\n\t  1.26  (2010-07-24)\n\t\t\t  fix bug in file buffering for PNG reported by SpartanJ\n\t  1.25  (2010-07-17)\n\t\t\t  refix trans_data warning (Won Chun)\n\t  1.24  (2010-07-12)\n\t\t\t  perf improvements reading from files on platforms with lock-heavy fgetc()\n\t\t\t  minor perf improvements for jpeg\n\t\t\t  deprecated type-specific functions so we'll get feedback if they're needed\n\t\t\t  attempt to fix trans_data warning (Won Chun)\n\t  1.23    fixed bug in iPhone support\n\t  1.22  (2010-07-10)\n\t\t\t  removed image *writing* support\n\t\t\t  stbi_info support from Jetro Lauha\n\t\t\t  GIF support from Jean-Marc Lienher\n\t\t\t  iPhone PNG-extensions from James Brown\n\t\t\t  warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva)\n\t  1.21    fix use of 'stbi_uc' in header (reported by jon blow)\n\t  1.20    added support for Softimage PIC, by Tom Seddon\n\t  1.19    bug in interlaced PNG corruption check (found by ryg)\n\t  1.18  (2008-08-02)\n\t\t\t  fix a threading bug (local mutable static)\n\t  1.17    support interlaced PNG\n\t  1.16    major bugfix - stbi__convert_format converted one too many pixels\n\t  1.15    initialize some fields for thread safety\n\t  1.14    fix threadsafe conversion bug\n\t\t\t  header-file-only version (#define STBI_HEADER_FILE_ONLY before including)\n\t  1.13    threadsafe\n\t  1.12    const qualifiers in the API\n\t  1.11    Support installable IDCT, colorspace conversion routines\n\t  1.10    Fixes for 64-bit (don't use \"unsigned long\")\n\t\t\t  optimized upsampling by Fabian \"ryg\" Giesen\n\t  1.09    Fix format-conversion for PSD code (bad global variables!)\n\t  1.08    Thatcher Ulrich's PSD code integrated by Nicolas Schulz\n\t  1.07    attempt to fix C++ warning/errors again\n\t  1.06    attempt to fix C++ warning/errors again\n\t  1.05    fix TGA loading to return correct *comp and use good luminance calc\n\t  1.04    default float alpha is 1, not 255; use 'void *' for stbi_image_free\n\t  1.03    bugfixes to STBI_NO_STDIO, STBI_NO_HDR\n\t  1.02    support for (subset of) HDR files, float interface for preferred access to them\n\t  1.01    fix bug: possible bug in handling right-side up bmps... not sure\n\t\t\t  fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all\n\t  1.00    interface to zlib that skips zlib header\n\t  0.99    correct handling of alpha in palette\n\t  0.98    TGA loader by lonesock; dynamically add loaders (untested)\n\t  0.97    jpeg errors on too large a file; also catch another malloc failure\n\t  0.96    fix detection of invalid v value - particleman@mollyrocket forum\n\t  0.95    during header scan, seek to markers in case of padding\n\t  0.94    STBI_NO_STDIO to disable stdio usage; rename all #defines the same\n\t  0.93    handle jpegtran output; verbose errors\n\t  0.92    read 4,8,16,24,32-bit BMP files of several formats\n\t  0.91    output 24-bit Windows 3.0 BMP files\n\t  0.90    fix a few more warnings; bump version number to approach 1.0\n\t  0.61    bugfixes due to Marc LeBlanc, Christopher Lloyd\n\t  0.60    fix compiling as c++\n\t  0.59    fix warnings: merge Dave Moore's -Wall fixes\n\t  0.58    fix bug: zlib uncompressed mode len/nlen was wrong endian\n\t  0.57    fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available\n\t  0.56    fix bug: zlib uncompressed mode len vs. nlen\n\t  0.55    fix bug: restart_interval not initialized to 0\n\t  0.54    allow NULL for 'int *comp'\n\t  0.53    fix bug in png 3->4; speedup png decoding\n\t  0.52    png handles req_comp=3,4 directly; minor cleanup; jpeg comments\n\t  0.51    obey req_comp requests, 1-component jpegs return as 1-component,\n\t\t\t  on 'test' only check type, not whether we support this variant\n\t  0.50  (2006-11-19)\n\t\t\t  first released version\n*/\n\n\n/*\n------------------------------------------------------------------------------\nThis software is available under 2 licenses -- choose whichever you prefer.\n------------------------------------------------------------------------------\nALTERNATIVE A - MIT License\nCopyright (c) 2017 Sean Barrett\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\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------------------------------------------------------------------------------\nALTERNATIVE B - Public Domain (www.unlicense.org)\nThis is free and unencumbered software released into the public domain.\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute this\nsoftware, either in source code form or as a compiled binary, for any purpose,\ncommercial or non-commercial, and by any means.\nIn jurisdictions that recognize copyright laws, the author or authors of this\nsoftware dedicate any and all copyright interest in the software to the public\ndomain. We make this dedication for the benefit of the public at large and to\nthe detriment of our heirs and successors. We intend this dedication to be an\novert act of relinquishment in perpetuity of all present and future rights to\nthis software under copyright law.\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 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------------------------------------------------------------------------------\n*/"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/Input.cs",
    "content": "﻿namespace Hazel\n{\n\tpublic class Input\n\t{\n\t\tpublic static bool IsKeyDown(KeyCode keycode)\n\t\t{\n\t\t\treturn InternalCalls.Input_IsKeyDown(keycode);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/InternalCalls.cs",
    "content": "﻿using System;\nusing System.Runtime.CompilerServices;\n\nnamespace Hazel\n{\n\tpublic static class InternalCalls\n\t{\n\t\t#region Entity\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static bool Entity_HasComponent(ulong entityID, Type componentType);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static ulong Entity_FindEntityByName(string name);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static object GetScriptInstance(ulong entityID);\n\t\t#endregion\n\n\t\t#region TransformComponent\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TransformComponent_GetTranslation(ulong entityID, out Vector3 translation);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TransformComponent_SetTranslation(ulong entityID, ref Vector3 translation);\n\t\t#endregion\n\n\t\t#region Rigidbody2DComponent\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void Rigidbody2DComponent_ApplyLinearImpulse(ulong entityID, ref Vector2 impulse, ref Vector2 point, bool wake);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void Rigidbody2DComponent_GetLinearVelocity(ulong entityID, out Vector2 linearVelocity);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static Rigidbody2DComponent.BodyType Rigidbody2DComponent_GetType(ulong entityID);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void Rigidbody2DComponent_SetType(ulong entityID, Rigidbody2DComponent.BodyType type);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void Rigidbody2DComponent_ApplyLinearImpulseToCenter(ulong entityID, ref Vector2 impulse, bool wake);\n\t\t#endregion\n\n\t\t#region TextComponent\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static string TextComponent_GetText(ulong entityID);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TextComponent_SetText(ulong entityID, string text);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TextComponent_GetColor(ulong entityID, out Vector4 color);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TextComponent_SetColor(ulong entityID, ref Vector4 color);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static float TextComponent_GetKerning(ulong entityID);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TextComponent_SetKerning(ulong entityID, float kerning);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static float TextComponent_GetLineSpacing(ulong entityID);\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static void TextComponent_SetLineSpacing(ulong entityID, float lineSpacing);\n\t\t#endregion\n\n\t\t#region Rigidbody2DComponent\n\t\t[MethodImplAttribute(MethodImplOptions.InternalCall)]\n\t\tinternal extern static bool Input_IsKeyDown(KeyCode keycode);\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/KeyCode.cs",
    "content": "﻿namespace Hazel\n{\n\tpublic enum KeyCode\n\t{\n\t\t// From glfw3.h\n\t\tSpace = 32,\n\t\tApostrophe = 39, /* ' */\n\t\tComma = 44, /* , */\n\t\tMinus = 45, /* - */\n\t\tPeriod = 46, /* . */\n\t\tSlash = 47, /* / */\n\n\t\tD0 = 48, /* 0 */\n\t\tD1 = 49, /* 1 */\n\t\tD2 = 50, /* 2 */\n\t\tD3 = 51, /* 3 */\n\t\tD4 = 52, /* 4 */\n\t\tD5 = 53, /* 5 */\n\t\tD6 = 54, /* 6 */\n\t\tD7 = 55, /* 7 */\n\t\tD8 = 56, /* 8 */\n\t\tD9 = 57, /* 9 */\n\n\t\tSemicolon = 59, /* ; */\n\t\tEqual = 61, /* = */\n\n\t\tA = 65,\n\t\tB = 66,\n\t\tC = 67,\n\t\tD = 68,\n\t\tE = 69,\n\t\tF = 70,\n\t\tG = 71,\n\t\tH = 72,\n\t\tI = 73,\n\t\tJ = 74,\n\t\tK = 75,\n\t\tL = 76,\n\t\tM = 77,\n\t\tN = 78,\n\t\tO = 79,\n\t\tP = 80,\n\t\tQ = 81,\n\t\tR = 82,\n\t\tS = 83,\n\t\tT = 84,\n\t\tU = 85,\n\t\tV = 86,\n\t\tW = 87,\n\t\tX = 88,\n\t\tY = 89,\n\t\tZ = 90,\n\n\t\tLeftBracket = 91,  /* [ */\n\t\tBackslash = 92,  /* \\ */\n\t\tRightBracket = 93,  /* ] */\n\t\tGraveAccent = 96,  /* ` */\n\n\t\tWorld1 = 161, /* non-US #1 */\n\t\tWorld2 = 162, /* non-US #2 */\n\n\t\t/* Function keys */\n\t\tEscape = 256,\n\t\tEnter = 257,\n\t\tTab = 258,\n\t\tBackspace = 259,\n\t\tInsert = 260,\n\t\tDelete = 261,\n\t\tRight = 262,\n\t\tLeft = 263,\n\t\tDown = 264,\n\t\tUp = 265,\n\t\tPageUp = 266,\n\t\tPageDown = 267,\n\t\tHome = 268,\n\t\tEnd = 269,\n\t\tCapsLock = 280,\n\t\tScrollLock = 281,\n\t\tNumLock = 282,\n\t\tPrintScreen = 283,\n\t\tPause = 284,\n\t\tF1 = 290,\n\t\tF2 = 291,\n\t\tF3 = 292,\n\t\tF4 = 293,\n\t\tF5 = 294,\n\t\tF6 = 295,\n\t\tF7 = 296,\n\t\tF8 = 297,\n\t\tF9 = 298,\n\t\tF10 = 299,\n\t\tF11 = 300,\n\t\tF12 = 301,\n\t\tF13 = 302,\n\t\tF14 = 303,\n\t\tF15 = 304,\n\t\tF16 = 305,\n\t\tF17 = 306,\n\t\tF18 = 307,\n\t\tF19 = 308,\n\t\tF20 = 309,\n\t\tF21 = 310,\n\t\tF22 = 311,\n\t\tF23 = 312,\n\t\tF24 = 313,\n\t\tF25 = 314,\n\n\t\t/* Keypad */\n\t\tKP0 = 320,\n\t\tKP1 = 321,\n\t\tKP2 = 322,\n\t\tKP3 = 323,\n\t\tKP4 = 324,\n\t\tKP5 = 325,\n\t\tKP6 = 326,\n\t\tKP7 = 327,\n\t\tKP8 = 328,\n\t\tKP9 = 329,\n\t\tKPDecimal = 330,\n\t\tKPDivide = 331,\n\t\tKPMultiply = 332,\n\t\tKPSubtract = 333,\n\t\tKPAdd = 334,\n\t\tKPEnter = 335,\n\t\tKPEqual = 336,\n\n\t\tLeftShift = 340,\n\t\tLeftControl = 341,\n\t\tLeftAlt = 342,\n\t\tLeftSuper = 343,\n\t\tRightShift = 344,\n\t\tRightControl = 345,\n\t\tRightAlt = 346,\n\t\tRightSuper = 347,\n\t\tMenu = 348\n\t}\n\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/Scene/Components.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Hazel\n{\n\tpublic abstract class Component\n\t{\n\t\tpublic Entity Entity { get; internal set; }\n\t}\n\n\tpublic class TransformComponent : Component\n\t{\n\t\tpublic Vector3 Translation\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tInternalCalls.TransformComponent_GetTranslation(Entity.ID, out Vector3 translation);\n\t\t\t\treturn translation;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tInternalCalls.TransformComponent_SetTranslation(Entity.ID, ref value);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic class Rigidbody2DComponent : Component\n\t{\n\t\tpublic enum BodyType { Static = 0, Dynamic, Kinematic }\n\n\t\tpublic Vector2 LinearVelocity\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tInternalCalls.Rigidbody2DComponent_GetLinearVelocity(Entity.ID, out Vector2 velocity);\n\t\t\t\treturn velocity;\n\t\t\t}\n\t\t}\n\n\t\tpublic BodyType Type\n\t\t{\n\t\t\tget => InternalCalls.Rigidbody2DComponent_GetType(Entity.ID);\n\t\t\tset => InternalCalls.Rigidbody2DComponent_SetType(Entity.ID, value);\n\t\t}\n\n\t\tpublic void ApplyLinearImpulse(Vector2 impulse, Vector2 worldPosition, bool wake)\n\t\t{\n\t\t\tInternalCalls.Rigidbody2DComponent_ApplyLinearImpulse(Entity.ID, ref impulse, ref worldPosition, wake);\n\t\t}\n\n\t\tpublic void ApplyLinearImpulse(Vector2 impulse, bool wake)\n\t\t{\n\t\t\tInternalCalls.Rigidbody2DComponent_ApplyLinearImpulseToCenter(Entity.ID, ref impulse, wake);\n\t\t}\n\n\t}\n\n\tpublic class TextComponent : Component\n\t{\n\n\t\tpublic string Text\n\t\t{\n\t\t\tget => InternalCalls.TextComponent_GetText(Entity.ID);\n\t\t\tset => InternalCalls.TextComponent_SetText(Entity.ID, value);\n\t\t}\n\n\t\tpublic Vector4 Color\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tInternalCalls.TextComponent_GetColor(Entity.ID, out Vector4 color);\n\t\t\t\treturn color;\n\t\t\t}\n\n\t\t\tset\n\t\t\t{\n\t\t\t\tInternalCalls.TextComponent_SetColor(Entity.ID, ref value);\n\t\t\t}\n\t\t}\n\n\t\tpublic float Kerning\n\t\t{\n\t\t\tget => InternalCalls.TextComponent_GetKerning(Entity.ID);\n\t\t\tset => InternalCalls.TextComponent_SetKerning(Entity.ID, value);\n\t\t}\n\n\t\tpublic float LineSpacing\n\t\t{\n\t\t\tget => InternalCalls.TextComponent_GetLineSpacing(Entity.ID);\n\t\t\tset => InternalCalls.TextComponent_SetLineSpacing(Entity.ID, value);\n\t\t}\n\n\t}\n\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/Scene/Entity.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\nnamespace Hazel\n{\n\tpublic class Entity\n\t{\n\t\tprotected Entity() { ID = 0; } \n\n\t\tinternal Entity(ulong id)\n\t\t{\n\t\t\tID = id;\n\t\t}\n\n\t\tpublic readonly ulong ID;\n\n\t\tpublic Vector3 Translation\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tInternalCalls.TransformComponent_GetTranslation(ID, out Vector3 result);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tInternalCalls.TransformComponent_SetTranslation(ID, ref value);\n\t\t\t}\n\t\t}\n\n\t\tpublic bool HasComponent<T>() where T : Component, new()\n\t\t{\n\t\t\tType componentType = typeof(T);\n\t\t\treturn InternalCalls.Entity_HasComponent(ID, componentType);\n\t\t}\n\n\t\tpublic T GetComponent<T>() where T : Component, new()\n\t\t{\n\t\t\tif (!HasComponent<T>())\n\t\t\t\treturn null;\n\n\t\t\tT component = new T() { Entity = this };\n\t\t\treturn component;\n\t\t}\n\t\t\n\t\tpublic Entity FindEntityByName(string name)\n\t\t{\n\t\t\tulong entityID = InternalCalls.Entity_FindEntityByName(name);\n\t\t\tif (entityID == 0)\n\t\t\t\treturn null;\n\n\t\t\treturn new Entity(entityID);\n\t\t}\n\n\t\tpublic T As<T>() where T : Entity, new()\n\t\t{\n\t\t\tobject instance = InternalCalls.GetScriptInstance(ID);\n\t\t\treturn instance as T;\n\t\t}\n\n\t}\n\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/Vector2.cs",
    "content": "﻿using System;\n\nnamespace Hazel\n{\n\tpublic struct Vector2\n\t{\n\t\tpublic float X, Y;\n\n\t\tpublic static Vector2 Zero => new Vector2(0.0f);\n\n\t\tpublic Vector2(float scalar)\n\t\t{\n\t\t\tX = scalar;\n\t\t\tY = scalar;\n\t\t}\n\n\t\tpublic Vector2(float x, float y)\n\t\t{\n\t\t\tX = x;\n\t\t\tY = y;\n\t\t}\n\n\t\tpublic static Vector2 operator +(Vector2 a, Vector2 b)\n\t\t{\n\t\t\treturn new Vector2(a.X + b.X, a.Y + b.Y);\n\t\t}\n\n\t\tpublic static Vector2 operator *(Vector2 vector, float scalar)\n\t\t{\n\t\t\treturn new Vector2(vector.X * scalar, vector.Y * scalar);\n\t\t}\n\n\t\tpublic float LengthSquared()\n\t\t{\n\t\t\treturn X * X + Y * Y;\n\t\t}\n\n\t\tpublic float Length()\n\t\t{\n\t\t\treturn (float)Math.Sqrt(LengthSquared());\n\t\t}\n\n\n\t}\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/Vector3.cs",
    "content": "﻿namespace Hazel\n{\n\tpublic struct Vector3\n\t{\n\t\tpublic float X, Y, Z;\n\n\t\tpublic static Vector3 Zero => new Vector3(0.0f);\n\n\t\tpublic Vector3(float scalar)\n\t\t{\n\t\t\tX = scalar;\n\t\t\tY = scalar;\n\t\t\tZ = scalar;\n\t\t}\n\n\t\tpublic Vector3(float x, float y, float z)\n\t\t{\n\t\t\tX = x;\n\t\t\tY = y;\n\t\t\tZ = z;\n\t\t}\n\n\t\tpublic Vector3(Vector2 xy, float z)\n\t\t{\n\t\t\tX = xy.X;\n\t\t\tY = xy.Y;\n\t\t\tZ = z;\n\t\t}\n\n\t\tpublic Vector2 XY\n\t\t{\n\t\t\tget => new Vector2(X, Y);\n\t\t\tset\n\t\t\t{\n\t\t\t\tX = value.X;\n\t\t\t\tY = value.Y;\n\t\t\t}\n\t\t}\n\n\t\tpublic static Vector3 operator +(Vector3 a, Vector3 b)\n\t\t{\n\t\t\treturn new Vector3(a.X + b.X, a.Y + b.Y, a.Z + b.Z);\n\t\t}\n\n\t\tpublic static Vector3 operator *(Vector3 vector, float scalar)\n\t\t{\n\t\t\treturn new Vector3(vector.X * scalar, vector.Y * scalar, vector.Z * scalar);\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/Source/Hazel/Vector4.cs",
    "content": "﻿namespace Hazel\n{\n\tpublic struct Vector4\n\t{\n\t\tpublic float X, Y, Z, W;\n\n\t\tpublic static Vector4 Zero => new Vector4(0.0f);\n\n\t\tpublic Vector4(float scalar)\n\t\t{\n\t\t\tX = scalar;\n\t\t\tY = scalar;\n\t\t\tZ = scalar;\n\t\t\tW = scalar;\n\t\t}\n\n\t\tpublic Vector4(float x, float y, float z, float w)\n\t\t{\n\t\t\tX = x;\n\t\t\tY = y;\n\t\t\tZ = z;\n\t\t\tW = w;\n\t\t}\n\n\t\tpublic Vector4(Vector3 xyz, float w)\n\t\t{\n\t\t\tX = xyz.X;\n\t\t\tY = xyz.Y;\n\t\t\tZ = xyz.Z;\n\t\t\tW = w;\n\t\t}\n\n\t\tpublic Vector2 XY\n\t\t{\n\t\t\tget => new Vector2(X, Y);\n\t\t\tset\n\t\t\t{\n\t\t\t\tX = value.X;\n\t\t\t\tY = value.Y;\n\t\t\t}\n\t\t}\n\n\t\tpublic Vector3 XYZ\n\t\t{\n\t\t\tget => new Vector3(X, Y, Z);\n\t\t\tset\n\t\t\t{\n\t\t\t\tX = value.X;\n\t\t\t\tY = value.Y;\n\t\t\t\tZ = value.Z;\n\t\t\t}\n\t\t}\n\n\t\tpublic static Vector4 operator +(Vector4 a, Vector4 b)\n\t\t{\n\t\t\treturn new Vector4(a.X + b.X, a.Y + b.Y, a.Z + b.Z, a.W + b.W);\n\t\t}\n\n\t\tpublic static Vector4 operator *(Vector4 vector, float scalar)\n\t\t{\n\t\t\treturn new Vector4(vector.X * scalar, vector.Y * scalar, vector.Z * scalar, vector.W * scalar);\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "Hazel-ScriptCore/premake5.lua",
    "content": "project \"Hazel-ScriptCore\"\n\tkind \"SharedLib\"\n\tlanguage \"C#\"\n\tdotnetframework \"4.7.2\"\n\n\ttargetdir (\"../Hazelnut/Resources/Scripts\")\n\tobjdir (\"../Hazelnut/Resources/Scripts/Intermediates\")\n\n\tfiles \n\t{\n\t\t\"Source/**.cs\",\n\t\t\"Properties/**.cs\"\n\t}\n\t\n\tfilter \"configurations:Debug\"\n\t\toptimize \"Off\"\n\t\tsymbols \"Default\"\n\n\tfilter \"configurations:Release\"\n\t\toptimize \"On\"\n\t\tsymbols \"Default\"\n\n\tfilter \"configurations:Dist\"\n\t\toptimize \"Full\"\n\t\tsymbols \"Off\"\n"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scenes/3DExample.hazel",
    "content": "Scene: Untitled\nEntities:\n  - Entity: 9335076965011521498\n    TagComponent:\n      Tag: Camera B\n    TransformComponent:\n      Translation: [0.899999976, 0, 6]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    CameraComponent:\n      Camera:\n        ProjectionType: 0\n        PerspectiveFOV: 0.785398185\n        PerspectiveNear: 0.00999999978\n        PerspectiveFar: 1000\n        OrthographicSize: 10\n        OrthographicNear: -1\n        OrthographicFar: 1\n      Primary: true\n      FixedAspectRatio: false\n  - Entity: 3480369648141931921\n    TagComponent:\n      Tag: Camera A\n    TransformComponent:\n      Translation: [0, 0, 0]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    CameraComponent:\n      Camera:\n        ProjectionType: 1\n        PerspectiveFOV: 0.785398185\n        PerspectiveNear: 0.00999999978\n        PerspectiveFar: 1000\n        OrthographicSize: 10\n        OrthographicNear: -1\n        OrthographicFar: 1\n      Primary: false\n      FixedAspectRatio: false\n  - Entity: 4212786185008784347\n    TagComponent:\n      Tag: Red Square\n    TransformComponent:\n      Translation: [0, 1.10000002, 0]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    SpriteRendererComponent:\n      Color: [1, 0, 0, 1]\n  - Entity: 6902904111259729925\n    TagComponent:\n      Tag: Green Square\n    TransformComponent:\n      Translation: [2.4000001, 0, -4.80000019]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    SpriteRendererComponent:\n      Color: [0, 1, 0, 1]"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scenes/Example.hazel",
    "content": "Scene: Untitled\nEntities:\n  - Entity: 3263328598497060330\n    TagComponent:\n      Tag: Camera B\n    TransformComponent:\n      Translation: [0, 0, 0]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    CameraComponent:\n      Camera:\n        ProjectionType: 1\n        PerspectiveFOV: 0.785398185\n        PerspectiveNear: 0.00999999978\n        PerspectiveFar: 1000\n        OrthographicSize: 10\n        OrthographicNear: -1\n        OrthographicFar: 1\n      Primary: false\n      FixedAspectRatio: false\n  - Entity: 3503638098362915787\n    TagComponent:\n      Tag: Camera A\n    TransformComponent:\n      Translation: [0, 0, 0]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    CameraComponent:\n      Camera:\n        ProjectionType: 1\n        PerspectiveFOV: 0.785398185\n        PerspectiveNear: 0.00999999978\n        PerspectiveFar: 1000\n        OrthographicSize: 10\n        OrthographicNear: -1\n        OrthographicFar: 1\n      Primary: true\n      FixedAspectRatio: false\n  - Entity: 17154294327283940743\n    TagComponent:\n      Tag: Cherno Square\n    TransformComponent:\n      Translation: [-1.09518838, 1.10000002, 0]\n      Rotation: [0, 0, 0]\n      Scale: [4.40999985, 4.40999985, 4.40999985]\n    SpriteRendererComponent:\n      Color: [1, 0.999989986, 0.999989986, 1]\n      TexturePath: Textures\\ChernoLogo.png\n      TilingFactor: 1\n  - Entity: 6645248621277955267\n    TagComponent:\n      Tag: CheckerboardBG\n    TransformComponent:\n      Translation: [2.4000001, 0, -12.255374]\n      Rotation: [0, 0, 0]\n      Scale: [20, 20, 20]\n    SpriteRendererComponent:\n      Color: [0.999989986, 1, 0.999989986, 1]\n      TexturePath: Textures\\Checkerboard.png\n      TilingFactor: 10\n"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scenes/Physics2D.hazel",
    "content": "Scene: Untitled\nEntities:\n  - Entity: 16672940118998907085\n    TagComponent:\n      Tag: Floor\n    TransformComponent:\n      Translation: [-0.883175671, -1.09447932, 0]\n      Rotation: [0, 0, -0.638996005]\n      Scale: [6.74196768, 0.46067813, 1]\n    SpriteRendererComponent:\n      Color: [0.949806929, 0.455301404, 0.0660097376, 1]\n      TilingFactor: 1\n    Rigidbody2DComponent:\n      BodyType: Static\n      FixedRotation: false\n    BoxCollider2DComponent:\n      Offset: [0, 0]\n      Size: [0.5, 0.5]\n      Density: 1\n      Friction: 0.5\n      Restitution: 0\n      RestitutionThreshold: 0.5\n  - Entity: 4793924497264767156\n    TagComponent:\n      Tag: Camera\n    TransformComponent:\n      Translation: [0, 0, 4.99711323]\n      Rotation: [0, 0, 0]\n      Scale: [1, 1, 1]\n    CameraComponent:\n      Camera:\n        ProjectionType: 0\n        PerspectiveFOV: 0.785398185\n        PerspectiveNear: 0.00999999978\n        PerspectiveFar: 1000\n        OrthographicSize: 10\n        OrthographicNear: -1\n        OrthographicFar: 1\n      Primary: true\n      FixedAspectRatio: false\n    ScriptComponent:\n      ClassName: Sandbox.Camera\n      ScriptFields:\n        - Name: DistanceFromPlayer\n          Type: Float\n          Data: 5\n  - Entity: 15045535320033348975\n    TagComponent:\n      Tag: Block\n    TransformComponent:\n      Translation: [-0.560881913, 0.980064034, 0.0225147791]\n      Rotation: [0, 0, 0]\n      Scale: [0.361159712, 0.375572056, 0.848135769]\n    SpriteRendererComponent:\n      Color: [0.277992249, 0.277989477, 0.277989477, 1]\n      TilingFactor: 1\n    Rigidbody2DComponent:\n      BodyType: Dynamic\n      FixedRotation: false\n    BoxCollider2DComponent:\n      Offset: [0, 0]\n      Size: [0.5, 0.5]\n      Density: 0.879999995\n      Friction: 0.100000001\n      Restitution: 0.819999993\n      RestitutionThreshold: 0.5\n  - Entity: 5134011587522944740\n    TagComponent:\n      Tag: Floor\n    TransformComponent:\n      Translation: [2.3506453, -1.84539962, 0]\n      Rotation: [0, 0, 0.603692532]\n      Scale: [6.74196959, 0.46067816, 1]\n    SpriteRendererComponent:\n      Color: [0.949806929, 0.455301404, 0.0660097376, 1]\n      TilingFactor: 1\n    Rigidbody2DComponent:\n      BodyType: Static\n      FixedRotation: false\n    BoxCollider2DComponent:\n      Offset: [0, 0]\n      Size: [0.5, 0.5]\n      Density: 1\n      Friction: 0.5\n      Restitution: 0\n      RestitutionThreshold: 0.5\n  - Entity: 8804479042241551551\n    TagComponent:\n      Tag: Circle\n    TransformComponent:\n      Translation: [1.02738881, -1.70331478, 0]\n      Rotation: [0, 0, 0]\n      Scale: [2.15999985, 2.15999985, 2.15999985]\n    CircleRendererComponent:\n      Color: [0.934362948, 0.362345755, 0.057721246, 1]\n      Thickness: 0.100000001\n      Fade: 0.00499999989\n    Rigidbody2DComponent:\n      BodyType: Static\n      FixedRotation: false\n    CircleCollider2DComponent:\n      Offset: [0, 0]\n      Radius: 0.5\n      Density: 1\n      Friction: 0.5\n      Restitution: 0\n      RestitutionThreshold: 0.5\n  - Entity: 8254140920860137284\n    TagComponent:\n      Tag: Player\n    TransformComponent:\n      Translation: [0.0495706201, 0.271503896, 0.0225147791]\n      Rotation: [0, 0, -0.235084534]\n      Scale: [0.361159712, 0.375572056, 0.848135769]\n    ScriptComponent:\n      ClassName: Sandbox.Player\n      ScriptFields:\n        - Name: Speed\n          Type: Float\n          Data: 1.25\n    SpriteRendererComponent:\n      Color: [1, 1, 1, 1]\n      TilingFactor: 1\n    Rigidbody2DComponent:\n      BodyType: Dynamic\n      FixedRotation: false\n    BoxCollider2DComponent:\n      Offset: [0, 0]\n      Size: [0.5, 0.5]\n      Density: 0.879999995\n      Friction: 0.100000001\n      Restitution: 0.819999993\n      RestitutionThreshold: 0.5"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scenes/PinkCube.hazel",
    "content": "Scene: Untitled\nEntities:\n  - Entity: 8244940659429586525\n    TagComponent:\n      Tag: Left\n    TransformComponent:\n      Translation: [-0.354999989, 0, 0.349999994]\n      Rotation: [0, -0.785398185, 0]\n      Scale: [1, 1, 1]\n    SpriteRendererComponent:\n      Color: [1, 0, 0.949807167, 1]\n  - Entity: 2335431429201735937\n    TagComponent:\n      Tag: Right\n    TransformComponent:\n      Translation: [0.351999998, 0, 0.349999994]\n      Rotation: [0, 0.785398185, 0]\n      Scale: [1, 1, 1]\n    SpriteRendererComponent:\n      Color: [0.54842025, 0, 0.586872578, 1]\n  - Entity: 15355018394736438603\n    TagComponent:\n      Tag: Camera\n    TransformComponent:\n      Translation: [0, 1.70000005, 4]\n      Rotation: [-0.404916406, 0, 0]\n      Scale: [1, 1, 1]\n    CameraComponent:\n      Camera:\n        ProjectionType: 0\n        PerspectiveFOV: 0.52359879\n        PerspectiveNear: 0.00999999978\n        PerspectiveFar: 1000\n        OrthographicSize: 10\n        OrthographicNear: -1\n        OrthographicFar: 1\n      Primary: true\n      FixedAspectRatio: false\n  - Entity: 9235617827118161440\n    TagComponent:\n      Tag: Top\n    TransformComponent:\n      Translation: [0, 0.5, 0]\n      Rotation: [1.57079637, 0.785398185, 0]\n      Scale: [1, 1, 1]\n    SpriteRendererComponent:\n      Color: [0.876447856, 0, 0.834712803, 1]"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scripts/Source/Camera.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nusing Hazel;\n\nnamespace Sandbox\n{\n\tpublic class Camera : Entity\n\t{\n\t\tpublic Entity OtherEntity;\n\n\t\tpublic float DistanceFromPlayer = 5.0f;\n\n\t\tprivate Entity m_Player;\n\n\t\tvoid OnCreate()\n\t\t{\n\t\t\tm_Player = FindEntityByName(\"Player\");\n\t\t}\n\n\t\tvoid OnUpdate(float ts)\n\t\t{\n\t\t\tif (m_Player != null)\n\t\t\t\tTranslation = new Vector3(m_Player.Translation.XY, DistanceFromPlayer);\n\n\t\t\tfloat speed = 1.0f;\n\t\t\tVector3 velocity = Vector3.Zero;\n\n\t\t\tif (Input.IsKeyDown(KeyCode.Up))\n\t\t\t\tvelocity.Y = 1.0f;\n\t\t\telse if (Input.IsKeyDown(KeyCode.Down))\n\t\t\t\tvelocity.Y = -1.0f;\n\n\t\t\tif (Input.IsKeyDown(KeyCode.Left))\n\t\t\t\tvelocity.X = -1.0f;\n\t\t\telse if (Input.IsKeyDown(KeyCode.Right))\n\t\t\t\tvelocity.X = 1.0f;\n\n\t\t\tvelocity *= speed;\n\n\t\t\tVector3 translation = Translation;\n\t\t\ttranslation += velocity * ts;\n\t\t\tTranslation = translation;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scripts/Source/Player.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nusing Hazel;\n\nnamespace Sandbox\n{\n\tpublic class Player : Entity\n\t{\n\t\tprivate TransformComponent m_Transform;\n\t\tprivate Rigidbody2DComponent m_Rigidbody;\n\n\t\tpublic float Speed;\n\t\tpublic float Time = 0.0f;\n\n\t\tvoid OnCreate()\n\t\t{\n\t\t\tConsole.WriteLine($\"Player.OnCreate - {ID}\");\n\n\t\t\tm_Transform = GetComponent<TransformComponent>();\n\t\t\tm_Rigidbody = GetComponent<Rigidbody2DComponent>();\n\t\t}\n\n\t\tvoid OnUpdate(float ts)\n\t\t{\n\t\t\tTime += ts;\n\t\t\t// Console.WriteLine($\"Player.OnUpdate: {ts}\");\n\n\t\t\tfloat speed = Speed;\n\t\t\tVector3 velocity = Vector3.Zero;\n\n\t\t\tif (Input.IsKeyDown(KeyCode.W))\n\t\t\t\tvelocity.Y = 1.0f;\n\t\t\telse if (Input.IsKeyDown(KeyCode.S))\n\t\t\t\tvelocity.Y = -1.0f;\n\n\t\t\tif (Input.IsKeyDown(KeyCode.A))\n\t\t\t\tvelocity.X = -1.0f;\n\t\t\telse if (Input.IsKeyDown(KeyCode.D))\n\t\t\t\tvelocity.X = 1.0f;\n\n\t\t\tEntity cameraEntity = FindEntityByName(\"Camera\");\n\t\t\tif (cameraEntity != null)\n\t\t\t{\n\t\t\t\tCamera camera = cameraEntity.As<Camera>();\n\n\t\t\t\tif (Input.IsKeyDown(KeyCode.Q))\n\t\t\t\t\tcamera.DistanceFromPlayer += speed * 2.0f * ts;\n\t\t\t\telse if (Input.IsKeyDown(KeyCode.E))\n\t\t\t\t\tcamera.DistanceFromPlayer -= speed * 2.0f * ts;\n\t\t\t}\n\n\t\t\tvelocity *= speed * ts;\n\n\t\t\tm_Rigidbody.ApplyLinearImpulse(velocity.XY, true);\n\n\t\t\t//Vector3 translation = m_Transform.Translation;\n\t\t\t//translation += velocity * ts;\n\t\t\t//m_Transform.Translation = translation;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scripts/Win-GenProjects.bat",
    "content": "@echo off\ncall ..\\..\\..\\..\\vendor\\premake\\bin\\premake5.exe vs2022\nPAUSE\n"
  },
  {
    "path": "Hazelnut/SandboxProject/Assets/Scripts/premake5.lua",
    "content": "local HazelRootDir = '../../../..'\ninclude (HazelRootDir .. \"/vendor/premake/premake_customization/solution_items.lua\")\n\nworkspace \"Sandbox\"\n\tarchitecture \"x86_64\"\n\tstartproject \"Sandbox\"\n\n\tconfigurations\n\t{\n\t\t\"Debug\",\n\t\t\"Release\",\n\t\t\"Dist\"\n\t}\n\n\tflags\n\t{\n\t\t\"MultiProcessorCompile\"\n\t}\n\noutputdir = \"%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}\"\n\nproject \"Sandbox\"\n\tkind \"SharedLib\"\n\tlanguage \"C#\"\n\tdotnetframework \"4.7.2\"\n\n\ttargetdir (\"Binaries\")\n\tobjdir (\"Intermediates\")\n\n\tfiles \n\t{\n\t\t\"Source/**.cs\",\n\t\t\"Properties/**.cs\"\n\t}\n\n\tlinks\n\t{\n\t\t\"Hazel-ScriptCore\"\n\t}\n\t\n\tfilter \"configurations:Debug\"\n\t\toptimize \"Off\"\n\t\tsymbols \"Default\"\n\n\tfilter \"configurations:Release\"\n\t\toptimize \"On\"\n\t\tsymbols \"Default\"\n\n\tfilter \"configurations:Dist\"\n\t\toptimize \"Full\"\n\t\tsymbols \"Off\"\n\ngroup \"Hazel\"\n\tinclude (HazelRootDir .. \"/Hazel-ScriptCore\")\ngroup \"\"\n"
  },
  {
    "path": "Hazelnut/SandboxProject/Sandbox.hproj",
    "content": "Project:\n  Name: Sandbox\n  StartScene: \"Scenes/Physics2D.hazel\"\n  AssetDirectory: \"Assets\"\n  ScriptModulePath: \"Scripts/Binaries/Sandbox.dll\"\n"
  },
  {
    "path": "Hazelnut/assets/fonts/opensans/LICENSE.txt",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Hazelnut/assets/shaders/FlatColor.glsl",
    "content": "// Flat Color Shader\n\n#type vertex\n#version 330 core\n\nlayout(location = 0) in vec3 a_Position;\n\nuniform mat4 u_ViewProjection;\nuniform mat4 u_Transform;\n\nvoid main()\n{\n\tgl_Position = u_ViewProjection * u_Transform * vec4(a_Position, 1.0);\n}\n\n#type fragment\n#version 330 core\n\nlayout(location = 0) out vec4 color;\n\nuniform vec4 u_Color;\n\nvoid main()\n{\n\tcolor = u_Color;\n}"
  },
  {
    "path": "Hazelnut/assets/shaders/Renderer2D_Circle.glsl",
    "content": "//--------------------------\n// - Hazel 2D -\n// Renderer2D Circle Shader\n// --------------------------\n\n#type vertex\n#version 450 core\n\nlayout(location = 0) in vec3 a_WorldPosition;\nlayout(location = 1) in vec3 a_LocalPosition;\nlayout(location = 2) in vec4 a_Color;\nlayout(location = 3) in float a_Thickness;\nlayout(location = 4) in float a_Fade;\nlayout(location = 5) in int a_EntityID;\n\nlayout(std140, binding = 0) uniform Camera\n{\n\tmat4 u_ViewProjection;\n};\n\nstruct VertexOutput\n{\n\tvec3 LocalPosition;\n\tvec4 Color;\n\tfloat Thickness;\n\tfloat Fade;\n};\n\nlayout (location = 0) out VertexOutput Output;\nlayout (location = 4) out flat int v_EntityID;\n\nvoid main()\n{\n\tOutput.LocalPosition = a_LocalPosition;\n\tOutput.Color = a_Color;\n\tOutput.Thickness = a_Thickness;\n\tOutput.Fade = a_Fade;\n\n\tv_EntityID = a_EntityID;\n\n\tgl_Position = u_ViewProjection * vec4(a_WorldPosition, 1.0);\n}\n\n#type fragment\n#version 450 core\n\nlayout(location = 0) out vec4 o_Color;\nlayout(location = 1) out int o_EntityID;\n\nstruct VertexOutput\n{\n\tvec3 LocalPosition;\n\tvec4 Color;\n\tfloat Thickness;\n\tfloat Fade;\n};\n\nlayout (location = 0) in VertexOutput Input;\nlayout (location = 4) in flat int v_EntityID;\n\nvoid main()\n{\n    // Calculate distance and fill circle with white\n    float distance = 1.0 - length(Input.LocalPosition);\n    float circle = smoothstep(0.0, Input.Fade, distance);\n    circle *= smoothstep(Input.Thickness + Input.Fade, Input.Thickness, distance);\n\n\tif (circle == 0.0)\n\t\tdiscard;\n\n    // Set output color\n    o_Color = Input.Color;\n\to_Color.a *= circle;\n\n\to_EntityID = v_EntityID;\n}\n"
  },
  {
    "path": "Hazelnut/assets/shaders/Renderer2D_Line.glsl",
    "content": "//--------------------------\n// - Hazel 2D -\n// Renderer2D Line Shader\n// --------------------------\n\n#type vertex\n#version 450 core\n\nlayout(location = 0) in vec3 a_Position;\nlayout(location = 1) in vec4 a_Color;\nlayout(location = 2) in int a_EntityID;\n\nlayout(std140, binding = 0) uniform Camera\n{\n\tmat4 u_ViewProjection;\n};\n\nstruct VertexOutput\n{\n\tvec4 Color;\n};\n\nlayout (location = 0) out VertexOutput Output;\nlayout (location = 1) out flat int v_EntityID;\n\nvoid main()\n{\n\tOutput.Color = a_Color;\n\tv_EntityID = a_EntityID;\n\n\tgl_Position = u_ViewProjection * vec4(a_Position, 1.0);\n}\n\n#type fragment\n#version 450 core\n\nlayout(location = 0) out vec4 o_Color;\nlayout(location = 1) out int o_EntityID;\n\nstruct VertexOutput\n{\n\tvec4 Color;\n};\n\nlayout (location = 0) in VertexOutput Input;\nlayout (location = 1) in flat int v_EntityID;\n\nvoid main()\n{\n\to_Color = Input.Color;\n\to_EntityID = v_EntityID;\n}\n"
  },
  {
    "path": "Hazelnut/assets/shaders/Renderer2D_Quad.glsl",
    "content": "// Basic Texture Shader\n\n#type vertex\n#version 450 core\n\nlayout(location = 0) in vec3 a_Position;\nlayout(location = 1) in vec4 a_Color;\nlayout(location = 2) in vec2 a_TexCoord;\nlayout(location = 3) in float a_TexIndex;\nlayout(location = 4) in float a_TilingFactor;\nlayout(location = 5) in int a_EntityID;\n\nlayout(std140, binding = 0) uniform Camera\n{\n\tmat4 u_ViewProjection;\n};\n\nstruct VertexOutput\n{\n\tvec4 Color;\n\tvec2 TexCoord;\n\tfloat TilingFactor;\n};\n\nlayout (location = 0) out VertexOutput Output;\nlayout (location = 3) out flat float v_TexIndex;\nlayout (location = 4) out flat int v_EntityID;\n\nvoid main()\n{\n\tOutput.Color = a_Color;\n\tOutput.TexCoord = a_TexCoord;\n\tOutput.TilingFactor = a_TilingFactor;\n\tv_TexIndex = a_TexIndex;\n\tv_EntityID = a_EntityID;\n\n\tgl_Position = u_ViewProjection * vec4(a_Position, 1.0);\n}\n\n#type fragment\n#version 450 core\n\nlayout(location = 0) out vec4 o_Color;\nlayout(location = 1) out int o_EntityID;\n\nstruct VertexOutput\n{\n\tvec4 Color;\n\tvec2 TexCoord;\n\tfloat TilingFactor;\n};\n\nlayout (location = 0) in VertexOutput Input;\nlayout (location = 3) in flat float v_TexIndex;\nlayout (location = 4) in flat int v_EntityID;\n\nlayout (binding = 0) uniform sampler2D u_Textures[32];\n\nvoid main()\n{\n\tvec4 texColor = Input.Color;\n\n\tswitch(int(v_TexIndex))\n\t{\n\t\tcase  0: texColor *= texture(u_Textures[ 0], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  1: texColor *= texture(u_Textures[ 1], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  2: texColor *= texture(u_Textures[ 2], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  3: texColor *= texture(u_Textures[ 3], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  4: texColor *= texture(u_Textures[ 4], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  5: texColor *= texture(u_Textures[ 5], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  6: texColor *= texture(u_Textures[ 6], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  7: texColor *= texture(u_Textures[ 7], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  8: texColor *= texture(u_Textures[ 8], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  9: texColor *= texture(u_Textures[ 9], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 10: texColor *= texture(u_Textures[10], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 11: texColor *= texture(u_Textures[11], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 12: texColor *= texture(u_Textures[12], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 13: texColor *= texture(u_Textures[13], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 14: texColor *= texture(u_Textures[14], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 15: texColor *= texture(u_Textures[15], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 16: texColor *= texture(u_Textures[16], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 17: texColor *= texture(u_Textures[17], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 18: texColor *= texture(u_Textures[18], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 19: texColor *= texture(u_Textures[19], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 20: texColor *= texture(u_Textures[20], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 21: texColor *= texture(u_Textures[21], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 22: texColor *= texture(u_Textures[22], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 23: texColor *= texture(u_Textures[23], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 24: texColor *= texture(u_Textures[24], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 25: texColor *= texture(u_Textures[25], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 26: texColor *= texture(u_Textures[26], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 27: texColor *= texture(u_Textures[27], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 28: texColor *= texture(u_Textures[28], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 29: texColor *= texture(u_Textures[29], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 30: texColor *= texture(u_Textures[30], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 31: texColor *= texture(u_Textures[31], Input.TexCoord * Input.TilingFactor); break;\n\t}\n\n\tif (texColor.a == 0.0)\n\t\tdiscard;\n\n\to_Color = texColor;\n\to_EntityID = v_EntityID;\n}\n"
  },
  {
    "path": "Hazelnut/assets/shaders/Renderer2D_Text.glsl",
    "content": "// MSDF text shader\n\n#type vertex\n#version 450 core\n\nlayout(location = 0) in vec3 a_Position;\nlayout(location = 1) in vec4 a_Color;\nlayout(location = 2) in vec2 a_TexCoord;\nlayout(location = 3) in int a_EntityID;\n\nlayout(std140, binding = 0) uniform Camera\n{\n\tmat4 u_ViewProjection;\n};\n\nstruct VertexOutput\n{\n\tvec4 Color;\n\tvec2 TexCoord;\n};\n\nlayout (location = 0) out VertexOutput Output;\nlayout (location = 2) out flat int v_EntityID;\n\nvoid main()\n{\n\tOutput.Color = a_Color;\n\tOutput.TexCoord = a_TexCoord;\n\tv_EntityID = a_EntityID;\n\n\tgl_Position = u_ViewProjection * vec4(a_Position, 1.0);\n}\n\n#type fragment\n#version 450 core\n\nlayout(location = 0) out vec4 o_Color;\nlayout(location = 1) out int o_EntityID;\n\nstruct VertexOutput\n{\n\tvec4 Color;\n\tvec2 TexCoord;\n};\n\nlayout (location = 0) in VertexOutput Input;\nlayout (location = 2) in flat int v_EntityID;\n\nlayout (binding = 0) uniform sampler2D u_FontAtlas;\n\nfloat screenPxRange() {\n\tconst float pxRange = 2.0; // set to distance field's pixel range\n    vec2 unitRange = vec2(pxRange)/vec2(textureSize(u_FontAtlas, 0));\n    vec2 screenTexSize = vec2(1.0)/fwidth(Input.TexCoord);\n    return max(0.5*dot(unitRange, screenTexSize), 1.0);\n}\n\nfloat median(float r, float g, float b) {\n    return max(min(r, g), min(max(r, g), b));\n}\n\nvoid main()\n{\n\tvec4 texColor = Input.Color * texture(u_FontAtlas, Input.TexCoord);\n\n\tvec3 msd = texture(u_FontAtlas, Input.TexCoord).rgb;\n    float sd = median(msd.r, msd.g, msd.b);\n    float screenPxDistance = screenPxRange()*(sd - 0.5);\n    float opacity = clamp(screenPxDistance + 0.5, 0.0, 1.0);\n\tif (opacity == 0.0)\n\t\tdiscard;\n\n\tvec4 bgColor = vec4(0.0);\n    o_Color = mix(bgColor, Input.Color, opacity);\n\tif (o_Color.a == 0.0)\n\t\tdiscard;\n\t\n\to_EntityID = v_EntityID;\n}\n"
  },
  {
    "path": "Hazelnut/imgui.ini",
    "content": "[Window][DockSpace Demo]\nPos=0,0\nSize=1600,900\nCollapsed=0\n\n[Window][Debug##Default]\nViewportPos=1180,1184\nViewportId=0x9F5F46A1\nSize=400,400\nCollapsed=0\n\n[Window][Settings]\nPos=1264,465\nSize=336,435\nCollapsed=0\nDockId=0x00000004,0\n\n[Window][Viewport]\nPos=372,69\nSize=890,614\nCollapsed=0\nDockId=0x0000000C,0\n\n[Window][Scene Hierarchy]\nPos=0,24\nSize=370,435\nCollapsed=0\nDockId=0x00000005,0\n\n[Window][Dear ImGui Demo]\nViewportPos=336,212\nViewportId=0xE927CF2F\nSize=1421,1027\nCollapsed=0\n\n[Window][Properties]\nPos=0,461\nSize=370,439\nCollapsed=0\nDockId=0x00000006,0\n\n[Window][Stats]\nPos=1264,24\nSize=336,439\nCollapsed=0\nDockId=0x00000003,0\n\n[Window][Content Browser]\nPos=372,685\nSize=890,215\nCollapsed=0\nDockId=0x0000000A,0\n\n[Window][##toolbar]\nPos=372,24\nSize=890,43\nCollapsed=0\nDockId=0x0000000B,0\n\n[Docking][Data]\nDockSpace         ID=0x3BC79352 Window=0x4647B76E Pos=307,336 Size=1600,876 Split=X Selected=0x995B0CF8\n  DockNode        ID=0x00000008 Parent=0x3BC79352 SizeRef=1262,876 Split=X\n    DockNode      ID=0x00000001 Parent=0x00000008 SizeRef=370,696 Split=Y Selected=0xC89E3217\n      DockNode    ID=0x00000005 Parent=0x00000001 SizeRef=370,435 Selected=0x9A68760C\n      DockNode    ID=0x00000006 Parent=0x00000001 SizeRef=370,439 Selected=0xC89E3217\n    DockNode      ID=0x00000002 Parent=0x00000008 SizeRef=890,696 Split=Y\n      DockNode    ID=0x00000009 Parent=0x00000002 SizeRef=856,659 Split=Y Selected=0x995B0CF8\n        DockNode  ID=0x0000000B Parent=0x00000009 SizeRef=856,43 HiddenTabBar=1 Selected=0x28257B55\n        DockNode  ID=0x0000000C Parent=0x00000009 SizeRef=856,725 CentralNode=1 HiddenTabBar=1 Selected=0x995B0CF8\n      DockNode    ID=0x0000000A Parent=0x00000002 SizeRef=856,215 Selected=0x371352B7\n  DockNode        ID=0x00000007 Parent=0x3BC79352 SizeRef=336,876 Split=Y Selected=0x968648AE\n    DockNode      ID=0x00000003 Parent=0x00000007 SizeRef=336,439 Selected=0x968648AE\n    DockNode      ID=0x00000004 Parent=0x00000007 SizeRef=336,435 Selected=0x1C33C293\n\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/MSBuild/Microsoft.Build.CommonTypes.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema targetNamespace=\"http://schemas.microsoft.com/developer/msbuild/2003\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msb=\"http://schemas.microsoft.com/developer/msbuild/2003\"\nelementFormDefault=\"qualified\">\n\n    <!-- =================== INCLUDE COMMON SCHEMA =========================== -->\n    <xs:include schemaLocation=\"Microsoft.Build.Core.xsd\"/>\n\n    <!-- ======================== ITEMS =====================================-->\n    <!-- Possible Types include SimpleItemType (no meta-data subelements), GenericItemType (any meta-data), or something more specific.-->\n    <xs:element name=\"Reference\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Reference to an assembly</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"HintPath\">\n                                <xs:annotation>\n                                    <xs:documentation>Relative or absolute path to the assembly (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Name\">\n                                <xs:annotation>\n                                    <xs:documentation>Friendly display name (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"FusionName\">\n                                <xs:annotation>\n                                    <xs:documentation>Fusion name of the assembly (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"SpecificVersion\">\n                                <xs:annotation>\n                                    <xs:documentation>Whether only the version in the fusion name should be referenced (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Aliases\">\n                                <xs:annotation>\n                                    <xs:documentation>Aliases for the reference (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Private\">\n                                <xs:annotation>\n                                    <xs:documentation>Whether the reference should be copied to the output folder (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Assembly name or filename</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"COMReference\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Reference to a COM component</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"Name\">\n                                <xs:annotation>\n                                    <xs:documentation>Friendly display name (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Guid\">\n                                <xs:annotation>\n                                    <xs:documentation>GUID in the form {00000000-0000-0000-0000-000000000000}</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"VersionMajor\">\n                                <xs:annotation>\n                                    <xs:documentation>Major part of the version number</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"VersionMinor\">\n                                <xs:annotation>\n                                    <xs:documentation>Minor part of the version number</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Lcid\">\n                                <xs:annotation>\n                                    <xs:documentation>Locale ID</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"WrapperTool\">\n                                <xs:annotation>\n                                    <xs:documentation>Wrapper tool, such as tlbimp</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Isolated\">\n                                <xs:annotation>\n                                    <xs:documentation>Is it isolated (boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>COM component name</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"COMFileReference\" substitutionGroup=\"msb:Item\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"WrapperTool\"/>\n                        </xs:choice>\n                    </xs:sequence>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"NativeReference\" substitutionGroup=\"msb:Item\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"Name\"/>\n                            <xs:element name=\"HintPath\"/>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Path to native reference</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ProjectReference\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Reference to another project</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"Name\">\n                                <xs:annotation>\n                                    <xs:documentation>Friendly display name (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Project\">\n                                <xs:annotation>\n                                    <xs:documentation>Project GUID, in the form {00000000-0000-0000-0000-000000000000}</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Package\"/>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Path to project file</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Compile\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Source files for compiler</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"SubType\"/>\n                            <xs:element name=\"DependentUpon\"/>\n                            <xs:element name=\"AutoGen\">\n                                <xs:annotation>\n                                    <xs:documentation>Whether file was generated from another file (boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"DesignTime\"/>\n                            <xs:element name=\"Link\">\n                                <xs:annotation>\n                                    <xs:documentation>Notional path within project to display if the file is physically located outside of the project file's cone (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"DesignTimeSharedInput\"/>\n                            <xs:element name=\"InProject\">\n                                <xs:annotation>\n                                    <xs:documentation>Display in user interface (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Semi-colon separated list of source files (wildcards are allowed)</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"EmbeddedResource\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Resources to be embedded in the generated assembly</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"DependentUpon\"/>\n                            <xs:element name=\"Generator\">\n                                <xs:annotation>\n                                    <xs:documentation>Name of any file generator that is run on this item</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"LastGenOutput\">\n                                <xs:annotation>\n                                    <xs:documentation>File that was created by any file generator that was run on this item</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"CustomToolNamespace\">\n                                <xs:annotation>\n                                    <xs:documentation>Namespace into which any file generator that is run on this item should create code</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Link\">\n                                <xs:annotation>\n                                    <xs:documentation>Notional path within project to display if the file is physically located outside of the project file's cone (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"InProject\">\n                                <xs:annotation>\n                                    <xs:documentation>Display in user interface (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"SubType\"/>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Semi-colon separated list of resource files (wildcards are allowed)</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Content\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Files that are not compiled, but may be embedded or published</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"DependentUpon\"/>\n                            <xs:element name=\"Generator\">\n                                <xs:annotation>\n                                    <xs:documentation>Name of any file generator that is run on this item</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"LastGenOutput\"/>\n                            <xs:element name=\"CustomToolNamespace\"/>\n                            <xs:element name=\"Link\">\n                                <xs:annotation>\n                                    <xs:documentation>Notional path within project to display if the file is physically located outside of the project file's cone (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Group\"/>\n                            <xs:element name=\"PublishState\">\n                            <xs:annotation>\n                                <xs:documentation>Default, Included, Excluded, DataFile, or Prerequisite</xs:documentation>\n                            </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"IsAssembly\"/>\n                            <xs:element name=\"InProject\">\n                                <xs:annotation>\n                                    <xs:documentation>Display in user interface (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"SubType\"/>\n                            <xs:element name=\"CopyToOutputDirectory\">\n                                <xs:annotation>\n                                    <xs:documentation>Copy file to output directory (optional, boolean, default false)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                        </xs:choice>\n                    </xs:sequence>\n                    <!-- redefine Include just to give a specific description -->\n                    <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Semi-colon separated list of content files (wildcards are allowed)</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"None\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Files that should have no role in the build process</xs:documentation>\n        </xs:annotation>\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <!-- UNDONE. Remove all but Link when #318721 is fixed-->\n                            <xs:element name=\"DependentUpon\"/>\n                            <xs:element name=\"Generator\">\n                                <xs:annotation>\n                                    <xs:documentation>Name of any file generator that is run on this item</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"LastGenOutput\"/>\n                            <xs:element name=\"CustomToolNamespace\"/>\n                            <xs:element name=\"Link\">\n                                <xs:annotation>\n                                    <xs:documentation>Notional path within project to display if the file is physically located outside of the project file's cone (optional)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"InProject\">\n                                <xs:annotation>\n                                    <xs:documentation>Display in user interface (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                        </xs:choice>\n                    </xs:sequence>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Folder\" type=\"msb:SimpleItemType\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Folder on disk</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"Import\" type=\"msb:SimpleItemType\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Assemblies whose namespaces should be imported by the Visual Basic compiler</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"Service\" type=\"msb:SimpleItemType\" substitutionGroup=\"msb:Item\"/>\n    <xs:element name=\"WebReferences\" type=\"msb:SimpleItemType\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Name of Web References folder to display in user interface</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"WebReferenceUrl\" substitutionGroup=\"msb:Item\">\n        <xs:annotation>\n            <xs:documentation>Represents a reference to a web service</xs:documentation>\n        </xs:annotation>\n            <xs:complexType>\n                <xs:complexContent>\n                    <xs:extension base=\"msb:SimpleItemType\">\n                        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                            <xs:choice>\n                                <xs:element name=\"UrlBehavior\"/>\n                                <xs:element name=\"RelPath\"/>\n                                <xs:element name=\"UpdateFromURL\"/>\n                                <xs:element name=\"ServiceLocationURL\"/>\n                                <xs:element name=\"CachedDynamicPropName\"/>\n                                <xs:element name=\"CachedAppSettingsObjectName\"/>\n                                <xs:element name=\"CachedSettingsPropName\"/>\n                            </xs:choice>\n                        </xs:sequence>\n                        <!-- redefine Include just to give a specific description -->\n                        <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n                            <xs:annotation>\n                                <xs:documentation>URL to web service</xs:documentation>\n                            </xs:annotation>\n                        </xs:attribute>\n                    </xs:extension>\n                </xs:complexContent>\n            </xs:complexType>\n    </xs:element>\n    <xs:element name=\"BootstrapperFile\" substitutionGroup=\"msb:Item\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"InProject\">\n                                <xs:annotation>\n                                    <xs:documentation>Display in user interface (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"ProductName\"/>\n                            <xs:element name=\"Install\"/>\n                        </xs:choice>\n                    </xs:sequence>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"PublishFile\" substitutionGroup=\"msb:Item\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                        <xs:choice>\n                            <xs:element name=\"InProject\">\n                                <xs:annotation>\n                                    <xs:documentation>Display in user interface (optional, boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"Group\"/>\n                            <xs:element name=\"IsAssembly\">\n                                <xs:annotation>\n                                    <xs:documentation>(boolean)</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                            <xs:element name=\"PublishState\">\n                                <xs:annotation>\n                                    <xs:documentation>Default, Included, Excluded, DataFile, or Prerequisite</xs:documentation>\n                                </xs:annotation>\n                            </xs:element>\n                        </xs:choice>\n                    </xs:sequence>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <!-- ======================== PROPERTIES =====================================-->\n    <!-- Possible Types include StringPropertyType (text with no subelements), GenericPropertyType (any content), or something more specific.-->\n    <xs:element name=\"AllowUnsafeBlocks\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ApplicationIcon\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ApplicationRevision\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>integer</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"ApplicationVersion\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Matches the expression \"\\d\\.\\d\\.\\d\\.(\\d|\\*)\"</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"AppDesignerFolder\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Name of folder for Application Designer</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"AssemblyKeyContainerName\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"AssemblyKeyProviderName\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"AssemblyName\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Name of output assembly</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"AssemblyOriginatorKeyFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"AssemblyOriginatorKeyFileType\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"AssemblyOriginatorKeyMode\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"AssemblyType\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"AutorunEnabled\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"BaseAddress\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"BootstrapperComponentsLocation\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>HomeSite, Relative, or Absolute</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"BootstrapperComponentsUrl\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"BootstrapperEnabled\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"CheckForOverflowUnderflow\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"CodePage\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"Configuration\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ConfigurationOverrideFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"CreateWebPageOnPublish\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"DebugSecurityZoneURL\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DebugSymbols\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Whether to emit symbols (boolean)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"DebugType\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>none, pdbonly, or full</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"DefaultClientScript\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DefaultHTMLPageLayout\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DefaultTargetSchema\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DefineConstants\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DefineDebug\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Whether DEBUG is defined (boolean)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"DefineTrace\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Whether TRACE is defined (boolean)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"DelaySign\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DisableLangXtns\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DisallowUrlActiviation\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"DeployDirSuffix\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"DocumentationFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"EnableASPDebugging\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"EnableASPXDebugging\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"EnableSQLServerDebugging\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"EnableSecurityDebugging\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"EnableUnmanagedDebugging\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ErrorReport\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ExcludedPermissions\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FallbackCulture\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FileAlignment\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FileUpgradeFlags\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FormFactorID\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FxCopLogFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FxCopProjectFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"FxCopRules\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"GenerateManifests\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"GenerateSerializationAssemblies\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"Install\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"InstallFrom\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Web, Unc, or Disk</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"InstallUrl\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"IsWebBootstrapper\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"JCPA\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"LangVersion\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ManifestCertificateThumbprint\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ManifestKeyFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"MapFileExtensions\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"MinimumRequiredVersion\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Matches the expression \"\\d\\.\\d\\.\\d\\.\\d\"</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"MyType\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"NoConfig\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"NoStandardLibraries\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"NoStdLib\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Whether standard libraries (such as mscorlib) should be referenced automatically (boolean)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"NoWarn\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Comma separated list of disabled warnings</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"OpenBrowserOnPublish\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"Optimize\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Should compiler optimize output (boolean)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"OptionCompare\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Option Compare setting (Text or Binary)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"OptionExplicit\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Should Option Explicit be set (On or Off)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"OptionStrict\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Should Option Strict be set (On or Off)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"OSVersion\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"OutputPath\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Path to output folder, with trailing slash</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"OutputType\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Type of output to generate (WinExe, Exe, or Library)</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"Platform\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"PlatformFamilyName\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"PlatformID\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"PlatformTarget\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"PostBuildEvent\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Command line to be run at the end of build</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"PreBuildEvent\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Command line to be run at the start of build</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"ProductName\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ProductVersion\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ProjectGuid\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ProjectType\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ProjectTypeGuids\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"PublisherName\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"PublishUrl\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RecursePath\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ReferencePath\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Semi-colon separated list of folders to search during reference resolution</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"RegisterForComInterop\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RemoteDebugEnabled\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RemoteDebugMachine\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RemoveIntegerChecks\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"ResponseFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RootNamespace\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RunFxCop\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"RunPostBuildEvent\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"SchemaVersion\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"SecureScoping\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"SignAssembly\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"SignManifests\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartAction\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartArguments\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartPage\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartProgram\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartURL\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartWithIE\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartWorkingDirectory\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"StartupObject\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Type that contains the main entry point</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"SupportUrl\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"TargetCulture\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"TargetZone\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"TreatWarningsAsErrors\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"TrustUrlParameters\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"TypeComplianceDiagnostics\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"UpdateEnabled\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"UpdateInterval\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"UpdateIntervalUnits\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Hours, Days, or Weeks</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"UpdateMode\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Foreground or Background</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"UpdatePeriodically\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"UpdateRequired\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>boolean</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"UpdateUrl\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"UTF8OutPut\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"UseVSHostingProcess\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"VSTO_TrustAssembliesLocation\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"WarningLevel\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>integer between 0 and 4 inclusive</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"WarningsAsErrors\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\">\n        <xs:annotation>\n            <xs:documentation>Comma separated list of warning numbers to treat as errors</xs:documentation>\n        </xs:annotation>\n    </xs:element>\n    <xs:element name=\"WebPage\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <xs:element name=\"Win32ResourceFile\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>\n    <!-- ======================== TASKS =====================================-->\n    <xs:element name=\"AL\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"OutputAssembly\" use=\"required\" />\n                    <xs:attribute name=\"AlgorithmId\" />\n                    <xs:attribute name=\"BaseAddress\" />\n                    <xs:attribute name=\"CompanyName\" />\n                    <xs:attribute name=\"Configuration\" />\n                    <xs:attribute name=\"Copyright\" />\n                    <xs:attribute name=\"Culture\" />\n                    <xs:attribute name=\"DelaySign\" />\n                    <xs:attribute name=\"Description\" />\n                    <xs:attribute name=\"EmbedResources\" />\n                    <xs:attribute name=\"EvidenceFile\" />\n                    <xs:attribute name=\"FileVersion\" />\n                    <xs:attribute name=\"Flags\" />\n                    <xs:attribute name=\"GenerateFullPaths\" />\n                    <xs:attribute name=\"KeyContainer\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"LinkResources\" />\n                    <xs:attribute name=\"MainEntryPoint\" />\n                    <xs:attribute name=\"Platform\" />\n                    <xs:attribute name=\"ProductName\" />\n                    <xs:attribute name=\"ProductVersion\" />\n                    <xs:attribute name=\"ResponseFiles\" />\n                    <xs:attribute name=\"SourceModules\" />\n                    <xs:attribute name=\"TargetType\" />\n                    <xs:attribute name=\"TemplateFile\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"Title\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"Trademark\" />\n                    <xs:attribute name=\"Version\" />\n                    <xs:attribute name=\"Win32Icon\" />\n                    <xs:attribute name=\"Win32Resource\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"AspNetCompiler\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Clean\" />\n                    <xs:attribute name=\"Debug\" />\n                    <xs:attribute name=\"Force\" />\n                    <xs:attribute name=\"MetabasePath\" />\n                    <xs:attribute name=\"PhysicalPath\" />\n                    <xs:attribute name=\"TargetPath\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"Updateable\" />\n                    <xs:attribute name=\"VirtualPath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"AssignCulture\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Files\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"AssignTargetPath\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"RootFolder\" use=\"required\" />\n                    <xs:attribute name=\"Files\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Copy\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"DestinationFiles\" />\n                    <xs:attribute name=\"DestinationFolder\" />\n                    <xs:attribute name=\"SkipUnchangedFiles\" />\n                    <xs:attribute name=\"SourceFiles\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"CreateCSharpManifestResourceName\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"ResourceFiles\" use=\"required\" />\n                    <xs:attribute name=\"RootNamespace\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"CreateItem\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AdditionalMetadata\" />\n                    <xs:attribute name=\"Exclude\" />\n                    <xs:attribute name=\"Include\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"CreateJSharpManifestResourceName\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"ResourceFiles\" use=\"required\" />\n                    <xs:attribute name=\"RootNamespace\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"CreateProperty\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Value\" />\n                    <xs:attribute name=\"ValueSetByTask\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"CreateVisualBasicManifestResourceName\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"ResourceFiles\" use=\"required\" />\n                    <xs:attribute name=\"RootNamespace\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Csc\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AdditionalLibPaths\" />\n                    <xs:attribute name=\"AddModules\" />\n                    <xs:attribute name=\"AllowUnsafeBlocks\" />\n                    <xs:attribute name=\"BaseAddress\" />\n                    <xs:attribute name=\"CheckForOverflowUnderflow\" />\n                    <xs:attribute name=\"CodePage\" />\n                    <xs:attribute name=\"DebugType\" />\n                    <xs:attribute name=\"DefineConstants\" />\n                    <xs:attribute name=\"DelaySign\" />\n                    <xs:attribute name=\"DisabledWarnings\" />\n                    <xs:attribute name=\"DocumentationFile\" />\n                    <xs:attribute name=\"EmitDebugInformation\" />\n                    <xs:attribute name=\"ErrorReport\" />\n                    <xs:attribute name=\"FileAlignment\" />\n                    <xs:attribute name=\"GenerateFullPaths\" />\n                    <xs:attribute name=\"KeyContainer\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"LangVersion\" />\n                    <xs:attribute name=\"LinkResources\" />\n                    <xs:attribute name=\"MainEntryPoint\" />\n                    <xs:attribute name=\"NoConfig\" />\n                    <xs:attribute name=\"NoLogo\" />\n                    <xs:attribute name=\"NoStandardLib\" />\n                    <xs:attribute name=\"Optimize\" />\n                    <xs:attribute name=\"OutputAssembly\" />\n                    <xs:attribute name=\"Platform\" />\n                    <xs:attribute name=\"References\" />\n                    <xs:attribute name=\"Resources\" />\n                    <xs:attribute name=\"ResponseFiles\" />\n                    <xs:attribute name=\"Sources\" />\n                    <xs:attribute name=\"TargetType\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"TreatWarningsAsErrors\" />\n                    <xs:attribute name=\"UseHostCompilerIfAvailable\" />\n                    <xs:attribute name=\"Utf8Output\" />\n                    <xs:attribute name=\"WarningLevel\" />\n                    <xs:attribute name=\"WarningsAsErrors\" />\n                    <xs:attribute name=\"WarningsNotAsErrors\" />\n                    <xs:attribute name=\"Win32Icon\" />\n                    <xs:attribute name=\"Win32Resource\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Delete\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Files\" use=\"required\" />\n                    <xs:attribute name=\"DeletedFiles\" />\n                    <xs:attribute name=\"TreatErrorsAsWarnings\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Error\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Text\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Exec\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Command\" use=\"required\" />\n                    <xs:attribute name=\"IgnoreExitCode\" />\n                    <xs:attribute name=\"Outputs\" />\n                    <xs:attribute name=\"StandardErrorEncoding\" />\n                    <xs:attribute name=\"StandardOutputEncoding\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"WorkingDirectory\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"FindUnderPath\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Path\" use=\"required\" />\n                    <xs:attribute name=\"Files\" />\n                    <xs:attribute name=\"InPath\" />\n                    <xs:attribute name=\"OutOfPath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"FormatUrl\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"InputUrl\" />\n                    <xs:attribute name=\"OutputUrl\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"FormatVersion\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"FormatType\" />\n                    <xs:attribute name=\"OutputVersion\" />\n                    <xs:attribute name=\"Revision\" />\n                    <xs:attribute name=\"Version\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"FxCop\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"ApplyLogFileXsl\" />\n                    <xs:attribute name=\"Assemblies\" />\n                    <xs:attribute name=\"ConsoleXsl\" />\n                    <xs:attribute name=\"DependentAssemblyPaths\" />\n                    <xs:attribute name=\"Imports\" />\n                    <xs:attribute name=\"LogFile\" />\n                    <xs:attribute name=\"LogFileXsl\" />\n                    <xs:attribute name=\"OutputToConsole\" />\n                    <xs:attribute name=\"PlatformPath\" />\n                    <xs:attribute name=\"Project\" />\n                    <xs:attribute name=\"RuleAssemblies\" />\n                    <xs:attribute name=\"Rules\" />\n                    <xs:attribute name=\"Summary\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"UpdateProjectFile\" />\n                    <xs:attribute name=\"Verbose\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GenerateApplicationManifest\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AssemblyName\" />\n                    <xs:attribute name=\"AssemblyVersion\" />\n                    <xs:attribute name=\"ClrVersion\" />\n                    <xs:attribute name=\"ConfigFile\" />\n                    <xs:attribute name=\"Dependencies\" />\n                    <xs:attribute name=\"Description\" />\n                    <xs:attribute name=\"EntryPoint\" />\n                    <xs:attribute name=\"Files\" />\n                    <xs:attribute name=\"IconFile\" />\n                    <xs:attribute name=\"InputManifest\" />\n                    <xs:attribute name=\"IsolatedComReferences\" />\n                    <xs:attribute name=\"ManifestType\" />\n                    <xs:attribute name=\"MaxTargetPath\" />\n                    <xs:attribute name=\"OSVersion\" />\n                    <xs:attribute name=\"OutputManifest\" />\n                    <xs:attribute name=\"Platform\" />\n                    <xs:attribute name=\"TargetCulture\" />\n                    <xs:attribute name=\"TrustInfoFile\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GenerateBootstrapper\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"ApplicationFile\" />\n                    <xs:attribute name=\"ApplicationName\" />\n                    <xs:attribute name=\"ApplicationUrl\" />\n                    <xs:attribute name=\"BootstrapperComponentFiles\" />\n                    <xs:attribute name=\"BootstrapperItems\" />\n                    <xs:attribute name=\"BootstrapperKeyFile\" />\n                    <xs:attribute name=\"ComponentsLocation\" />\n                    <xs:attribute name=\"ComponentsUrl\" />\n                    <xs:attribute name=\"CopyComponents\" />\n                    <xs:attribute name=\"Culture\" />\n                    <xs:attribute name=\"FallbackCulture\" />\n                    <xs:attribute name=\"OutputPath\" />\n                    <xs:attribute name=\"Path\" />\n                    <xs:attribute name=\"SupportUrl\" />\n                    <xs:attribute name=\"Validate\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GenerateDeploymentManifest\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AssemblyName\" />\n                    <xs:attribute name=\"AssemblyVersion\" />\n                    <xs:attribute name=\"DeploymentUrl\" />\n                    <xs:attribute name=\"Description\" />\n                    <xs:attribute name=\"DisallowUrlActivation\" />\n                    <xs:attribute name=\"EntryPoint\" />\n                    <xs:attribute name=\"InputManifest\" />\n                    <xs:attribute name=\"Install\" />\n                    <xs:attribute name=\"MaxTargetPath\" />\n                    <xs:attribute name=\"MapFileExtensions\" />\n                    <xs:attribute name=\"MinimumRequiredVersion\" />\n                    <xs:attribute name=\"OutputManifest\" />\n                    <xs:attribute name=\"Platform\" />\n                    <xs:attribute name=\"Product\" />\n                    <xs:attribute name=\"Publisher\" />\n                    <xs:attribute name=\"SupportUrl\" />\n                    <xs:attribute name=\"TargetCulture\" />\n                    <xs:attribute name=\"TrustUrlParameters\" />\n                    <xs:attribute name=\"UpdateEnabled\" />\n                    <xs:attribute name=\"UpdateInterval\" />\n                    <xs:attribute name=\"UpdateMode\" />\n                    <xs:attribute name=\"UpdateUnit\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GenerateResource\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Sources\" use=\"required\" />\n                    <xs:attribute name=\"FilesWritten\" />\n                    <xs:attribute name=\"NeverLockTypeAssemblies\" />\n                    <xs:attribute name=\"OutputResources\" />\n\t            <xs:attribute name=\"References\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"UseSourcePath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GetAssemblyIdentity\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AssemblyFiles\" use=\"required\" />\n                    <xs:attribute name=\"Assemblies\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GetFrameworkPath\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Path\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GetFrameworkSdkPath\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Path\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GetLinkedFilesFromResX\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Sources\" use=\"required\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"UseSourcePath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"LC\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"LicenseTarget\" use=\"required\" />\n                    <xs:attribute name=\"Sources\" use=\"required\" />\n                    <xs:attribute name=\"NoLogo\" />\n                    <xs:attribute name=\"OutputDirectory\" />\n                    <xs:attribute name=\"OutputLicense\" />\n                    <xs:attribute name=\"ReferencedAssemblies\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"MakeDir\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Directories\" use=\"required\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Message\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Importance\" />\n                    <xs:attribute name=\"Text\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"MSBuild\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Projects\" use=\"required\" />\n                    <xs:attribute name=\"RebaseOutputs\" />\n                    <xs:attribute name=\"StopOnFirstFailure\" />\n                    <xs:attribute name=\"RunEachTargetSeparately\" />\n                    <xs:attribute name=\"Targets\" />\n                    <xs:attribute name=\"Properties\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ReadLinesFromFile\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"File\" use=\"required\" />\n                    <xs:attribute name=\"Lines\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"RegisterAssembly\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Assemblies\" use=\"required\" />\n                    <xs:attribute name=\"CreateCodeBase\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"TypeLibFiles\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"RemoveDir\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Directories\" use=\"required\" />\n                    <xs:attribute name=\"RemovedDirectories\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"RemoveDuplicates\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Filtered\" />\n                    <xs:attribute name=\"Inputs\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResGen\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Sources\" use=\"required\" />\n                    <xs:attribute name=\"FilesWritten\" />\n                    <xs:attribute name=\"OutputResources\" />\n                    <xs:attribute name=\"References\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"UseSourcePath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResolveAssemblyReference\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"SearchPaths\" use=\"required\" />\n                    <xs:attribute name=\"AppConfigFile\" />\n                    <xs:attribute name=\"Assemblies\" />\n                    <xs:attribute name=\"AssemblyFiles\" />\n                    <xs:attribute name=\"AutoUnify\" />\n                    <xs:attribute name=\"CandidateAssemblyFiles\" />\n                    <xs:attribute name=\"FilesWritten\" />\n                    <xs:attribute name=\"FindDependencies\" />\n                    <xs:attribute name=\"FindRelatedFiles\" />\n                    <xs:attribute name=\"FindSatellites\" />\n                    <xs:attribute name=\"InstalledAssemblyTables\" />\n                    <xs:attribute name=\"Silent\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"TargetFrameworkDirectory\" />\n                    <xs:attribute name=\"TargetProcessorArchitecture\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResolveComReference\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"DelaySign\" />\n                    <xs:attribute name=\"KeyContainer\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"NoClassMembers\" />\n                    <xs:attribute name=\"ResolvedAssemblyReferences\" />\n                    <xs:attribute name=\"ResolvedFiles\" />\n                    <xs:attribute name=\"ResolvedModules\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"TypeLibFiles\" />\n                    <xs:attribute name=\"TypeLibNames\" />\n                    <xs:attribute name=\"WrapperOutputDirectory\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResolveKeySource\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AutoClosePasswordPromptShow\" />\n                    <xs:attribute name=\"AutoClosePasswordPromptTimeout\" />\n                    <xs:attribute name=\"CertificateFile\" />\n                    <xs:attribute name=\"CertificateThumbprint\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"ResolvedKeyContainer\" />\n                    <xs:attribute name=\"ResolvedKeyFile\" />\n                    <xs:attribute name=\"ResolvedThumbprint\" />\n                    <xs:attribute name=\"SuppressAutoClosePasswordPrompt\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"GenerateTrustInfo\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"BaseManifest\" />\n                    <xs:attribute name=\"ExcludedPermissions\" />\n                    <xs:attribute name=\"TargetZone\" use=\"required\" />\n                    <xs:attribute name=\"TrustInfoFile\" use=\"required\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResolveManifestFiles\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"EntryPoint\" />\n                    <xs:attribute name=\"TrustInfoFile\" />\n                    <xs:attribute name=\"Dependencies\" /> <!-- obsolete -->\n                    <xs:attribute name=\"ExtraFiles\" />\n                    <xs:attribute name=\"Files\" />\n                    <xs:attribute name=\"ManagedAssemblies\" />\n                    <xs:attribute name=\"NativeAssemblies\" />\n                    <xs:attribute name=\"OutputAssemblies\" />\n                    <xs:attribute name=\"OutputDependencies\" /> <!-- obsolete -->\n                    <xs:attribute name=\"OutputFiles\" />\n                    <xs:attribute name=\"OutputPrerequisites\" /> <!-- obsolete -->\n                    <xs:attribute name=\"OutputSatellites\" /> <!-- obsolete -->\n                    <xs:attribute name=\"PublishFiles\" />\n                    <xs:attribute name=\"Satellites\" /> <!-- obsolete -->\n                    <xs:attribute name=\"SatelliteAssemblies\" />\n                    <xs:attribute name=\"TargetCulture\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResolveNativeReference\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"NativeReferences\" use=\"required\" />\n                    <xs:attribute name=\"ContainedComComponents\" />\n                    <xs:attribute name=\"ContainedLooseEtcFiles\" />\n                    <xs:attribute name=\"ContainedLooseTlbFiles\" />\n                    <xs:attribute name=\"ContainedNetAssemblies\" />\n                    <xs:attribute name=\"ContainedTypeLibraries\" />\n                    <xs:attribute name=\"ContainingReferenceFiles\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"ResolveVCProjectOutput\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"ProjectReferences\" use=\"required\" />\n                    <xs:attribute name=\"Configuration\" />\n                    <xs:attribute name=\"PreresolvedVCOutputs\" />\n                    <xs:attribute name=\"ResolvedOutputPaths\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"SGen\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"BuildAssemblyName\" use=\"required\" />\n                    <xs:attribute name=\"BuildAssemblyPath\" use=\"required\" />\n                    <xs:attribute name=\"ShouldGenerateSerializer\" use=\"required\" />\n                    <xs:attribute name=\"DelaySign\" />\n                    <xs:attribute name=\"KeyContainer\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"References\" />\n                    <xs:attribute name=\"SerializationAssembly\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"SignFile\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"CertificateThumbprint\" use=\"required\" />\n                    <xs:attribute name=\"SigningTarget\" use=\"required\" />\n                    <xs:attribute name=\"TimestampUrl\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Touch\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Files\" use=\"required\" />\n                    <xs:attribute name=\"AlwaysCreate\" />\n                    <xs:attribute name=\"ForceTouch\" />\n                    <xs:attribute name=\"Time\" />\n                    <xs:attribute name=\"TouchedFiles\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"UnregisterAssembly\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Assemblies\" />\n                    <xs:attribute name=\"StateFile\" />\n                    <xs:attribute name=\"TypeLibFiles\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"UpdateManifest\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"InputManifest\" use=\"required\" />\n                    <xs:attribute name=\"ApplicationManifest\" />\n                    <xs:attribute name=\"ApplicationPath\" />\n                    <xs:attribute name=\"OutputManifest\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Vbc\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AdditionalLibPaths\" />\n                    <xs:attribute name=\"AddModules\" />\n                    <xs:attribute name=\"BaseAddress\" />\n                    <xs:attribute name=\"CodePage\" />\n                    <xs:attribute name=\"DebugType\" />\n                    <xs:attribute name=\"DefineConstants\" />\n                    <xs:attribute name=\"DelaySign\" />\n                    <xs:attribute name=\"DisabledWarnings\" />\n                    <xs:attribute name=\"DocumentationFile\" />\n                    <xs:attribute name=\"EmitDebugInformation\" />\n                    <xs:attribute name=\"ErrorReport\" />\n                    <xs:attribute name=\"FileAlignment\" />\n                    <xs:attribute name=\"GenerateDocumentation\" />\n                    <xs:attribute name=\"Imports\" />\n                    <xs:attribute name=\"KeyContainer\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"LinkResources\" />\n                    <xs:attribute name=\"MainEntryPoint\" />\n                    <xs:attribute name=\"NoConfig\" />\n                    <xs:attribute name=\"NoLogo\" />\n                    <xs:attribute name=\"NoStandardLib\" />\n                    <xs:attribute name=\"NoWarnings\" />\n                    <xs:attribute name=\"Optimize\" />\n                    <xs:attribute name=\"OptionCompare\" />\n                    <xs:attribute name=\"OptionExplicit\" />\n                    <xs:attribute name=\"OptionStrict\" />\n                    <xs:attribute name=\"OutputAssembly\" />\n                    <xs:attribute name=\"Platform\" />\n                    <xs:attribute name=\"References\" />\n                    <xs:attribute name=\"RemoveIntegerChecks\" />\n                    <xs:attribute name=\"Resources\" />\n                    <xs:attribute name=\"ResponseFiles\" />\n                    <xs:attribute name=\"RootNamespace\" />\n                    <xs:attribute name=\"SdkPath\" />\n                    <xs:attribute name=\"Sources\" />\n                    <xs:attribute name=\"TargetCompactFramework\" />\n                    <xs:attribute name=\"TargetType\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"TreatWarningsAsErrors\" />\n                    <xs:attribute name=\"UseHostCompilerIfAvailable\" />\n                    <xs:attribute name=\"Utf8Output\" />\n                    <xs:attribute name=\"Verbosity\" />\n                    <xs:attribute name=\"WarningsAsErrors\" />\n                    <xs:attribute name=\"WarningsNotAsErrors\" />\n                    <xs:attribute name=\"Win32Icon\" />\n                    <xs:attribute name=\"Win32Resource\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"VCBuild\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Projects\" use=\"required\" />\n                    <xs:attribute name=\"Clean\" />\n                    <xs:attribute name=\"Configuration\" />\n                    <xs:attribute name=\"Override\" />\n                    <xs:attribute name=\"Rebuild\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Vjc\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"AdditionalLibPaths\" />\n                    <xs:attribute name=\"AddModules\" />\n                    <xs:attribute name=\"BaseAddress\" />\n                    <xs:attribute name=\"CodePage\" />\n                    <xs:attribute name=\"DebugType\" />\n                    <xs:attribute name=\"DefineConstants\" />\n                    <xs:attribute name=\"DelaySign\" />\n                    <xs:attribute name=\"DisabledWarnings\" />\n                    <xs:attribute name=\"DisableExtensions\" />\n                    <xs:attribute name=\"DocumentationFile\" />\n                    <xs:attribute name=\"EmitDebugInformation\" />\n                    <xs:attribute name=\"FileAlignment\" />\n                    <xs:attribute name=\"Jcpa\" />\n                    <xs:attribute name=\"KeyContainer\" />\n                    <xs:attribute name=\"KeyFile\" />\n                    <xs:attribute name=\"LinkResources\" />\n                    <xs:attribute name=\"MainEntryPoint\" />\n                    <xs:attribute name=\"NoConfig\" />\n                    <xs:attribute name=\"NoLogo\" />\n                    <xs:attribute name=\"Optimize\" />\n                    <xs:attribute name=\"OutputAssembly\" />\n                    <xs:attribute name=\"References\" />\n                    <xs:attribute name=\"Resources\" />\n                    <xs:attribute name=\"ResponseFiles\" />\n                    <xs:attribute name=\"SecureScoping\" />\n                    <xs:attribute name=\"Sources\" />\n                    <xs:attribute name=\"TargetType\" />\n                    <xs:attribute name=\"Timeout\" />\n                    <xs:attribute name=\"ToolPath\" />\n                    <xs:attribute name=\"TreatWarningsAsErrors\" />\n                    <xs:attribute name=\"Utf8Output\" />\n                    <xs:attribute name=\"WarningLevel\" />\n                    <xs:attribute name=\"Win32Icon\" />\n                    <xs:attribute name=\"Win32Resource\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"VjsResGen\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Sources\" use=\"required\" />\n                    <xs:attribute name=\"OutputResx\" />\n                    <xs:attribute name=\"WildCards\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"Warning\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"Text\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n    <xs:element name=\"WriteLinesToFile\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"File\" use=\"required\" />\n                    <xs:attribute name=\"Lines\" />\n                    <xs:attribute name=\"Overwrite\" />\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/MSBuild/Microsoft.Build.Core.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xs:schema targetNamespace=\"http://schemas.microsoft.com/developer/msbuild/2003\" xmlns:msb=\"http://schemas.microsoft.com/developer/msbuild/2003\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\">\n    <!-- ======================================================================================= -->\n    <xs:element name=\"Project\">\n        <xs:complexType>\n            <xs:sequence>\n                <xs:group ref=\"msb:ProjectLevelTagExceptTargetOrImportType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n                <!-- must be at least one Target or Import tag-->\n                <xs:group ref=\"msb:TargetOrImportType\"/>\n                <xs:group ref=\"msb:ProjectLevelTagType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n            </xs:sequence>\n            <xs:attribute name=\"DefaultTargets\" type=\"xs:string\" use=\"optional\">\n                <xs:annotation>\n                    <xs:documentation>Optional semi-colon separated list of one or more targets that will be built if no targets are otherwise specified</xs:documentation>\n                </xs:annotation>\n            </xs:attribute>\n        </xs:complexType>\n    </xs:element>\n    <!-- ======================================================================================= -->\n    <xs:group name=\"ProjectLevelTagExceptTargetOrImportType\">\n        <xs:choice>\n            <xs:element name=\"PropertyGroup\" type=\"msb:PropertyGroupType\"/>\n            <xs:element name=\"ItemGroup\" type=\"msb:ItemGroupType\"/>\n            <xs:element name=\"Choose\" type=\"msb:ChooseType\"/>\n            <xs:element name=\"Error\" type=\"msb:WarningErrorOutsideTargetType\">\n                <xs:annotation>\n                    <xs:documentation>Logs an Error event</xs:documentation>\n                </xs:annotation>\n            </xs:element>\n            <xs:element name=\"Warning\" type=\"msb:WarningErrorOutsideTargetType\">\n                <xs:annotation>\n                    <xs:documentation>Logs a Warning event</xs:documentation>\n                </xs:annotation>\n            </xs:element>\n            <xs:element name=\"Message\" type=\"msb:MessageOutsideTargetType\"/>\n            <xs:element name=\"UsingTask\" type=\"msb:UsingTaskType\"/>\n            <xs:element name=\"ProjectExtensions\" type=\"msb:ProjectExtensionsType\"/>\n        </xs:choice>\n    </xs:group>\n    <!-- ======================================================================================= -->\n    <xs:group name=\"ProjectLevelTagType\">\n        <xs:choice>\n            <xs:element name=\"PropertyGroup\" type=\"msb:PropertyGroupType\"/>\n            <xs:element name=\"ItemGroup\" type=\"msb:ItemGroupType\"/>\n            <xs:element name=\"Choose\" type=\"msb:ChooseType\"/>\n            <xs:element name=\"Error\" type=\"msb:WarningErrorOutsideTargetType\">\n                <xs:annotation>\n                    <xs:documentation>Logs an Error event</xs:documentation>\n                </xs:annotation>\n            </xs:element>\n            <xs:element name=\"Warning\" type=\"msb:WarningErrorOutsideTargetType\">\n                <xs:annotation>\n                    <xs:documentation>Logs a Warning event</xs:documentation>\n                </xs:annotation>\n            </xs:element>\n            <xs:element name=\"Message\" type=\"msb:MessageOutsideTargetType\"/>\n            <xs:element name=\"UsingTask\" type=\"msb:UsingTaskType\"/>\n            <xs:element name=\"Target\" type=\"msb:TargetType\"/>\n            <xs:element name=\"Import\" type=\"msb:ImportType\"/>\n            <xs:element name=\"ProjectExtensions\" type=\"msb:ProjectExtensionsType\"/>\n        </xs:choice>\n    </xs:group>\n    <!-- ======================================================================================= -->\n    <xs:group name=\"TargetOrImportType\">\n        <xs:choice>\n            <xs:element name=\"Target\" type=\"msb:TargetType\"/>\n            <xs:element name=\"Import\" type=\"msb:ImportType\"/>\n        </xs:choice>\n    </xs:group>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"TargetType\">\n        <xs:annotation>\n            <xs:documentation>Groups tasks into a section of the build process</xs:documentation>\n        </xs:annotation>\n        <xs:sequence>\n            <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n                <xs:element ref=\"msb:Task\"/>\n            </xs:choice>\n            <xs:element name=\"OnError\" type=\"msb:OnErrorType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n            <!-- no elements are allowed under Target after an OnError element-->\n        </xs:sequence>\n        <xs:attribute name=\"Name\" type=\"msb:non_empty_string\" use=\"required\">\n            <xs:annotation>\n                <xs:documentation>Name of the target</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"DependsOnTargets\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional semi-colon separated list of targets that should be run before this target</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Inputs\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional semi-colon separated list of files that form inputs into this target. Their timestamps will be compared with the timestamps of files in Outputs to determine whether the Target is up to date</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Outputs\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional semi-colon separated list of files that form outputs into this target. Their timestamps will be compared with the timestamps of files in Inputs to determine whether the Target is up to date</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the Target and the targets it depends on should be run</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"PropertyGroupType\">\n        <xs:annotation>\n            <xs:documentation>Groups property definitions</xs:documentation>\n        </xs:annotation>\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:element ref=\"msb:Property\"/>\n        </xs:sequence>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the PropertyGroup should be used</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"ItemGroupType\">\n        <xs:annotation>\n            <xs:documentation>Groups item list definitions</xs:documentation>\n        </xs:annotation>\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:element ref=\"msb:Item\"/>\n        </xs:sequence>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the ItemGroup should be used</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"ChooseType\">\n        <xs:annotation>\n            <xs:documentation>Groups When and Otherwise elements</xs:documentation>\n        </xs:annotation>\n        <xs:sequence>\n            <xs:element name=\"When\" type=\"msb:WhenType\" maxOccurs=\"unbounded\"/>\n            <xs:element name=\"Otherwise\" type=\"msb:OtherwiseType\" minOccurs=\"0\"/>\n        </xs:sequence>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"WhenType\">\n        <xs:annotation>\n            <xs:documentation>Groups PropertyGroup and/or ItemGroup elements</xs:documentation>\n        </xs:annotation>\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:choice>\n                <xs:element name=\"PropertyGroup\" type=\"msb:PropertyGroupType\"/>\n                <xs:element name=\"ItemGroup\" type=\"msb:ItemGroupType\"/>\n                <xs:element name=\"Choose\" type=\"msb:ChooseType\"/>\n            </xs:choice>\n        </xs:sequence>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"required\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the child PropertyGroups and/or ItemGroups should be used</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"OtherwiseType\">\n        <xs:annotation>\n            <xs:documentation>Groups PropertyGroup and/or ItemGroup elements that are used if no Conditions on sibling When elements evaluate to true</xs:documentation>\n        </xs:annotation>\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:choice>\n                <xs:element name=\"PropertyGroup\" type=\"msb:PropertyGroupType\"/>\n                <xs:element name=\"ItemGroup\" type=\"msb:ItemGroupType\"/>\n                <xs:element name=\"Choose\" type=\"msb:ChooseType\"/>\n            </xs:choice>\n        </xs:sequence>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"OnErrorType\">\n        <xs:annotation>\n            <xs:documentation>Specifies targets to execute in the event of a recoverable error</xs:documentation>\n        </xs:annotation>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the targets should be executed</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ExecuteTargets\" type=\"msb:non_empty_string\" use=\"required\">\n            <xs:annotation>\n                <xs:documentation>Semi-colon separated list of targets to execute</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"MessageOutsideTargetType\">\n        <xs:annotation>\n            <xs:documentation>Logs an informational Message event, with an optional Importance</xs:documentation>\n        </xs:annotation>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the Message should be logged</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Importance\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional priority level. Allowed values are Low, Normal (default), and High</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Text\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Text to log</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"WarningErrorOutsideTargetType\">\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the text should be logged</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Text\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Text to log</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"UsingTaskType\">\n        <xs:annotation>\n            <xs:documentation>Declares where to load a task that will be used in the project</xs:documentation>\n        </xs:annotation>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the declaration should be evaluated</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"AssemblyName\" type=\"msb:non_empty_string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional name of assembly containing the task. Either AssemblyName or AssemblyFile must be used</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"AssemblyFile\" type=\"msb:non_empty_string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional path to assembly containing the task. Either AssemblyName or AssemblyFile must be used</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"TaskName\" type=\"msb:non_empty_string\" use=\"required\">\n            <xs:annotation>\n                <xs:documentation>Name of task class in the assembly</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"ImportType\">\n        <xs:annotation>\n            <xs:documentation>Declares that the contents of another project file should be inserted at this location</xs:documentation>\n        </xs:annotation>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the import should occur</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Project\" type=\"msb:non_empty_string\" use=\"required\">\n            <xs:annotation>\n                <xs:documentation>Project file to import</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"ProjectExtensionsType\" mixed=\"true\">\n        <xs:annotation>\n            <xs:documentation>Optional section used by MSBuild hosts, that may contain arbitrary XML content that is ignored by MSBuild itself</xs:documentation>\n        </xs:annotation>\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:any processContents=\"skip\"/>\n        </xs:sequence>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:element name=\"Item\" type=\"msb:SimpleItemType\" abstract=\"true\"/>\n    <!-- ======================================================================================= -->\n    <!-- convenience type for items that have no meta-data-->\n    <xs:complexType name=\"SimpleItemType\">\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the items should be evaluated</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Include\" type=\"xs:string\" use=\"required\">\n            <xs:annotation>\n                <xs:documentation>Semi-colon separated list of files (wildcards are allowed) or other item names to include in this item list</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"Exclude\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Semi-colon separated list of files (wildcards are allowed) or other item names to exclude from the Include list</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <!-- general utility type allowing an item type to be defined but not its child meta-data-->\n    <xs:complexType name=\"GenericItemType\">\n        <xs:complexContent>\n            <xs:extension base=\"msb:SimpleItemType\">\n                <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n                    <xs:any namespace=\"##any\" processContents=\"skip\"/>\n                </xs:sequence>\n            </xs:extension>\n        </xs:complexContent>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <!-- no type declared on this abstract element, so either a simple or complex type can be substituted for it.-->\n    <xs:element name=\"Property\" abstract=\"true\"/>\n    <!-- ======================================================================================= -->\n    <!-- convenience type for properties that just want to allow text and no elements in them-->\n    <xs:complexType name=\"StringPropertyType\">\n        <xs:simpleContent>\n            <xs:extension base=\"xs:string\">\n                <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n                    <xs:annotation>\n                        <xs:documentation>Optional expression evaluated to determine whether the property should be evaluated</xs:documentation>\n                    </xs:annotation>\n                </xs:attribute>\n            </xs:extension>\n        </xs:simpleContent>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <!-- general utility type allowing text and/or elements inside-->\n    <xs:complexType name=\"GenericPropertyType\" mixed=\"true\">\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:any namespace=\"##any\" processContents=\"skip\"/>\n        </xs:sequence>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the property should be evaluated</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <xs:element name=\"Task\" type=\"msb:TaskType\" abstract=\"true\"/>\n    <!-- ======================================================================================= -->\n    <xs:complexType name=\"TaskType\">\n        <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xs:element name=\"Output\">\n                <xs:annotation>\n                    <xs:documentation>Optional element specifying a specific task output to be gathered</xs:documentation>\n                </xs:annotation>\n                <xs:complexType>\n                    <xs:attribute name=\"TaskParameter\" type=\"msb:non_empty_string\" use=\"required\">\n                        <xs:annotation>\n                            <xs:documentation>Task parameter to gather. Matches the name of a .NET Property on the task class that has an [Output] attribute</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                    <xs:attribute name=\"ItemName\" type=\"msb:non_empty_string\" use=\"optional\">\n                        <xs:annotation>\n                            <xs:documentation>Optional name of an item list to put the gathered outputs into. Either ItemName or PropertyName must be specified</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                    <xs:attribute name=\"PropertyName\" type=\"msb:non_empty_string\" use=\"optional\">\n                        <xs:annotation>\n                            <xs:documentation>Optional name of a property to put the gathered output into. Either PropertyName or ItemName must be specified</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                    <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n                        <xs:annotation>\n                            <xs:documentation>Optional expression evaluated to determine whether the output should be gathered</xs:documentation>\n                        </xs:annotation>\n                    </xs:attribute>\n                </xs:complexType>\n            </xs:element>\n        </xs:sequence>\n        <xs:attribute name=\"Condition\" type=\"xs:string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional expression evaluated to determine whether the task should be executed</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ContinueOnError\" type=\"msb:non_empty_string\" use=\"optional\">\n            <xs:annotation>\n                <xs:documentation>Optional boolean indicating whether a recoverable task error should be ignored. Default false</xs:documentation>\n            </xs:annotation>\n        </xs:attribute>\n        <!-- We don't need the anyAttribute here because other types deriving from this type will add the right attributes.-->\n    </xs:complexType>\n    <!-- ======================================================================================= -->\n    <!-- XSD considers an empty-valued attribute to satisfy use=\"required\", but we want it to have a non-empty value in most cases, hence this utility type. -->\n    <xs:simpleType name=\"non_empty_string\">\n        <xs:restriction base=\"xs:string\">\n            <xs:minLength value=\"1\"/>\n        </xs:restriction>\n    </xs:simpleType>\n</xs:schema>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/Microsoft.Build.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema targetNamespace=\"http://schemas.microsoft.com/developer/msbuild/2003\"\nxmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\nxmlns:msb=\"http://schemas.microsoft.com/developer/msbuild/2003\"\nelementFormDefault=\"qualified\">\n\n    <!-- =================== IMPORT COMMON SCHEMA =========================== -->\n    <xs:include schemaLocation=\"MSBuild/Microsoft.Build.CommonTypes.xsd\"/>\n\n    <!-- ========= ADD CUSTOM ITEMS, PROPERTIES, AND TASKS BELOW ======= -->\n    <!-- Note that these will be in the msbuild namespace. A future version of\n        msbuild may require that custom itemtypes, properties, and tasks be in a\n        custom namespace, but currently msbuild only supports the msbuild namespace. -->\n\n    <!-- example custom itemtype with particular meta-data required-->\n    <!--<xs:element name=\"MyItem\" substitutionGroup=\"msb:Item\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:SimpleItemType\">\n                    <xs:sequence maxOccurs=\"1\">\n                        <xs:choice>\n                            <xs:element name=\"MyMetaData\" type=\"xs:string\"/>\n                        </xs:choice>\n                    </xs:sequence>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>-->\n\n    <!-- Example custom itemtype with NO meta-data -->\n    <!--<xs:element name=\"MySimpleItem\" type=\"msb:SimpleItemType\" substitutionGroup=\"msb:Item\"/>-->\n\n    <!-- Example custom itemtype with ANY meta-data -->\n    <!--<xs:element name=\"MyFlexibleItem\" type=\"msb:GenericItemType\" substitutionGroup=\"msb:Item\"/>-->\n\n    <!-- example custom property that allows string content only-->\n    <!--<xs:element name=\"MySimpleProperty\" type=\"msb:StringPropertyType\" substitutionGroup=\"msb:Property\"/>-->\n\n    <!-- example custom task with single required parameter-->\n    <!--<xs:element name=\"MyTask\" substitutionGroup=\"msb:Task\">\n        <xs:complexType>\n            <xs:complexContent>\n                <xs:extension base=\"msb:TaskType\">\n                    <xs:attribute name=\"MyParameter\" type=\"xs:boolean\" use=\"required\"/>\n                </xs:extension>\n            </xs:complexContent>\n        </xs:complexType>\n    </xs:element>-->\n\n</xs:schema>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/Microsoft.CSharp.targets",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\t<PropertyGroup>\n\t\t<DefaultLanguageSourceExtension>.cs</DefaultLanguageSourceExtension>\n\t\t<Language>C#</Language>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<DebugSymbols Condition=\" '$(DebugType)' == 'none' \">false</DebugSymbols>\n\t\t<DebugType    Condition=\" '$(DebugType)' == 'none' \"></DebugType>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<CreateManifestResourceNamesDependsOn></CreateManifestResourceNamesDependsOn>\n\t\t<CoreCompileDependsOn></CoreCompileDependsOn>\n\n\t\t<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildToolsPath)\\Microsoft.CSharp.targets</MSBuildAllProjects>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<NoCompilerStandardLib Condition=\"'$(NoCompilerStandardLib)'==''\">true</NoCompilerStandardLib>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<DocFileItem Include=\"$(DocumentationFile)\" Condition=\"'$(DocumentationFile)' != ''\"/>\n\t</ItemGroup>\n\n\t<Target Name=\"_AddCorlibReference\" DependsOnTargets=\"GetReferenceAssemblyPaths\">\n\t\t<!--\n\t\tHACK: We don't yet support property functions, so can't calculate FrameworkPathOverride\n\t\tby calling ToolLocationHelper.GetPathToStandardLibraries. Instead, we search the framework\n\t\tdirectories for mscorlib.dll by constructing a filtered item set, and assume it only has\n\t\tone item.\n\t\t-->\n\t\t<ItemGroup Condition=\"'$(MonoUseMicrosoftBuildDll)' != 'True'\">\n\t\t\t<_ExplicitReference Include=\"@(_TargetFrameworkDirectories->'%(FullPath)\\mscorlib.dll')\" Condition=\"Exists('%(FullPath)\\mscorlib.dll')\">\n\t\t\t\t<Private>false</Private>\n\t\t\t</_ExplicitReference>\n\t\t</ItemGroup>\n\t\t<PropertyGroup Condition=\"'$(MonoUseMicrosoftBuildDll)' == 'True'\">\n\t\t\t<_ExplicitMSCorlibPath>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries ('$(TargetFrameworkIdentifier)', '$(TargetFrameworkVersion)', '$(TargetFrameworkProfile)'))\\mscorlib.dll</_ExplicitMSCorlibPath>\n\t\t</PropertyGroup>\n\t\t<ItemGroup Condition=\"'$(MonoUseMicrosoftBuildDll)' == 'True'\">\n\t\t\t<_ExplicitReference Include=\"@(_TargetFrameworkDirectories->'%(FullPath)\\mscorlib.dll')\" Condition=\"Exists('%(FullPath)\\mscorlib.dll')\">\n\t\t\t\t<Private>false</Private>\n\t\t\t</_ExplicitReference>\n\t\t</ItemGroup>\n\t\t<ItemGroup Condition=\"'$(MonoUseMicrosoftBuildDll)' == 'True'\">\n\t\t\t<_ExplicitReference Include=\"$(_ExplicitMSCorlibPath)\" Condition=\"Exists('$(_ExplicitMSCorlibPath)')\">\n\t\t\t\t<Private>false</Private>\n\t\t\t</_ExplicitReference>\n\t\t</ItemGroup>\n\t</Target>\n\n\t<Target\n\t\tName=\"CoreCompile\"\n\t\tInputs=\"$(MSBuildAllProjects);@(Compile);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);\n\t\t\t$(KeyOriginatorFile);@(ReferencePath);$(ApplicationIcon);$(Win32Resource)\"\n\t\tOutputs=\"@(DocFileItem);@(IntermediateAssembly)\"\n\t\tDependsOnTargets=\"$(CoreCompileDependsOn)\"\n\t>\n\t\t<Csc\n\t\t\tAdditionalLibPaths=\"$(AdditionalLibPaths)\"\n\t\t\tAddModules=\"@(AddModules)\"\n\t\t\tAllowUnsafeBlocks=\"$(AllowUnsafeBlocks)\"\n\t\t\tBaseAddress=\"$(BaseAddress)\"\n\t\t\tCheckForOverflowUnderflow=\"$(CheckForOverflowUnderflow)\"\n\t\t\tCodePage=\"$(CodePage)\"\n\t\t\tDebugType=\"$(DebugType)\"\n\t\t\tDefineConstants=\"$(DefineConstants)\"\n\t\t\tDelaySign=\"$(DelaySign)\"\n\t\t\tDisabledWarnings=\"$(NoWarn)\"\n\t\t\tDocumentationFile=\"@(DocFileItem)\"\n\t\t\tEmitDebugInformation=\"$(DebugSymbols)\"\n\t\t\tErrorReport=\"$(ErrorReport)\"\n\t\t\tFileAlignment=\"$(FileAlignment)\"\n\t\t\tGenerateFullPaths=\"$(GenerateFullPaths)\"\n\t\t\tKeyContainer=\"$(KeyContainerName)\"\n\t\t\tKeyFile=\"$(KeyOriginatorFile)\"\n\t\t\tLangVersion=\"$(LangVersion)\"\n\t\t\tMainEntryPoint=\"$(StartupObject)\"\n\t\t\tModuleAssemblyName=\"$(ModuleAssemblyName)\"\n\t\t\tNoConfig=\"true\"\n\t\t\tNoLogo=\"$(NoLogo)\"\n\t\t\tNoStandardLib=\"$(NoCompilerStandardLib)\"\n\t\t\tOptimize=\"$(Optimize)\"\n\t\t\tOutputAssembly=\"@(IntermediateAssembly)\"\n\t\t\tPdbFile=\"$(PdbFile)\"\n\t\t\tPlatform=\"$(PlatformTarget)\"\n\t\t\tReferences=\"@(ReferencePath)\"\n\t\t\tResponseFiles=\"$(CompilerResponseFile)\"\n\t\t\tSources=\"@(Compile)\"\n\t\t\tTargetType=\"$(OutputType)\"\n\t\t\tTreatWarningsAsErrors=\"$(TreatWarningsAsErrors)\"\n\t\t\tUseHostCompilerIfAvailable=\"$(UseHostCompilerIfAvailable)\"\n\t\t\tUtf8Output=\"$(Utf8Output)\"\n\t\t\tWarningLevel=\"$(WarningLevel)\"\n\t\t\tWarningsAsErrors=\"$(WarningsAsErrors)\"\n\t\t\tWarningsNotAsErrors=\"$(WarningsNotAsErrors)\"\n\t\t\tWin32Icon=\"$(ApplicationIcon)\"\n\t\t\tWin32Resource=\"$(Win32Resource)\"\n\t\t\tResources=\"@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile)\"\n\t\t\tToolExe=\"$(CscToolExe)\"\n\t\t\tToolPath=\"$(CscToolPath)\" />\n\n\t</Target>\n\n\t<Target Name=\"CreateManifestResourceNames\">\n\t\t<CreateCSharpManifestResourceName Condition=\"'@(ResxWithNoCulture)' != ''\"\n\t\t\tResourceFiles=\"@(ResxWithNoCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestResourceWithNoCultureName\" />\n\t\t</CreateCSharpManifestResourceName>\n\n\t\t<CreateCSharpManifestResourceName Condition=\"'@(NonResxWithNoCulture)' != ''\"\n\t\t\tResourceFiles=\"@(NonResxWithNoCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestNonResxWithNoCulture\" />\n\t\t</CreateCSharpManifestResourceName>\n\n\t\t<CreateCSharpManifestResourceName Condition=\"'@(ResxWithCulture)' != ''\"\n\t\t\tResourceFiles=\"@(ResxWithCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestResourceWithCultureName\" />\n\t\t</CreateCSharpManifestResourceName>\n\n\t\t<CreateCSharpManifestResourceName Condition=\"'@(NonResxWithCulture)' != ''\"\n\t\t\tResourceFiles=\"@(NonResxWithCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestNonResxWithCulture\" />\n\t\t</CreateCSharpManifestResourceName>\n\t</Target>\n\n\t<Import Project=\"Microsoft.Common.targets\" />\n\n\t<PropertyGroup Condition=\"'$(NoCompilerStandardLib)'=='true' and '$(NoStdLib)'!='true'\">\n\t\t<ResolveAssemblyReferencesDependsOn>$(ResolveAssemblyReferencesDependsOn);_AddCorlibReference</ResolveAssemblyReferencesDependsOn>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<TargetFrameworkMonikerAssemblyAttributeText Condition=\"'$(TargetFrameworkMoniker)' != '' and '$(TargetingClr2Framework)' != 'true'\">\n// &lt;autogenerated /&gt;\n[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)]\n\t\t</TargetFrameworkMonikerAssemblyAttributeText>\n\t</PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/Microsoft.Common.targets",
    "content": "<Project DefaultTargets=\"Build\" InitialTargets=\"_CheckForInvalidConfigurationAndPlatform\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\t<PropertyGroup>\n\t\t<ImportByWildcardBeforeMicrosoftCommonTargets Condition=\"'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == ''\">true</ImportByWildcardBeforeMicrosoftCommonTargets>\n\t\t<ImportByWildcardAfterMicrosoftCommonTargets Condition=\"'$(ImportByWildcardAfterMicrosoftCommonTargets)' == ''\">true</ImportByWildcardAfterMicrosoftCommonTargets>\n\t</PropertyGroup>\n\n\t<Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\$(MSBuildThisFile)\\ImportBefore\\*\"\n\t\tCondition=\"'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\$(MSBuildThisFile)\\ImportBefore')\"/>\n\n\t<Import Project=\"$(MSBuildProjectFullPath).user\" Condition=\"Exists('$(MSBuildProjectFullPath).user')\"/>\n\n\t<PropertyGroup>\n\t\t<OutputType Condition=\"'$(OutputType)' == ''\">Exe</OutputType>\n\t\t<TargetExt Condition=\"'$(OutputType)' == 'Winexe'\">.exe</TargetExt>\n\t\t<TargetExt Condition=\"'$(OutputType)' == 'Exe'\">.exe</TargetExt>\n\t\t<TargetExt Condition=\"'$(OutputType)' == 'Library'\">.dll</TargetExt>\n\t\t<TargetExt Condition=\"'$(OutputType)' == 'Netmodule'\">.netmodule</TargetExt>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<ProjectDir Condition=\"'$(ProjectDir)' == ''\">$(MSBuildProjectDirectory)\\</ProjectDir>\n\t</PropertyGroup>\n\n\t<!-- MSBuild defines this even outside of VS, and F# projects depend on it -->\n\t<PropertyGroup>\n\t\t<VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">11.0</VisualStudioVersion>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<AssemblyName Condition=\"'$(AssemblyName)' == ''\">$(MSBuildProjectName)</AssemblyName>\n\t\t<OutputPath Condition=\"'$(OutputPath)' != '' and !HasTrailingSlash('$(OutputPath)')\">$(OutputPath)\\</OutputPath>\n\t\t<OutputPath Condition=\" '$(Platform)'=='' and '$(Configuration)'=='' and '$(OutputPath)'=='' \">bin\\Debug\\</OutputPath>\n\n\t\t<TargetFrameworkIdentifier Condition=\"'$(TargetFrameworkIdentifier)' == ''\">.NETFramework</TargetFrameworkIdentifier>\n\t\t<TargetFrameworkVersion Condition=\"'$(TargetFrameworkVersion)' == ''\">v4.0</TargetFrameworkVersion>\n\n\t\t<TargetFrameworkMoniker Condition=\"'$(TargetFrameworkMoniker)' == '' and '$(TargetFrameworkProfile)' != ''\">$(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion),Profile=$(TargetFrameworkProfile)</TargetFrameworkMoniker>\n\t        <TargetFrameworkMoniker Condition=\"'$(TargetFrameworkMoniker)' == ''\">$(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion)</TargetFrameworkMoniker>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<OutDir Condition=\"'$(OutDir)' == ''\">$(OutputPath)</OutDir>\n\t\t<OutDir Condition=\"'$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')\">$(OutDir)\\</OutDir>\n\n\t\t<_OriginalConfiguration>$(Configuration)</_OriginalConfiguration>\n\t\t<Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n\t\t<ConfigurationName Condition=\"'$(ConfigurationName)' == ''\">$(Configuration)</ConfigurationName>\n\n\t\t<_OriginalPlatform>$(Platform)</_OriginalPlatform>\n\t\t<Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n\t\t<PlatformName Condition=\"'$(PlatformName)' == ''\">$(Platform)</PlatformName>\n\t</PropertyGroup>\n\n\t<!-- in MSBuild, these properties are set in a separate file that is only imported for .NETFramework -->\n\t<PropertyGroup Condition=\"'$(TargetFrameworkIdentifier)' == '.NETFramework'\">\n\t\t<AddAdditionalExplicitAssemblyReferences Condition=\"'$(AddAdditionalExplicitAssemblyReferences)' == ''\">true</AddAdditionalExplicitAssemblyReferences>\n\t\t<AdditionalExplicitAssemblyReferences Condition=\"'$(AddAdditionalExplicitAssemblyReferences)' == 'true' and '$(TargetFrameworkVersion)' != 'v2.0' and '$(TargetFrameworkVersion)' != 'v3.0'\">System.Core;$(AdditionalExplicitAssemblyReferences)</AdditionalExplicitAssemblyReferences>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<SkipCopyUnchangedFiles Condition=\"'$(SkipCopyUnchangedFiles)' == ''\">true</SkipCopyUnchangedFiles>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<BaseIntermediateOutputPath Condition=\"'$(BaseIntermediateOutputPath)' == ''\">obj\\</BaseIntermediateOutputPath>\n\t\t<BaseIntermediateOutputPath Condition=\"'$(BaseIntermediateOutputPath)' != '' and !HasTrailingSlash('$(BaseIntermediateOutputPath)')\">$(BaseIntermediateOutputPath)\\</BaseIntermediateOutputPath>\n\t\t<CleanFile Condition=\"'$(CleanFile)'==''\">$(MSBuildProjectFile).FilesWrittenAbsolute.txt</CleanFile>\n\t</PropertyGroup>\n\n\t<PropertyGroup Condition=\"'$(IntermediateOutputPath)' == ''\">\n\t\t<IntermediateOutputPath Condition=\" '$(PlatformName)' == 'AnyCPU'\">$(BaseIntermediateOutputPath)$(Configuration)\\</IntermediateOutputPath>\n\t\t<IntermediateOutputPath Condition=\" '$(PlatformName)' != 'AnyCPU'\">$(BaseIntermediateOutputPath)$(PlatformName)\\$(Configuration)\\</IntermediateOutputPath>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<IntermediateOutputPath Condition=\"'$(IntermediateOutputPath)' != '' and !HasTrailingSlash('$(IntermediateOutputPath)')\">$(IntermediateOutputPath)\\</IntermediateOutputPath>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<IntermediateAssembly Include=\"$(IntermediateOutputPath)$(AssemblyName)$(TargetExt)\" />\n\n\t\t<!-- creating this as a item to use FullPath on it, to build TargetPath -->\n\t\t<_OutDirItem Include=\"$(OutDir)\"/>\n\t</ItemGroup>\n\n\t<PropertyGroup>\n\t\t<TargetName Condition=\"'$(TargetName)' == '' \">$(AssemblyName)</TargetName>\n\t\t<TargetFileName Condition=\"'$(TargetFileName)' == '' \">$(TargetName)$(TargetExt)</TargetFileName>\n\t\t<TargetDir Condition=\" '$(TargetDir)' == '' \">@(_OutDirItem->'%(FullPath)')</TargetDir>\n\t\t<TargetPath Condition=\" '$(TargetPath)' == '' \">@(_OutDirItem->'%(FullPath)\\$(TargetFileName)')</TargetPath>\n\t\t<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildProjectFullPath);$(MSBuildToolsPath)\\Microsoft.Common.targets</MSBuildAllProjects>\n\t\t<KeyOriginatorFile Condition=\" '$(SignAssembly)' == 'true' \">$(AssemblyOriginatorKeyFile)</KeyOriginatorFile>\n\t\t<TargetingClr2Framework Condition=\"('$(TargetFrameworkIdentifier)' == '.NETFramework') and ('$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5')\">true</TargetingClr2Framework>\n\t</PropertyGroup>\n\n\t<Target Name=\"_CheckForInvalidConfigurationAndPlatform\">\n\t\t<Error Condition=\" '$(OutputPath)' == '' and '$(SkipInvalidConfigurations)' != 'true'\"\n\t\t\tText=\"'OutputPath' property is not set for this project. Usually this is caused by invalid Configuration/Platform combination. Original values: Configuration: $(_OriginalConfiguration) Platform: $(_OriginalPlatform).\"/>\n\n\t\t<Warning Condition=\" '$(OutputPath)' == '' and '$(SkipInvalidConfigurations)' == 'true'\"\n\t\t\tText=\"'OutputPath' property is not set for this project. Usually this is caused by invalid Configuration/Platform combination. Original values: Configuration: $(_OriginalConfiguration) Platform: $(_OriginalPlatform).\"/>\n\n\t\t<!-- If OutDir is specified via the command line, then the earlier check\n\t\t     to add a trailing slash won't have any affect, so error here. -->\n\t\t<Error\n\t\t\tCondition=\"'$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')\"\n\t\t\tText=\"OutDir property must end with a slash.\"/>\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<PrepareForBuildDependsOn>AssignLinkMetadata</PrepareForBuildDependsOn>\n\t</PropertyGroup>\n\t<Target Name=\"PrepareForBuild\" DependsOnTargets=\"$(PrepareForBuildDependsOn)\">\n\t\t<Message Importance=\"High\" Text=\"Configuration: $(Configuration) Platform: $(Platform)\"/>\n\n\t\t<!-- Look for app.config, if $(AppConfig) is specified, then use that. Else look in\n\t\t     @(None) and @(Content) -->\n\t\t<CreateItem Include=\"$(AppConfig)\" Condition=\"'$(AppConfig)' != ''\"\n\t\t\tAdditionalMetadata=\"TargetPath=$(TargetFileName).config\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"AppConfigWithTargetPath\" />\n\t\t</CreateItem>\n\n\t\t<FindAppConfigFile PrimaryList=\"@(None)\" SecondaryList=\"@(Content)\" TargetPath=\"$(TargetFileName).config\"\n\t\t\tCondition=\"'$(AppConfig)' == ''\">\n\t\t\t<Output TaskParameter=\"AppConfigFile\" ItemName=\"AppConfigWithTargetPath\"/>\n\t\t</FindAppConfigFile>\n\n\t\t<MakeDir\n\t\t\tDirectories=\"$(OutDir);$(IntermediateOutputPath);@(DocFileItem->'%(RelativeDir)')\"\n\t\t/>\n\t</Target>\n\n\t<Target Name=\"AssignLinkMetadata\">\n\t    <AssignLinkMetadata Items=\"@(EmbeddedResource)\" Condition=\"'@(EmbeddedResource)' != '' and '%(EmbeddedResource.DefiningProjectFullPath)' != '$(MSBuildProjectFullPath)'\">\n\t      <Output TaskParameter=\"OutputItems\" ItemName=\"_EmbeddedResourceWithLinkAssigned\" />\n\t    </AssignLinkMetadata>\n\n\t    <ItemGroup>\n\t\t\t<EmbeddedResource Remove=\"@(_EmbeddedResourceWithLinkAssigned)\" />\n\t\t\t<EmbeddedResource Include=\"@(_EmbeddedResourceWithLinkAssigned)\" />\n\t\t\t<_EmbeddedResourceWithLinkAssigned Remove=\"@(_EmbeddedResourceWithLinkAssigned)\" />\n\t    </ItemGroup>\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<GetFrameworkPathsDependsOn />\n\t</PropertyGroup>\n\t<Target Name=\"GetFrameworkPaths\"\n\t\tCondition=\"'$(TargetFrameworkIdentifier)' == '' or '$(TargetFrameworkIdentifier)' == '.NETFramework'\"\n\t\tDependsOnTargets=\"$(GetFrameworkPathsDependsOn)\">\n\t\t<GetFrameworkPath>\n\t\t\t<Output Condition=\"'$(TargetFrameworkVersion)' == 'v4.5'\"\n\t\t\t\tTaskParameter=\"FrameworkVersion45Path\"\n\t\t\t\tItemName=\"_CombinedTargetFrameworkDirectoriesItem\"/>\n\t\t\t<Output Condition=\"'$(TargetFrameworkVersion)' == 'v4.0'\"\n\t\t\t\tTaskParameter=\"FrameworkVersion40Path\"\n\t\t\t\tItemName=\"_CombinedTargetFrameworkDirectoriesItem\"/>\n\t\t\t<Output Condition=\"'$(TargetFrameworkVersion)' == 'v3.5'\"\n\t\t\t\tTaskParameter=\"FrameworkVersion35Path\"\n\t\t\t\tItemName=\"_CombinedTargetFrameworkDirectoriesItem\"/>\n\t\t\t<Output Condition=\"'$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'\"\n\t\t\t\tTaskParameter=\"FrameworkVersion30Path\"\n\t\t\t\tItemName=\"_CombinedTargetFrameworkDirectoriesItem\"/>\n\t\t\t<Output Condition=\"'$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'\"\n\t\t\t\tTaskParameter=\"FrameworkVersion20Path\"\n\t\t\t\tItemName=\"_CombinedTargetFrameworkDirectoriesItem\"/>\n\t\t</GetFrameworkPath>\n\t\t<CreateProperty Value=\"@(_CombinedTargetFrameworkDirectoriesItem)\">\n\t\t\t<Output TaskParameter=\"Value\" PropertyName=\"TargetFrameworkDirectory\"/>\n\t\t</CreateProperty>\n\n\t\t<Warning Text=\"TargetFrameworkVersion '$(TargetFrameworkVersion)' not supported by this toolset (ToolsVersion: $(MSBuildToolsVersion)).\"\n\t\t\tCondition=\"'$(TargetFrameworkVersion)' != 'v4.5' and '$(TargetFrameworkVersion)' != 'v4.0' and '$(TargetFrameworkVersion)' != 'v3.5' and '$(TargetFrameworkVersion)' != 'v3.0' and '$(TargetFrameworkVersion)' != 'v2.0'\"/>\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<GetReferenceAssemblyPathsDependsOn />\n\t</PropertyGroup>\n\t<Target Name=\"GetReferenceAssemblyPaths\" DependsOnTargets=\"$(GetReferenceAssemblyPathsDependsOn)\">\n\t\t<!-- in case of .NETFramework, $(TargetFrameworkDirectory) would have been set by\n\t\tGetFrameworkPaths, if it hasn't been changed, then clear it, to avoid duplicates -->\n\t\t<CreateProperty Value=\"\" Condition=\"'@(_CombinedTargetFrameworkDirectoriesItem)' == '$(TargetFrameworkDirectory)'\">\n\t\t\t<Output TaskParameter=\"Value\" PropertyName=\"TargetFrameworkDirectory\"/>\n\t\t</CreateProperty>\n\n\t\t<GetReferenceAssemblyPaths\n\t\t\tCondition=\"'$(TargetFrameworkMoniker)' != '' and '$(_TargetFrameworkDirectories)' == ''\"\n\t\t\tTargetFrameworkMoniker=\"$(TargetFrameworkMoniker)\"\n\t\t\tRootPath=\"$(TargetFrameworkRootPath)\">\n\n\t\t\t<Output TaskParameter=\"ReferenceAssemblyPaths\" PropertyName=\"_TargetFrameworkDirectories\"/>\n\t\t\t<Output TaskParameter=\"FullFrameworkReferenceAssemblyPaths\" PropertyName=\"_FullFrameworkReferenceAssemblyPaths\"/>\n\t\t\t<Output TaskParameter=\"TargetFrameworkMonikerDisplayName\" PropertyName=\"TargetFrameworkMonikerDisplayName\"/>\n\t\t</GetReferenceAssemblyPaths>\n\n\n\t\t<!-- Remove duplicates. -->\n\t\t<ItemGroup>\n\t\t\t<_TargetFrameworkDirectories Include=\"$(_TargetFrameworkDirectories);$(TargetFrameworkDirectory)\" KeepDuplicates=\"false\" />\n\t\t</ItemGroup>\n\t\t<PropertyGroup>\n\t\t\t<TargetFrameworkDirectory>@(_TargetFrameworkDirectories)</TargetFrameworkDirectory>\n\t\t</PropertyGroup>\n\n\t\t<ItemGroup Condition=\"'$(ImplicitlyExpandDesignTimeFacades)' == 'true'\">\n\t\t\t<DesignTimeFacadeDirectoryRoots Include=\"$(TargetFrameworkDirectory)\" />\n\t\t\t<DesignTimeFacadeDirectories Include=\"%(DesignTimeFacadeDirectoryRoots.Identity)\\Facades\\\" Condition=\"Exists('%(DesignTimeFacadeDirectoryRoots.Identity)\\Facades\\')\" />\n\t\t\t<_DesignTimeFacadeAssemblies Include=\"%(DesignTimeFacadeDirectories.Identity)\\*.dll\"/>\n\t\t</ItemGroup>\n\n\t\t<PropertyGroup Condition=\"'@(DesignTimeFacadeDirectories)' != ''\">\n\t\t\t<TargetFrameworkDirectory>$(TargetFrameworkDirectory);@(DesignTimeFacadeDirectories)</TargetFrameworkDirectory>\n\t\t</PropertyGroup>\n\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<AllowedReferenceAssemblyFileExtensions Condition=\" '$(AllowedReferenceAssemblyFileExtensions)' == '' \">\n\t\t\t.exe;\n\t\t\t.dll\n\t\t</AllowedReferenceAssemblyFileExtensions>\n\n\t\t<AllowedReferenceRelatedFileExtensions Condition=\" '$(AllowedReferenceRelatedFileExtensions)' == '' \">\n\t\t\t.exe.mdb;\n\t\t\t.dll.mdb;\n\t\t\t.pdb;\n\t\t\t.xml\n\t\t</AllowedReferenceRelatedFileExtensions>\n\n\t\t<AssemblySearchPaths Condition=\"'$(AssemblySearchPaths)' == ''\">\n\t\t\t{CandidateAssemblyFiles};\n\t\t\t$(ReferencePath);\n\t\t\t@(AdditionalReferencePath);\n\t\t\t{HintPathFromItem};\n\t\t\t{TargetFrameworkDirectory};\n\t\t\t{PkgConfig};\n\t\t\t{GAC};\n\t\t\t{RawFileName};\n\t\t\t$(OutDir)\n\t\t</AssemblySearchPaths>\n\n\t\t<ResolveReferencesDependsOn>\n\t\t\tBeforeResolveReferences;\n\t\t\tResolveProjectReferences;\n\t\t\tResolveAssemblyReferences;\n\t\t\tAfterResolveReferences\n\t\t</ResolveReferencesDependsOn>\n\n\t\t<ResolveAssemblyReferencesDependsOn>\n\t\t\tGetFrameworkPaths;\n\t\t\tGetReferenceAssemblyPaths;\n\t\t\tPrepareForBuild\n\t\t</ResolveAssemblyReferencesDependsOn>\n\t</PropertyGroup>\n\n\t<PropertyGroup Condition=\"'$(TargetFrameworkMoniker)' != ''\">\n\t\t<TargetFrameworkMonikerAssemblyAttributesPath Condition=\"'$(TargetFrameworkMonikerAssemblyAttributesPath)' == ''\">$(IntermediateOutputPath)$(TargetFrameworkMoniker).AssemblyAttribute$(DefaultLanguageSourceExtension)</TargetFrameworkMonikerAssemblyAttributesPath>\n\t\t<GenerateTargetFrameworkAttribute Condition=\"'$(GenerateTargetFrameworkAttribute)' == '' and '$(TargetFrameworkMoniker)'\n\t!= '' and '$(TargetingClr2Framework)' != 'true'\">true</GenerateTargetFrameworkAttribute>\n\t</PropertyGroup>\n\n\t<ItemGroup Condition=\"'$(GenerateTargetFrameworkAttribute)' == 'true'\">\n\t\t<FileWrites Include=\"$(TargetFrameworkMonikerAssemblyAttributesPath)\" />\n\t</ItemGroup>\n\n\t<Target Name=\"_GenerateTargetFrameworkMonikerAttribute\"\n\t\tDependsOnTargets=\"PrepareForBuild;GetReferenceAssemblyPaths\"\n\t\tInputs=\"$(MSBuildToolsPath)\\Microsoft.Common.targets\"\n\t\tOutputs=\"$(TargetFrameworkMonikerAssemblyAttributesPath)\">\n\n\t\t<WriteLinesToFile\n\t\t\tFile=\"$(TargetFrameworkMonikerAssemblyAttributesPath)\"\n\t\t\tLines=\"$(TargetFrameworkMonikerAssemblyAttributeText)\"\n\t\t\tOverwrite=\"true\"\n\t\t\tContinueOnError=\"true\"\n\t\t\tCondition=\"'@(Compile)' != '' and '$(TargetFrameworkMonikerAssemblyAttributeText)' != ''\"\n\t\t/>\n\t</Target>\n\n\t<Target Name=\"GenerateTargetFrameworkMonikerAttribute\"\n\t\tDependsOnTargets=\"_GenerateTargetFrameworkMonikerAttribute\"\n\t\tCondition=\"'$(GenerateTargetFrameworkAttribute)' == 'true'\">\n\n\t\t<ItemGroup Condition=\"'@(Compile)' != '' and '$(TargetFrameworkMonikerAssemblyAttributeText)' != ''\">\n\t\t\t<Compile Include=\"$(TargetFrameworkMonikerAssemblyAttributesPath)\"/>\n\t\t</ItemGroup>\n\t</Target>\n\n\t<Target Name=\"ResolveReferences\" DependsOnTargets=\"$(ResolveReferencesDependsOn)\"/>\n\n\t<Target Name=\"BeforeResolveReferences\" />\n\t<Target Name=\"AfterResolveReferences\" />\n\n\t<Target Name=\"ResolveAssemblyReferences\" DependsOnTargets=\"$(ResolveAssemblyReferencesDependsOn)\">\n\t\t<CreateItem Include=\"@(Reference)\" Exclude=\"$(AdditionalExplicitAssemblyReferences)\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"_Reference\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem Include=\"$(AdditionalExplicitAssemblyReferences)\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"_Reference\"/>\n\t\t</CreateItem>\n\n\t\t<ResolveAssemblyReference\n\t\t\tAssemblies=\"@(_Reference)\"\n\t\t\tAssemblyFiles=\"@(ChildProjectReferences);@(_ExplicitReference)\"\n\t\t\tSearchPaths=\"$(AssemblySearchPaths)\"\n\t\t\tCandidateAssemblyFiles=\"@(Content);@(None)\"\n\t\t\tTargetFrameworkDirectories=\"$(TargetFrameworkDirectory)\"\n\t\t\tAllowedAssemblyExtensions=\"$(AllowedReferenceAssemblyFileExtensions)\"\n\t\t\tAllowedRelatedFileExtensions=\"$(AllowedReferenceRelatedFileExtensions)\"\n\t\t\tFindDependencies=\"true\"\n\t\t\tFindSatellites=\"true\"\n\t\t\tFindRelatedFiles=\"true\"\n\t\t\tTargetFrameworkMoniker=\"$(TargetFrameworkMoniker)\"\n\t\t\tTargetFrameworkMonikerDisplayName=\"$(TargetFrameworkMonikerDisplayName)\"\n\t\t\tTargetFrameworkVersion=\"$(TargetFrameworkVersion)\"\n\t\t>\n\t\t\t<Output TaskParameter=\"ResolvedFiles\" ItemName=\"ResolvedFiles\"/>\n\t\t\t<Output TaskParameter=\"ResolvedFiles\" ItemName=\"ReferencePath\"/>\n\t\t\t<Output TaskParameter=\"ResolvedDependencyFiles\" ItemName=\"ReferenceDependencyPaths\"/>\n\t\t\t<Output TaskParameter=\"RelatedFiles\" ItemName=\"_ReferenceRelatedPaths\"/>\n\t\t\t<Output TaskParameter=\"SatelliteFiles\" ItemName=\"ReferenceSatellitePaths\"/>\n\t\t\t<Output TaskParameter=\"CopyLocalFiles\" ItemName=\"ReferenceCopyLocalPaths\"/>\n\n\t\t\t<!-- FIXME: backwards compatibility -->\n\t\t\t<Output TaskParameter=\"ResolvedDependencyFiles\" ItemName=\"_ResolvedDependencyFiles\"/>\n\t\t</ResolveAssemblyReference>\n\t</Target>\n\n\t<Target\n\t\tName=\"AssignProjectConfiguration\"\n\t\tCondition=\"'@(ProjectReference)' != ''\">\n\n\t\t<!-- assign configs if building a solution file -->\n\t\t<AssignProjectConfiguration\n\t\t\tProjectReferences = \"@(ProjectReference)\"\n\t\t\tSolutionConfigurationContents = \"$(CurrentSolutionConfigurationContents)\"\n\t\t\tCondition=\"$(CurrentSolutionConfigurationContents) != '' and ('$(BuildingSolutionFile)' == 'true' or '$(BuildingInsideVisualStudio)' == 'true')\">\n\n\t\t\t<Output TaskParameter = \"AssignedProjects\" ItemName = \"ProjectReferenceWithConfiguration\"/>\n\t\t</AssignProjectConfiguration>\n\n\t\t<!-- Else, just -->\n\t\t<CreateItem Include=\"@(ProjectReference)\" Condition=\"$(CurrentSolutionConfigurationContents) == '' or ('$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true')\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ProjectReferenceWithConfiguration\"/>\n\t\t</CreateItem>\n\n\t</Target>\n\n\t<!-- Split projects into 2 lists\n\t\tProjectReferenceWithConfigurationExistent: Projects existent on disk\n\t\tProjectReferenceWithConfigurationNonExistent: Projects non-existent on disk -->\n\n\t<Target Name=\"SplitProjectReferencesByExistent\"\n\t\tDependsOnTargets=\"AssignProjectConfiguration\">\n\n\t\t<CreateItem Include=\"@(ProjectReferenceWithConfiguration)\" Condition=\"'@(ProjectReferenceWithConfiguration)' != ''\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ProjectReferenceWithConfigurationExistent\"\n\t\t\t\tCondition=\"Exists ('%(ProjectReferenceWithConfiguration.Identity)')\"/>\n\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ProjectReferenceWithConfigurationNonExistent\"\n\t\t\t\tCondition=\"!Exists ('%(ProjectReferenceWithConfiguration.Identity)')\"/>\n\t\t</CreateItem>\n\t</Target>\n\n\t<Target\n\t\tName=\"ResolveProjectReferences\"\n\t\tDependsOnTargets=\"SplitProjectReferencesByExistent\"\n\t>\n\t\t<!-- If building from a .sln.proj or from IDE, then referenced projects have already\n\t\t     been built, so just get the target paths -->\n\t\t<MSBuild\n\t\t\tProjects=\"@(ProjectReferenceWithConfigurationExistent)\"\n\t\t\tTargets=\"GetTargetPath\"\n\t\t\tProperties=\"%(ProjectReferenceWithConfigurationExistent.SetConfiguration); %(ProjectReferenceWithConfigurationExistent.SetPlatform)\"\n\t\t\tCondition=\"'@(ProjectReferenceWithConfigurationExistent)' != '' and ('$(BuildingSolutionFile)' == 'true' or '$(BuildingInsideVisualStudio)' == 'true')\">\n\n\t\t\t<Output TaskParameter=\"TargetOutputs\" ItemName=\"ChildProjectReferences\" Condition=\"'%(ProjectReferenceWithConfigurationExistent.ReferenceOutputAssembly)' != 'false'\"/>\n\t\t</MSBuild>\n\n\t\t<!-- Building a project directly, build the referenced the projects also -->\n\t\t<MSBuild\n\t\t\tProjects=\"@(ProjectReferenceWithConfigurationExistent)\"\n\t\t\tProperties=\"%(ProjectReferenceWithConfigurationExistent.SetConfiguration); %(ProjectReferenceWithConfigurationExistent.SetPlatform)\"\n\t\t\tCondition=\"'@(ProjectReferenceWithConfigurationExistent)' != '' and '$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true' \">\n\n\t\t\t<Output TaskParameter=\"TargetOutputs\" ItemName=\"ChildProjectReferences\" Condition=\"'%(ProjectReferenceWithConfigurationExistent.ReferenceOutputAssembly)' != 'false'\"/>\n\t\t</MSBuild>\n\n\t\t<Warning Text=\"Referenced Project %(ProjectReferenceWithConfigurationNonExistent.Identity) not found, ignoring.\"\n\t\t\t Condition=\"'@(ProjectReferenceWithConfigurationNonExistent)' != ''\"/>\n\t</Target>\n\n\t<Target Name = \"CopyFilesMarkedCopyLocal\">\n\t\t<Copy\n\t\t\tSourceFiles=\"@(ReferenceCopyLocalPaths)\"\n\t\t\tDestinationFiles=\"@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\">\n\t\t\t<Output TaskParameter = \"DestinationFiles\" ItemName = \"FileWritesShareable\"/>\n\t\t</Copy>\n\t</Target>\n\n\t<Target Name=\"_ComputeNonExistentFileProperty\" Condition='false'>\n\t\t<CreateProperty Value=\"__NonExistentSubDir__\\__NonExistentFile__\">\n\t\t\t<Output TaskParameter=\"Value\" PropertyName=\"NonExistentFile\"/>\n\t\t</CreateProperty>\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<BuildDependsOn>\n\t\t\tBuildOnlySettings;\n\t\t\tBeforeBuild;\n\t\t\tCoreBuild;\n\t\t\tAfterBuild\n\t\t</BuildDependsOn>\n\t</PropertyGroup>\n\n\t<Target Name=\"BuildOnlySettings\"/>\n\t<Target Name=\"BeforeBuild\"/>\n\t<Target Name=\"AfterBuild\"/>\n\n\t<Target Name=\"Build\" DependsOnTargets=\"$(BuildDependsOn)\" Outputs=\"$(TargetPath)\"/>\n\n\t<PropertyGroup>\n\t\t<CoreBuildDependsOn>\n\t\t\tPrepareForBuild;\n\t\t\tGetFrameworkPaths;\n\t\t\tGetReferenceAssemblyPaths;\n\t\t\tPreBuildEvent;\n\t\t\tResolveReferences;\n\t\t\tCopyFilesMarkedCopyLocal;\n\t\t\tPrepareResources;\n\t\t\tCompile;\n\t\t\tPrepareForRun;\n\t\t\tDeployOutputFiles;\n\t\t\t_RecordCleanFile;\n\t\t\tPostBuildEvent\n\t\t</CoreBuildDependsOn>\n\t</PropertyGroup>\n\n\t<Target\n\t\tName=\"CoreBuild\"\n\t\tDependsOnTargets=\"$(CoreBuildDependsOn)\"\n\t\tOutputs=\"$(OutDir)$(AssemblyName)$(TargetExt)\">\n\n\t\t<OnError ExecuteTargets=\"_TimestampAfterCompile;PostBuildEvent\"\n\t\t\tCondition=\" '$(RunPostBuildEvent)' == 'Always' or '$(RunPostBuildEvent)' == 'OnOutputUpdated'\"/>\n\n\t\t<OnError ExecuteTargets=\"_RecordCleanFile\" />\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<CompileDependsOn>\n\t\t\tResolveReferences;\n\t\t\tGenerateTargetFrameworkMonikerAttribute;\n\t\t\tBeforeCompile;\n\t\t\t_TimestampBeforeCompile;\n\t\t\tCoreCompile;\n\t\t\t_TimestampAfterCompile;\n\t\t\tAfterCompile\n\t\t</CompileDependsOn>\n\t</PropertyGroup>\n\n\t<Target Name=\"BeforeCompile\" />\n\t<Target Name=\"AfterCompile\" />\n\n\t<Target Name=\"Compile\" DependsOnTargets=\"$(CompileDependsOn)\"/>\n\n\t<PropertyGroup>\n\t\t<PrepareForRunDependsOn>\n\t\t\tDeployOutputFiles\n\t\t</PrepareForRunDependsOn>\n\t</PropertyGroup>\n\t<Target Name=\"PrepareForRun\" DependsOnTargets=\"$(PrepareForRunDependsOn)\"/>\n\n\t<PropertyGroup>\n\t\t<PrepareResourcesDependsOn>\n\t\t\tAssignTargetPaths;\n\t\t\tSplitResourcesByCulture;\n\t\t\tCreateManifestResourceNames;\n\t\t\tCopyNonResxEmbeddedResources;\n\t\t\tGenerateResources;\n\t\t\tGenerateSatelliteAssemblies;\n\t\t\tCompileLicxFiles\n\t\t</PrepareResourcesDependsOn>\n\t</PropertyGroup>\n\t<Target Name=\"PrepareResources\" DependsOnTargets=\"$(PrepareResourcesDependsOn)\" />\n\n\t<Target Name=\"SplitResourcesByCulture\" DependsOnTargets=\"AssignTargetPaths\">\n\t\t<!-- Extract .licx files into @(LicxFiles) -->\n\t\t<CreateItem Include=\"@(EmbeddedResourceWithTargetPath)\" Condition=\"'%(Extension)' == '.licx'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"LicxFiles\"/>\n\t\t</CreateItem>\n\n\t\t<!-- Split *remaining* resource files into various groups.. -->\n\t\t<AssignCulture Files=\"@(EmbeddedResourceWithTargetPath)\" Condition=\"'%(Extension)' != '.licx'\">\n\t\t\t<Output TaskParameter=\"AssignedFilesWithNoCulture\" ItemName=\"ResourcesWithNoCulture\"/>\n\t\t\t<Output TaskParameter=\"AssignedFilesWithCulture\" ItemName=\"ResourcesWithCulture\"/>\n\t\t</AssignCulture>\n\n\t\t<CreateItem Include=\"@(ResourcesWithNoCulture)\" Condition=\"'%(Extension)' == '.resx'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ResxWithNoCulture\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem Include=\"@(ResourcesWithNoCulture)\" Condition=\"'%(Extension)' != '.resx'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"NonResxWithNoCulture\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem Include=\"@(ResourcesWithCulture)\" Condition=\"'%(Extension)' == '.resx'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ResxWithCulture\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem Include=\"@(ResourcesWithCulture)\" Condition=\"'%(Extension)' != '.resx'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"NonResxWithCulture\"/>\n\t\t</CreateItem>\n\t</Target>\n\n\t<!-- Copy non-resx resources to their manifest resource names, this is what the compiler expects -->\n\t<Target Name = \"CopyNonResxEmbeddedResources\"\n\t\tCondition = \"'@(NonResxWithCulture)' != '' or '@(NonResxWithNoCulture)' != '' or '@(ManifestNonResxWithCulture)' != '' or '@(ManifestNonResxWithNoCulture)' != ''\">\n\n\t\t<MakeDir Directories=\"$(IntermediateOutputPath)%(ManifestNonResxWithCulture.Culture)\"/>\n\t\t<Copy SourceFiles = \"@(NonResxWithCulture)\"\n\t\t\tDestinationFiles = \"@(ManifestNonResxWithCulture->'$(IntermediateOutputPath)%(Identity)')\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\">\n\t\t\t<Output TaskParameter = \"DestinationFiles\" ItemName = \"ManifestNonResxWithCultureOnDisk\"/>\n\t\t\t<Output TaskParameter = \"DestinationFiles\" ItemName = \"FileWrites\"/>\n\t\t</Copy>\n\n\t\t<Copy SourceFiles = \"@(NonResxWithNoCulture)\"\n\t\t\tDestinationFiles = \"@(ManifestNonResxWithNoCulture->'$(IntermediateOutputPath)%(Identity)')\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\">\n\t\t\t<Output TaskParameter = \"DestinationFiles\" ItemName = \"ManifestNonResxWithNoCultureOnDisk\"/>\n\t\t\t<Output TaskParameter = \"DestinationFiles\" ItemName = \"FileWrites\"/>\n\t\t</Copy>\n\t</Target>\n\n\t<Target Name = \"GenerateResources\">\n\t\t<GenerateResource\n\t\t\tSources = \"@(ResxWithNoCulture)\"\n\t\t\tUseSourcePath = \"true\"\n\t\t\tOutputResources = \"@(ManifestResourceWithNoCultureName->'$(IntermediateOutputPath)%(Identity).resources')\"\n\t\t\tCondition = \"'@(ResxWithNoCulture)' != '' \">\n\n\t\t\t<Output TaskParameter = \"OutputResources\" ItemName = \"ManifestResourceWithNoCulture\"/>\n\t\t\t<Output TaskParameter = \"FilesWritten\" ItemName = \"FileWrites\"/>\n\t\t</GenerateResource>\n\n\t\t<GenerateResource\n\t\t\tSources = \"@(ResxWithCulture)\"\n\t\t\tUseSourcePath = \"true\"\n\t\t\tOutputResources = \"@(ManifestResourceWithCultureName->'$(IntermediateOutputPath)%(Identity).resources')\"\n\t\t\tCondition = \"'@(ResxWithCulture)' != '' \">\n\n\t\t\t<Output TaskParameter = \"OutputResources\" ItemName = \"ManifestResourceWithCulture\"/>\n\t\t\t<Output TaskParameter = \"FilesWritten\" ItemName = \"FileWrites\"/>\n\t\t</GenerateResource>\n\t</Target>\n\n\t<Target Name=\"GenerateSatelliteAssemblies\"\n\t\tInputs=\"@(ManifestResourceWithCulture);@(ManifestNonResxWithCultureOnDisk)\"\n\t\tOutputs=\"$(IntermediateOutputPath)%(Culture)\\$(AssemblyName).resources.dll\" >\n\t\t<!-- @(NonResxWithCulture) - rename files to ManifestNon.. and then use for AL -->\n\t\t<MakeDir Directories = \"$(IntermediateOutputPath)%(ManifestResourceWithCulture.Culture)\" Condition = \"'@(ManifestResourceWithCulture)' != ''\" />\n\t\t<MakeDir Directories = \"$(IntermediateOutputPath)%(ManifestNonResxWithCultureOnDisk.Culture)\" Condition = \"'@(ManifestNonResxWithCultureOnDisk)' != ''\" />\n\n\t\t<AL\n\t\t\tCulture = \"%(Culture)\"\n\t\t\tDelaySign=\"$(DelaySign)\"\n\t\t\tEmbedResources = \"@(ManifestResourceWithCulture);@(ManifestNonResxWithCultureOnDisk)\"\n\t\t\tKeyFile=\"$(KeyOriginatorFile)\"\n\t\t\tToolExe=\"$(AlToolExe)\"\n\t\t\tToolPath=\"$(AlToolPath)\"\n\t\t\tOutputAssembly = \"$(IntermediateOutputPath)%(Culture)\\$(AssemblyName).resources.dll\" >\n\t\t\t<Output TaskParameter=\"OutputAssembly\" ItemName=\"FileWrites\"/>\n\t\t</AL>\n\n\n\t\t<CreateItem\n\t\t\tInclude = \"$(IntermediateOutputPath)%(Culture)\\$(AssemblyName).resources.dll\"\n\t\t\tAdditionalMetadata = \"Culture=%(Culture)\"\n\t\t\tCondition = \"'@(ManifestResourceWithCulture)' != '' or '@(ManifestNonResxWithCultureOnDisk)' != ''\">\n\t\t\t<Output TaskParameter = \"Include\" ItemName = \"IntermediateSatelliteAssemblies\" />\n\t\t</CreateItem>\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<CompileLicxFilesDependsOn></CompileLicxFilesDependsOn>\n\t</PropertyGroup>\n\n\t<Target Name = \"CompileLicxFiles\"\n\t\tCondition = \"'@(LicxFiles)' != ''\"\n\t\tDependsOnTargets = \"$(CompileLicxFilesDependsOn)\"\n\t\tOutputs = \"$(IntermediateOutputPath)$(TargetFileName).licenses\">\n\t\t<LC\n\t\t\tSources = \"@(LicxFiles)\"\n\t\t\tLicenseTarget = \"$(TargetFileName)\"\n\t\t\tOutputDirectory = \"$(IntermediateOutputPath)\"\n\t\t\tOutputLicense = \"$(IntermediateOutputPath)$(TargetFileName).licenses\"\n\t\t\tReferencedAssemblies = \"@(ReferencePath);@(ReferenceDependencyPaths)\"\n\t\t\tToolPath = \"$(LCToolPath)\"\n\t\t\tToolExe = \"$(LCToolExe)\">\n\n\t\t\t<Output TaskParameter=\"OutputLicense\" ItemName=\"CompiledLicenseFile\"/>\n\t\t\t<Output TaskParameter=\"OutputLicense\" ItemName=\"FileWrites\"/>\n\t\t</LC>\n\t</Target>\n\n\t<!-- Assign target paths to files that will need to be copied along with the project -->\n\t<Target Name = \"AssignTargetPaths\">\n\t\t<AssignTargetPath Files=\"@(None)\" RootFolder=\"$(MSBuildProjectDirectory)\">\n\t\t\t<Output TaskParameter=\"AssignedFiles\" ItemName=\"NoneWithTargetPath\"/>\n\t\t</AssignTargetPath>\n\n\t\t<AssignTargetPath Files=\"@(Content)\" RootFolder=\"$(MSBuildProjectDirectory)\">\n\t\t\t<Output TaskParameter=\"AssignedFiles\" ItemName=\"ContentWithTargetPath\"/>\n\t\t</AssignTargetPath>\n\n\t\t<AssignTargetPath Files=\"@(EmbeddedResource)\" RootFolder=\"$(MSBuildProjectDirectory)\">\n\t\t\t<Output TaskParameter=\"AssignedFiles\" ItemName=\"EmbeddedResourceWithTargetPath\"/>\n\t\t</AssignTargetPath>\n\t</Target>\n\n\t<Target Name=\"DeployOutputFiles\"\n\t\tDependsOnTargets=\"PrepareResources;CoreCompile;_CopyDeployFilesToOutputDirectory;_CopyAppConfigFile\">\n\n\t\t<Copy\n\t\t\tSourceFiles=\"$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb\"\n\t\t\tCondition=\"'$(OutDir)' != '' and Exists('$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb')\"\n\t\t\tDestinationFolder=\"$(OutDir)\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\" >\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\n\t\t<Copy\n\t\t\tSourceFiles=\"$(IntermediateOutputPath)$(AssemblyName).pdb\"\n\t\t\tCondition=\"'$(OutDir)' != '' and Exists('$(IntermediateOutputPath)$(AssemblyName).pdb')\"\n\t\t\tDestinationFolder=\"$(OutDir)\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\" >\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\n\t\t<Copy SourceFiles=\"@(IntermediateAssembly)\" Condition=\"'$(OutDir)' != '' and Exists ('@(IntermediateAssembly)')\" DestinationFolder=\"$(OutDir)\" SkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\">\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\n\t\t<Copy\n\t\t\tSourceFiles = \"@(IntermediateSatelliteAssemblies)\"\n\t\t\tDestinationFiles = \"@(IntermediateSatelliteAssemblies->'$(OutDir)\\%(Culture)\\$(AssemblyName).resources.dll')\"\n\t\t\tCondition = \"'@(IntermediateSatelliteAssemblies)' != ''\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\">\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\t</Target>\n\n\t<Target Name=\"_CopyDeployFilesToOutputDirectory\"\n\t\tDependsOnTargets=\"GetCopyToOutputDirectoryItems;\n\t\t\t_CopyDeployFilesToOutputDirectoryAlways;\n\t\t\t_CopyDeployFilesToOutputDirectoryPreserveNewest\"/>\n\n\t<Target Name=\"_CopyDeployFilesToOutputDirectoryPreserveNewest\"\n\t\tCondition=\"'@(ItemsToCopyToOutputDirectoryPreserveNewest)' != ''\"\n\t\tInputs=\"@(ItemsToCopyToOutputDirectoryPreserveNewest)\"\n\t\tOutputs=\"@(ItemsToCopyToOutputDirectoryPreserveNewest->'$(OutDir)%(TargetPath)')\">\n\n\t\t<Copy SourceFiles=\"@(ItemsToCopyToOutputDirectoryPreserveNewest)\"\n\t\t\tDestinationFiles=\"@(ItemsToCopyToOutputDirectoryPreserveNewest->'$(OutDir)%(TargetPath)')\"\n\t\t\tSkipUnchangedFiles=\"$(SkipCopyUnchangedFiles)\">\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\t</Target>\n\n\t<!-- Copy if newer -->\n\t<Target Name=\"_CopyDeployFilesToOutputDirectoryAlways\"\n\t\tCondition=\"'@(ItemsToCopyToOutputDirectoryAlways)' != ''\">\n\n\t\t<Copy SourceFiles=\"@(ItemsToCopyToOutputDirectoryAlways)\"\n\t\t\tDestinationFiles=\"@(ItemsToCopyToOutputDirectoryAlways->'$(OutDir)%(TargetPath)')\">\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\t</Target>\n\n\n\t<Target Name=\"_CopyAppConfigFile\" Condition=\"'@(AppConfigWithTargetPath)' != ''\"\n\t\tInputs=\"@(AppConfigWithTargetPath)\"\n\t\tOutputs=\"@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')\">\n\n\t\t<Copy SourceFiles=\"@(AppConfigWithTargetPath)\"\n\t\t\tDestinationFiles=\"@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')\">\n\t\t\t<Output TaskParameter=\"DestinationFiles\" ItemName=\"FileWrites\"/>\n\t\t</Copy>\n\t</Target>\n\n\t<Target Name=\"GetTargetPath\" Outputs=\"$(TargetPath)\"/>\n\n\t<Target Name=\"GetCopyToOutputDirectoryItems\"\n\t\tOutputs=\"@(AllItemsFullPathWithTargetPath)\"\n\t\tDependsOnTargets=\"AssignTargetPaths;SplitProjectReferencesByExistent\">\n\n\t\t<!-- FIXME: handle .vcproj\n\t\t     FIXME: Private ProjectReferences are honored only in 3.5\n\t\t-->\n\t\t<MSBuild\n\t\t\tProjects=\"@(ProjectReferenceWithConfigurationExistent)\"\n\t\t\tTargets=\"GetCopyToOutputDirectoryItems\"\n\t\t\tCondition=\"'@(ProjectReferenceWithConfigurationExistent)' != '' and '%(ProjectReferenceWithConfigurationExistent.Private)' != 'false'\">\n\n\t\t\t<Output TaskParameter=\"TargetOutputs\" ItemName=\"AllChildProjectItemsWithTargetPath\"/>\n\t\t</MSBuild>\n\n\t\t<!-- Process items from child project. The outputs need to have full path\n\t\t     as they'll be used from other projects -->\n\n\t\t<CreateItem\n\t\t\tInclude=\"@(AllChildProjectItemsWithTargetPath->'%(FullPath)')\"\n\t\t\tCondition=\"'%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'\">\n\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"AllItemsFullPathWithTargetPath\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryAlways\"\n\t\t\t\tCondition=\"'%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always'\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryPreserveNewest\"\n\t\t\t\tCondition=\"'%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'\"/>\n\n\t\t</CreateItem>\n\n\t\t<!-- Process _this_ project's items -->\n\n\t\t<CreateItem\n\t\t\tInclude=\"@(NoneWithTargetPath->'%(FullPath)')\"\n\t\t\tCondition=\"'%(NoneWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(NoneWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"AllItemsFullPathWithTargetPath\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryAlways\"\n\t\t\t\tCondition=\"'%(NoneWithTargetPath.CopyToOutputDirectory)'=='Always'\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryPreserveNewest\"\n\t\t\t\tCondition=\"'%(NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem\n\t\t\tInclude=\"@(ContentWithTargetPath->'%(FullPath)')\"\n\t\t\tCondition=\"'%(ContentWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(ContentWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"AllItemsFullPathWithTargetPath\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryAlways\"\n\t\t\t\tCondition=\"'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always'\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryPreserveNewest\"\n\t\t\t\tCondition=\"'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem\n\t\t\tInclude=\"@(EmbeddedResourceWithTargetPath->'%(FullPath)')\"\n\t\t\tCondition=\"'%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"AllItemsFullPathWithTargetPath\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryAlways\"\n\t\t\t\tCondition=\"'%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)'=='Always'\"/>\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"ItemsToCopyToOutputDirectoryPreserveNewest\"\n\t\t\t\tCondition=\"'%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'\"/>\n\t\t</CreateItem>\n\n\t</Target>\n\n\t<!-- Pre/Post BuildEvents -->\n\t<PropertyGroup>\n\t\t<PreBuildEventDependsOn />\n\t</PropertyGroup>\n\n\t<Target Name=\"PreBuildEvent\"\n\t\tCondition=\"'$(PreBuildEvent)' != ''\"\n\t\tDependsOnTargets=\"$(PreBuildEventDependsOn)\">\n\n\t\t<Exec WorkingDirectory=\"$(OutDir)\" Command=\"$(PreBuildEvent)\" />\n\t</Target>\n\n\t<!-- PostBuildEvent depends on $(RunPostBuildEvent)\n\n\t\tDefault: OnBuildSuccess\n\t\tOnBuildSuccess: Run after a successful build\n\t\tOnOutputUpdated: Run only if the output assembly got updates\n\t\tAlways: Run always\n\t-->\n\t<PropertyGroup>\n\t\t<PostBuildEventDependsOn />\n\t</PropertyGroup>\n\n\t<!-- this gets invoked in two cases, from CoreBuildDependsOn, if the build completes\n\t     successfully, OR from OnError in CoreBuild, if the build failed and $(RunPostBuildEvent)\n\t     is 'Always' or 'OnOutputUpdated'. Invoke $(PostBuildEvent) if its either Empty (== OnBuildSuccess)\n\t     or OnBuildSuccess or Always OR (OnOutputUpdated and output assembly got updated) -->\n\t<Target Name=\"PostBuildEvent\"\n\t\tCondition=\"'$(PostBuildEvent)' != '' and\n\t\t\t('$(RunPostBuildEvent)' != 'OnOutputUpdated' or\n\t\t\t  '$(_AssemblyModifiedTimeBeforeCompile)' != '$(_AssemblyModifiedTimeAfterCompile)')\"\n\t\tDependsOnTargets=\"$(PostBuildEventDependsOn)\">\n\n\t\t<Exec WorkingDirectory=\"$(OutDir)\" Command=\"$(PostBuildEvent)\" />\n\t</Target>\n\n\t<!-- Timestamp the output assemblies, required for PostBuildEvent -->\n\t<Target Name=\"_TimestampBeforeCompile\" Condition=\"'$(RunPostBuildEvent)' == 'OnOutputUpdated'\">\n\t\t<CreateItem Include=\"%(IntermediateAssembly.ModifiedTime)\">\n\t\t\t<Output TaskParameter=\"Include\" PropertyName=\"_AssemblyModifiedTimeBeforeCompile\" />\n\t\t</CreateItem>\n\t</Target>\n\t<Target Name=\"_TimestampAfterCompile\" Condition=\"'$(RunPostBuildEvent)' == 'OnOutputUpdated'\">\n\t\t<CreateItem Include=\"%(IntermediateAssembly.ModifiedTime)\">\n\t\t\t<Output TaskParameter=\"Include\" PropertyName=\"_AssemblyModifiedTimeAfterCompile\" />\n\t\t</CreateItem>\n\t</Target>\n\n\t<!-- Rebuild -->\n\t<PropertyGroup>\n\t\t<RebuildDependsOn>\n\t\t\tBeforeRebuild;\n\t\t\tClean;\n\t\t\t$(MSBuildProjectDefaultTargets);\n\t\t\tAfterRebuild;\n\t\t</RebuildDependsOn>\n\n\t\t<RebuildDependsOn Condition=\"'$(MSBuildProjectDefaultTargets)' == 'Rebuild'\">\n\t\t\tBeforeRebuild;\n\t\t\tClean;\n\t\t\tBuild;\n\t\t\tAfterRebuild;\n\t\t</RebuildDependsOn>\n\t</PropertyGroup>\n\n\t<Target Name=\"BeforeRebuild\" />\n\t<Target Name=\"AfterRebuild\" />\n\n\t<Target Name=\"Rebuild\"\n\t\tDependsOnTargets=\"$(RebuildDependsOn)\"\n\t\tOutputs=\"$(TargetPath)\"/>\n\n\t<!-- Clean -->\n\t<Target Name=\"_RecordCleanFile\"\n\t\tDependsOnTargets=\"_GetCompileOutputsForClean\">\n\n\t\t<!-- add to list of previous writes for this platform/config -->\n\n\t\t<ReadLinesFromFile File=\"$(IntermediateOutputPath)$(CleanFile)\">\n\t\t\t<Output TaskParameter=\"Lines\" ItemName=\"PreviousFileWrites\"/>\n\t\t</ReadLinesFromFile>\n\n\t\t<!-- CopyLocal files: In case all the projects build to common output\n\t\t     directory, then other projects might depend on some of these\n\t\t     CopyLocal files, so delete only the ones under *this* project\n\t\t     directory -->\n\t\t<FindUnderPath Path=\"$(MSBuildProjectDirectory)\" Files=\"@(FileWritesShareable)\">\n\t\t\t<Output TaskParameter=\"InPath\" ItemName=\"FileWrites\"/>\n\t\t</FindUnderPath>\n\n\t\t<RemoveDuplicates Inputs=\"@(PreviousFileWrites);@(FileWrites->'%(FullPath)')\">\n\t\t\t<Output TaskParameter=\"Filtered\" ItemName=\"CombinedFileWrites\"/>\n\t\t</RemoveDuplicates>\n\n\t\t<WriteLinesToFile\n\t\t\tFile=\"$(IntermediateOutputPath)$(CleanFile)\"\n\t\t\tLines=\"@(CombinedFileWrites)\"\n\t\t\tOverwrite=\"true\"/>\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<CleanDependsOn>\n\t\t\tBeforeClean;\n\t\t\tCleanReferencedProjects;\n\t\t\tCoreClean;\n\t\t\tAfterClean\n\t\t</CleanDependsOn>\n\t</PropertyGroup>\n\n\t<Target Name=\"_GetCompileOutputsForClean\">\n\t\t<!-- assembly and debug file in the *intermediate output path* -->\n\t\t<CreateItem Include=\"@(IntermediateAssembly)\" Condition=\"Exists('@(IntermediateAssembly)')\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"FileWrites\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem Include=\"$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb\"\n\t\t\tCondition=\"Exists('$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb')\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"FileWrites\"/>\n\t\t</CreateItem>\n\n\t\t<CreateItem Include=\"$(IntermediateOutputPath)$(AssemblyName).pdb\"\n\t\t\tCondition=\"Exists('$(IntermediateOutputPath)$(AssemblyName).pdb')\">\n\t\t\t<Output TaskParameter=\"Include\" ItemName=\"FileWrites\"/>\n\t\t</CreateItem>\n\t</Target>\n\n\t<!-- Get the list of files written, for clean -->\n\t<Target Name=\"_GetCleanFileWrites\"\n\t\tDependsOnTargets=\"_GetCompileOutputsForClean\">\n\t\t<ReadLinesFromFile File=\"$(IntermediateOutputPath)$(CleanFile)\">\n\t\t\t<Output TaskParameter=\"Lines\" ItemName=\"PreviousFileWrites\"/>\n\t\t</ReadLinesFromFile>\n\t</Target>\n\n\t<Target Name=\"CleanReferencedProjects\"\n\t\tDependsOnTargets=\"AssignProjectConfiguration\">\n\n\t\t<!-- If building from .sln.proj or from IDE, clean will get handled by them,\n\t\t     else we are building a project directly, from the command line, so\n\t\t     clean the referenced projects -->\n\t\t<MSBuild Projects=\"@(ProjectReferenceWithConfigurationExistent)\"\n\t\t\tTargets=\"Clean\"\n\t\t\tCondition=\" '$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true' and '@(ProjectReferenceWithConfigurationExistent)' != ''\" />\n\n\t</Target>\n\n\t<Target Name=\"Clean\" DependsOnTargets=\"$(CleanDependsOn)\"/>\n\n\t<!-- Override in project to run before/after clean tasks -->\n\t<Target Name=\"BeforeClean\" />\n\t<Target Name=\"AfterClean\" />\n\n\t<Target Name=\"CoreClean\" DependsOnTargets=\"_GetCleanFileWrites\">\n\t\t<Delete Files=\"@(PreviousFileWrites);@(FileWrites)\" TreatErrorsAsWarnings=\"true\"/>\n\n\t\t<!-- all previous files written for this platform/config have been deleted,\n\t\t     we can safely remove the file list now -->\n\t\t<Delete Files=\"$(IntermediateOutputPath)$(CleanFile)\" TreatErrorsAsWarnings=\"true\" />\n\t</Target>\n\n\t<PropertyGroup>\n\t\t<ImplicitlyExpandDesignTimeFacades>true</ImplicitlyExpandDesignTimeFacades>\n\n\t\t<ResolveReferencesDependsOn>\n\t\t\t$(ResolveReferencesDependsOn);\n\t\t\tImplicitlyExpandDesignTimeFacades\n\t\t</ResolveReferencesDependsOn>\n\n\t\t<ImplicitlyExpandDesignTimeFacadesDependsOn>\n\t\t\t$(ImplicitlyExpandDesignTimeFacadesDependsOn);\n\t\t\tGetReferenceAssemblyPaths\n\t\t</ImplicitlyExpandDesignTimeFacadesDependsOn>\n\t</PropertyGroup>\n\n\t<Target Name=\"ImplicitlyExpandDesignTimeFacades\" Condition=\"'$(ImplicitlyExpandDesignTimeFacades)' == 'true'\" DependsOnTargets=\"$(ImplicitlyExpandDesignTimeFacadesDependsOn)\">\n\n\t\t<PropertyGroup>\n\t\t\t<_HasReferenceToSystemRuntime Condition=\"'%(_ResolvedDependencyFiles.Filename)' == 'System.Runtime'\">true</_HasReferenceToSystemRuntime>\n\t\t</PropertyGroup>\n\n\t\t<ItemGroup Condition=\"'$(_HasReferenceToSystemRuntime)' == 'true'\">\n\t\t\t<!-- If the user has manually referenced these assemblies, remove them so we don't end up with duplicates -->\n\t\t\t<ReferencePath Remove=\"@(_DesignTimeFacadeAssemblies)\"/>\n\t\t\t<ReferencePath Include=\"%(_DesignTimeFacadeAssemblies.Identity)\">\n\t\t\t\t<WinMDFile>false</WinMDFile>\n\t\t\t\t<CopyLocal>false</CopyLocal>\n\t\t\t\t<ResolvedFrom>ImplicitlyExpandDesignTimeFacades</ResolvedFrom>\n\t\t\t</ReferencePath>\n\t\t\t<_ResolveAssemblyReferenceResolvedFiles Include=\"@(ReferencePath)\" Condition=\"'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandDesignTimeFacades'\" />\n\t\t</ItemGroup>\n\n\t\t<Message Importance=\"Low\" Text=\"Including @(ReferencePath)\" Condition=\"'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandDesignTimeFacades'\" />\n\n\t</Target>\n\n\t<Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\$(MSBuildThisFile)\\ImportAfter\\*\"\n\t\tCondition=\"'$(ImportByWildcardAfterMicrosoftCommonTargets)' == 'true' and Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\$(MSBuildThisFile)\\ImportAfter')\"/>\n</Project>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/Microsoft.Common.tasks",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" >\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.AL\"\t\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.AssignTargetPath\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.AssignLinkMetadata\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.AssignCulture\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.AssignProjectConfiguration\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.CallTarget\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.CombinePath\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Copy\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.CreateCSharpManifestResourceName\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"/>\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.CreateVisualBasicManifestResourceName\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"/>\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.CreateItem\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.CreateProperty\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Csc\"\t\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Delete\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Error\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Exec\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.FindAppConfigFile\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.FindUnderPath\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.GenerateResource\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.GetAssemblyIdentity\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.GetFrameworkPath\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.GetFrameworkSdkPath\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.GetReferenceAssemblyPaths\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.LC\"\t\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.MakeDir\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Message\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.MSBuild\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.ReadLinesFromFile\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.RemoveDir\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.RemoveDuplicates\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.ResolveAssemblyReference\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.SignFile\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Touch\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Vbc\"\t\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.Warning\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.WriteCodeFragment\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"/>\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.WriteLinesToFile\"\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n\t<UsingTask TaskName=\"Microsoft.Build.Tasks.XmlPeek\"\t\tAssemblyName=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n</Project>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/Microsoft.VisualBasic.targets",
    "content": "﻿<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\t<PropertyGroup>\n\t\t<DefaultLanguageSourceExtension>.vb</DefaultLanguageSourceExtension>\n\t\t<Language>VB</Language>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<CreateManifestResourceNamesDependsOn></CreateManifestResourceNamesDependsOn>\n\t</PropertyGroup>\n\n\t<PropertyGroup>\n\t\t<FinalDefineConstants>CONFIG=&quot;$(Configuration)&quot;</FinalDefineConstants>\n\t\t<FinalDefineConstants Condition=\" '$(DefineDebug)' == 'true' \">$(FinalDefineConstants),DEBUG=-1</FinalDefineConstants>\n\t\t<FinalDefineConstants Condition=\" '$(DefineTrace)' == 'true' \">$(FinalDefineConstants),TRACE=-1</FinalDefineConstants>\n\t\t<FinalDefineConstants Condition=\" '$(MyType)' != '' \">$(FinalDefineConstants),_MyType=&quot;$(MyType)&quot;</FinalDefineConstants>\n\t\t<FinalDefineConstants Condition=\" '$(Platform)' != '' \">$(FinalDefineConstants),PLATFORM=&quot;$(Platform)&quot;</FinalDefineConstants>\n\t\t<FinalDefineConstants Condition=\" '$(Platform)' == '' \">$(FinalDefineConstants),PLATFORM=&quot;AnyCPU&quot;</FinalDefineConstants>\n\t\t<FinalDefineConstants Condition=\" '$(DefineConstants)' != '' \">$(FinalDefineConstants),$(DefineConstants)</FinalDefineConstants>\n\n\t\t<_NoWarnings Condition=\" '$(WarningLevel)' == '0' \">true</_NoWarnings>\n\t\t<_NoWarnings Condition=\" '$(WarningLevel)' == '1' \">false</_NoWarnings>\n\n\t\t<DebugSymbols Condition=\" '$(DebugType)' == 'none' \">false</DebugSymbols>\n\t\t<DebugType    Condition=\" '$(DebugType)' == 'none' \"></DebugType>\n\n\t\t<CoreCompileDependsOn></CoreCompileDependsOn>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<DocFileItem Include=\"$(DocumentationFile)\"  Condition=\"'$(DocumentationFile)'!=''\"/>\n\t</ItemGroup>\n\n\t<Target\n\t\tName=\"CoreCompile\"\n\t\tInputs=\"$(MSBuildAllProjects);@(Compile);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(DocFileItem);\n\t\t\t$(KeyOriginatorFile);@(ReferencePath);$(Win32Icon);$(Win32Resource)\"\n\t\tOutputs=\"@(IntermediateAssembly)\"\n\t\tDependsOnTargets=\"$(CoreCompileDependsOn)\"\n\t>\n\t\t<Vbc\n\t\t\tAdditionalLibPaths=\"$(AdditionalLibPaths)\"\n\t\t\tAddModules=\"@(AddModules)\"\n\t\t\tBaseAddress=\"$(BaseAddress)\"\n\t\t\tCodePage=\"$(CodePage)\"\n\t\t\tDebugType=\"$(DebugType)\"\n\t\t\tDefineConstants=\"$(FinalDefineConstants)\"\n\t\t\tDelaySign=\"$(DelaySign)\"\n\t\t\tDisabledWarnings=\"$(NoWarn)\"\n\t\t\tDocumentationFile=\"@(DocFileItem)\"\n\t\t\tEmitDebugInformation=\"$(DebugSymbols)\"\n\t\t\tErrorReport=\"$(ErrorReport)\"\n\t\t\tFileAlignment=\"$(FileAlignment)\"\n\t\t\tGenerateDocumentation=\"$(GenerateDocumentation)\"\n\t\t\tImports=\"@(Import)\"\n\t\t\tKeyContainer=\"$(KeyContainerName)\"\n\t\t\tKeyFile=\"$(KeyOriginatorFile)\"\n\t\t\tMainEntryPoint=\"$(StartupObject)\"\n\t\t\tNoConfig=\"true\"\n\t\t\tNoLogo=\"$(NoLogo)\"\n\t\t\tNoStandardLib=\"$(NoStdLib)\"\n\t\t\tNoWarnings=\"$(_NoWarnings)\"\n\t\t\tOptimize=\"$(Optimize)\"\n\t\t\tOptionCompare=\"$(OptionCompare)\"\n\t\t\tOptionExplicit=\"$(OptionExplicit)\"\n\t\t\tOptionStrict=\"$(OptionStrict)\"\n\t\t\tOptionStrictType=\"$(OptionStrictType)\"\n\t\t\tOptionInfer=\"$(OptionInfer)\"\n\t\t\tOutputAssembly=\"@(IntermediateAssembly)\"\n\t\t\tPlatform=\"$(PlatformTarget)\"\n\t\t\tReferences=\"@(ReferencePath)\"\n\t\t\tRemoveIntegerChecks=\"$(RemoveIntegerChecks)\"\n\t\t\tResources=\"@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile)\"\n\t\t\tResponseFiles=\"$(CompilerResponseFile)\"\n\t\t\tRootNamespace=\"$(RootNamespace)\"\n\t\t\tSources=\"@(Compile)\"\n\t\t\tTargetType=\"$(OutputType)\"\n\t\t\tTreatWarningsAsErrors=\"$(TreatWarningsAsErrors)\"\n\t\t\tUseHostCompilerIfAvailable=\"$(UseHostCompilerIfAvailable)\"\n\t\t\tUtf8Output=\"$(Utf8Output)\"\n\t\t\tVBRuntime=\"$(VBRuntime)\"\n\t\t\tVerbosity=\"$(VbcVerbosity)\"\n\t\t\tWarningsAsErrors=\"$(WarningsAsErrors)\"\n\t\t\tWarningsNotAsErrors=\"$(WarningsNotAsErrors)\"\n\t\t\tWin32Icon=\"$(Win32Icon)\"\n\t\t\tWin32Resource=\"$(Win32Resource)\"\n\t\t\tToolExe=\"$(VbcToolExe)\"\n\t\t\tToolPath=\"$(VbcToolPath)\"\n\t\t\t/>\n\n\t</Target>\n\n\t<Target Name=\"CreateManifestResourceNames\">\n\t\t<CreateVisualBasicManifestResourceName Condition=\"'@(ResxWithNoCulture)' != ''\"\n\t\t\tResourceFiles=\"@(ResxWithNoCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestResourceWithNoCultureName\" />\n\t\t</CreateVisualBasicManifestResourceName>\n\n\t\t<CreateVisualBasicManifestResourceName Condition=\"'@(NonResxWithNoCulture)' != ''\"\n\t\t\tResourceFiles=\"@(NonResxWithNoCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestNonResxWithNoCulture\" />\n\t\t</CreateVisualBasicManifestResourceName>\n\n\t\t<CreateVisualBasicManifestResourceName Condition=\"'@(ResxWithCulture)' != ''\"\n\t\t\tResourceFiles=\"@(ResxWithCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestResourceWithCultureName\" />\n\t\t</CreateVisualBasicManifestResourceName>\n\n\t\t<CreateVisualBasicManifestResourceName Condition=\"'@(NonResxWithCulture)' != ''\"\n\t\t\tResourceFiles=\"@(NonResxWithCulture)\" RootNamespace=\"$(RootNamespace)\">\n\t\t\t<Output TaskParameter = \"ManifestResourceNames\" ItemName = \"ManifestNonResxWithCulture\" />\n\t\t</CreateVisualBasicManifestResourceName>\n\t</Target>\n\n\t<Import Project=\"Microsoft.Common.targets\" />\n\n\t<PropertyGroup>\n\t\t<VbcToolExe Condition=\"'$(VbcToolExe)' == ''\">vbnc.exe</VbcToolExe>\n\t</PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/VBCSCompiler.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->\n<configuration>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\" />\n  </startup>\n  <runtime>\n    <AppContextSwitchOverrides value=\"Switch.System.Security.Cryptography.UseLegacyFipsThrow=false\" />\n    <gcServer enabled=\"true\" />\n    <gcConcurrent enabled=\"false\" />\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.CSharp\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.VisualBasic\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Buffers\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection.Metadata\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Memory\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.1\" newVersion=\"4.0.1.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Numerics.Vectors\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.4.0\" newVersion=\"4.1.4.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.Encoding.CodePages\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <appSettings>\n    <!-- Number of seconds with no activity before the server times out and closes. \n         Set to -1 to never shut down the server. -->\n    <add key=\"keepalive\" value=\"600\" />\n  </appSettings>\n</configuration>"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/csc.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->\n<configuration>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\" />\n  </startup>\n  <runtime>\n    <AppContextSwitchOverrides value=\"Switch.System.Security.Cryptography.UseLegacyFipsThrow=false\" />\n    <gcServer enabled=\"true\" />\n    <gcConcurrent enabled=\"false\" />\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.CSharp\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Buffers\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection.Metadata\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Memory\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.1\" newVersion=\"4.0.1.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Numerics.Vectors\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.4.0\" newVersion=\"4.1.4.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.Encoding.CodePages\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/csc.rsp",
    "content": "﻿# Licensed to the .NET Foundation under one or more agreements.\n# The .NET Foundation licenses this file to you under the MIT license.\n# See the LICENSE file in the project root for more information.\n\n# This file contains command-line options that the C#\n# command line compiler (CSC) will process as part\n# of every compilation, unless the \"/noconfig\" option\n# is specified. \n\n# Reference the common Framework libraries\n/r:Accessibility.dll\n/r:Microsoft.CSharp.dll\n/r:System.Configuration.dll\n/r:System.Configuration.Install.dll\n/r:System.Core.dll\n/r:System.Data.dll\n/r:System.Data.DataSetExtensions.dll\n/r:System.Data.Linq.dll\n/r:System.Data.OracleClient.dll\n/r:System.Deployment.dll\n/r:System.Design.dll\n/r:System.DirectoryServices.dll\n/r:System.dll\n/r:System.Drawing.Design.dll\n/r:System.Drawing.dll\n/r:System.EnterpriseServices.dll\n/r:System.Management.dll\n/r:System.Messaging.dll\n/r:System.Runtime.Remoting.dll\n/r:System.Runtime.Serialization.dll\n/r:System.Runtime.Serialization.Formatters.Soap.dll\n/r:System.Security.dll\n/r:System.ServiceModel.dll\n/r:System.ServiceModel.Web.dll\n/r:System.ServiceProcess.dll\n/r:System.Transactions.dll\n/r:System.Web.dll\n/r:System.Web.Extensions.Design.dll\n/r:System.Web.Extensions.dll\n/r:System.Web.Mobile.dll\n/r:System.Web.RegularExpressions.dll\n/r:System.Web.Services.dll\n/r:System.Windows.Forms.dll\n/r:System.Workflow.Activities.dll\n/r:System.Workflow.ComponentModel.dll\n/r:System.Workflow.Runtime.dll\n/r:System.Xml.dll\n/r:System.Xml.Linq.dll\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/csi.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->\n<configuration>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\" />\n  </startup>\n  <runtime>\n    <AppContextSwitchOverrides value=\"Switch.System.Security.Cryptography.UseLegacyFipsThrow=false\" />\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.CSharp\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.CSharp.Scripting\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.Scripting\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Buffers\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection.Metadata\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Memory\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.1\" newVersion=\"4.0.1.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Numerics.Vectors\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.4.0\" newVersion=\"4.1.4.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.Encoding.CodePages\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/csi.rsp",
    "content": "﻿/r:System.dll\n/r:System.Core.dll\n/r:Microsoft.CSharp.dll\n/r:Facades/System.Runtime.dll\n/r:Facades/netstandard.dll\n/u:System\n/u:System.IO\n/u:System.Collections.Generic\n/u:System.Console\n/u:System.Diagnostics\n/u:System.Dynamic\n/u:System.Linq\n/u:System.Linq.Expressions\n/u:System.Text\n/u:System.Threading.Tasks"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/mono-shlib-cop.exe.config",
    "content": "<configuration>\n\t<dllmap dll=\"libgmodule-2.0.so\" target=\"libgmodule-2.0.so.0\"/>\n\t<dllmap dll=\"libglib-2.0.so\" target=\"libglib-2.0.so.0\"/>\n</configuration>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/sqlmetal.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <section name=\"providers\" type=\"DbMetal.Configuration.ProvidersSection, sqlmetal\" />\n  </configSections>\n  <connectionStrings>\n    <add name=\"DbMetal.Properties.Settings.TempOneConnectionString\"\n      connectionString=\"Data Source=.\\sqlexpress;Initial Catalog=TempOne;Integrated Security=True\"\n      providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <add key=\"ClientSettingsProvider.ServiceUri\" value=\"\" />\n  </appSettings>\n  <providers>\n    <providers>\n      <provider name=\"MySQL\" dbLinqSchemaLoader=\"DbLinq.MySql.MySqlSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"ByteFX.Data.MySqlClient.MySqlConnection, ByteFX.Data\" />\n      <provider name=\"Oracle\" dbLinqSchemaLoader=\"DbLinq.Oracle.OracleSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"System.Data.OracleClient.OracleConnection, System.Data.OracleClient\" />\n      <provider name=\"OracleODP\" dbLinqSchemaLoader=\"DbLinq.Oracle.OracleSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess\" />\n      <provider name=\"PostgreSQL\" dbLinqSchemaLoader=\"DbLinq.PostgreSql.PgsqlSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"Npgsql.NpgsqlConnection, Npgsql\" />\n      <provider name=\"SQLite\" dbLinqSchemaLoader=\"DbLinq.Sqlite.SqliteSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite\" />\n      <provider name=\"SqlServer\" dbLinqSchemaLoader=\"DbLinq.SqlServer.SqlServerSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"System.Data.SqlClient.SqlConnection, System.Data\" />\n      <provider name=\"Ingres\" dbLinqSchemaLoader=\"DbLinq.Ingres.IngresSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"Ingres.Client.IngresConnection, Ingres.Client\" />\n      <provider name=\"Firebird\" dbLinqSchemaLoader=\"DbLinq.Firebird.FirebirdSchemaLoader, System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" databaseConnection=\"FirebirdSql.Data.FirebirdClient.FbConnection, FirebirdSql.Data.FirebirdClient\" />\n    </providers>\n  </providers>\n  <system.web>\n    <membership defaultProvider=\"ClientAuthenticationMembershipProvider\">\n      <providers>\n        <add name=\"ClientAuthenticationMembershipProvider\" type=\"System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" serviceUri=\"\" />\n      </providers>\n    </membership>\n    <roleManager defaultProvider=\"ClientRoleProvider\" enabled=\"true\">\n      <providers>\n        <add name=\"ClientRoleProvider\" type=\"System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" serviceUri=\"\" cacheTimeout=\"86400\" />\n      </providers>\n    </roleManager>\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/vbc.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->\n<configuration>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\" />\n  </startup>\n  <runtime>\n    <AppContextSwitchOverrides value=\"Switch.System.Security.Cryptography.UseLegacyFipsThrow=false\" />\n    <gcServer enabled=\"true\" />\n    <gcConcurrent enabled=\"false\" />\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.CodeAnalysis.VisualBasic\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.9.0.0\" newVersion=\"3.9.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Buffers\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection.Metadata\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Memory\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.1\" newVersion=\"4.0.1.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Numerics.Vectors\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.4.0\" newVersion=\"4.1.4.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.Encoding.CodePages\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/vbc.rsp",
    "content": "﻿# Licensed to the .NET Foundation under one or more agreements.\n# The .NET Foundation licenses this file to you under the MIT license.\n# See the LICENSE file in the project root for more information.\n\n# This file contains command-line options that the VB\n# command line compiler (VBC) will process as part\n# of every compilation, unless the \"/noconfig\" option\n# is specified. \n\n# Reference the common Framework libraries\n/r:Accessibility.dll\n/r:System.Configuration.dll\n/r:System.Configuration.Install.dll\n/r:System.Data.dll\n/r:System.Data.OracleClient.dll\n/r:System.Deployment.dll\n/r:System.Design.dll\n/r:System.DirectoryServices.dll\n/r:System.dll\n/r:System.Drawing.Design.dll\n/r:System.Drawing.dll\n/r:System.EnterpriseServices.dll\n/r:System.Management.dll\n/r:System.Messaging.dll\n/r:System.Runtime.Remoting.dll\n/r:System.Runtime.Serialization.Formatters.Soap.dll\n/r:System.Security.dll\n/r:System.ServiceProcess.dll\n/r:System.Transactions.dll\n/r:System.Web.dll\n/r:System.Web.Mobile.dll\n/r:System.Web.RegularExpressions.dll\n/r:System.Web.Services.dll\n/r:System.Windows.Forms.dll\n/r:System.Xml.dll\n\n/r:System.Workflow.Activities.dll\n/r:System.Workflow.ComponentModel.dll\n/r:System.Workflow.Runtime.dll\n/r:System.Runtime.Serialization.dll\n/r:System.ServiceModel.dll\n\n/r:System.Core.dll\n/r:System.Xml.Linq.dll\n/r:System.Data.Linq.dll\n/r:System.Data.DataSetExtensions.dll\n/r:System.Web.Extensions.dll\n/r:System.Web.Extensions.Design.dll\n/r:System.ServiceModel.Web.dll\n\n# Import System and Microsoft.VisualBasic\n/imports:System\n/imports:Microsoft.VisualBasic\n/imports:System.Linq\n/imports:System.Xml.Linq\n\n/optioninfer+\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/vbnc.rsp",
    "content": "-r:Accessibility.dll\n-r:System.Configuration.dll\n-r:System.Data.dll\n-r:System.Design.dll\n-r:System.dll\n-r:System.Drawing.Design.dll\n-r:System.Drawing.dll\n-r:System.Web.dll\n-r:System.Web.Services.dll\n-r:System.Windows.Forms.dll\n-r:System.Xml.dll\n\n-imports:System\n-imports:Microsoft.VisualBasic\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/xbuild.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\t<runtime>\n\t\t<generatePublisherEvidence enabled=\"false\" />\n\t\t<assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"Microsoft.Build.Framework\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-100.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"Microsoft.Build.Engine\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-100.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t</assemblyBinding>\n\t</runtime>\n</configuration>\n"
  },
  {
    "path": "Hazelnut/mono/lib/mono/4.5/xbuild.rsp",
    "content": "# xbuild command line options specified here will be used\n# by xbuild on every build, unless /noautoresponse is passed\n# on the command line.\n"
  },
  {
    "path": "Hazelnut/premake5.lua",
    "content": "project \"Hazelnut\"\n\tkind \"ConsoleApp\"\n\tlanguage \"C++\"\n\tcppdialect \"C++17\"\n\tstaticruntime \"off\"\n\n\ttargetdir (\"%{wks.location}/bin/\" .. outputdir .. \"/%{prj.name}\")\n\tobjdir (\"%{wks.location}/bin-int/\" .. outputdir .. \"/%{prj.name}\")\n\n\tfiles\n\t{\n\t\t\"src/**.h\",\n\t\t\"src/**.cpp\"\n\t}\n\n\tincludedirs\n\t{\n\t\t\"%{wks.location}/Hazel/vendor/spdlog/include\",\n\t\t\"%{wks.location}/Hazel/src\",\n\t\t\"%{wks.location}/Hazel/vendor\",\n\t\t\"%{IncludeDir.entt}\",\n\t\t\"%{IncludeDir.filewatch}\",\n\t\t\"%{IncludeDir.glm}\",\n\t\t\"%{IncludeDir.ImGuizmo}\"\n\t}\n\n\tlinks\n\t{\n\t\t\"Hazel\"\n\t}\n\n\tfilter \"system:windows\"\n\t\tsystemversion \"latest\"\n\n\tfilter \"configurations:Debug\"\n\t\tdefines \"HZ_DEBUG\"\n\t\truntime \"Debug\"\n\t\tsymbols \"on\"\n\n\tfilter \"configurations:Release\"\n\t\tdefines \"HZ_RELEASE\"\n\t\truntime \"Release\"\n\t\toptimize \"on\"\n\n\tfilter \"configurations:Dist\"\n\t\tdefines \"HZ_DIST\"\n\t\truntime \"Release\"\n\t\toptimize \"on\"\n"
  },
  {
    "path": "Hazelnut/src/EditorLayer.cpp",
    "content": "#include \"EditorLayer.h\"\n#include \"Hazel/Scene/SceneSerializer.h\"\n#include \"Hazel/Utils/PlatformUtils.h\"\n#include \"Hazel/Math/Math.h\"\n#include \"Hazel/Scripting/ScriptEngine.h\"\n#include \"Hazel/Renderer/Font.h\"\n\n#include <imgui/imgui.h>\n\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/type_ptr.hpp>\n\n#include \"ImGuizmo.h\"\n\nnamespace Hazel {\n\n\tstatic Ref<Font> s_Font;\n\n\tEditorLayer::EditorLayer()\n\t\t: Layer(\"EditorLayer\"), m_CameraController(1280.0f / 720.0f), m_SquareColor({ 0.2f, 0.3f, 0.8f, 1.0f })\n\t{\n\t\ts_Font = Font::GetDefault();\n\t}\n\n\tvoid EditorLayer::OnAttach()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_CheckerboardTexture = Texture2D::Create(\"assets/textures/Checkerboard.png\");\n\t\tm_IconPlay = Texture2D::Create(\"Resources/Icons/PlayButton.png\");\n\t\tm_IconPause = Texture2D::Create(\"Resources/Icons/PauseButton.png\");\n\t\tm_IconSimulate = Texture2D::Create(\"Resources/Icons/SimulateButton.png\");\n\t\tm_IconStep = Texture2D::Create(\"Resources/Icons/StepButton.png\");\n\t\tm_IconStop = Texture2D::Create(\"Resources/Icons/StopButton.png\");\n\n\t\tFramebufferSpecification fbSpec;\n\t\tfbSpec.Attachments = { FramebufferTextureFormat::RGBA8, FramebufferTextureFormat::RED_INTEGER, FramebufferTextureFormat::Depth };\n\t\tfbSpec.Width = 1280;\n\t\tfbSpec.Height = 720;\n\t\tm_Framebuffer = Framebuffer::Create(fbSpec);\n\n\t\tm_EditorScene = CreateRef<Scene>();\n\t\tm_ActiveScene = m_EditorScene;\n\n\t\tauto commandLineArgs = Application::Get().GetSpecification().CommandLineArgs;\n\t\tif (commandLineArgs.Count > 1)\n\t\t{\n\t\t\tauto projectFilePath = commandLineArgs[1];\n\t\t\tOpenProject(projectFilePath);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// TODO(Yan): prompt the user to select a directory\n\t\t\t// NewProject();\n\n\t\t\t// If no project is opened, close Hazelnut\n\t\t\t// NOTE: this is while we don't have a new project path\n\t\t\tif (!OpenProject())\n\t\t\t\tApplication::Get().Close();\n\n\t\t}\n\n\t\tm_EditorCamera = EditorCamera(30.0f, 1.778f, 0.1f, 1000.0f);\n\t\tRenderer2D::SetLineWidth(4.0f);\n\t}\n\n\tvoid EditorLayer::OnDetach()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\t}\n\n\tvoid EditorLayer::OnUpdate(Timestep ts)\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\tm_ActiveScene->OnViewportResize((uint32_t)m_ViewportSize.x, (uint32_t)m_ViewportSize.y);\n\n\t\t// Resize\n\t\tif (FramebufferSpecification spec = m_Framebuffer->GetSpecification();\n\t\t\tm_ViewportSize.x > 0.0f && m_ViewportSize.y > 0.0f && // zero sized framebuffer is invalid\n\t\t\t(spec.Width != m_ViewportSize.x || spec.Height != m_ViewportSize.y))\n\t\t{\n\t\t\tm_Framebuffer->Resize((uint32_t)m_ViewportSize.x, (uint32_t)m_ViewportSize.y);\n\t\t\tm_CameraController.OnResize(m_ViewportSize.x, m_ViewportSize.y);\n\t\t\tm_EditorCamera.SetViewportSize(m_ViewportSize.x, m_ViewportSize.y);\n\t\t}\n\n\t\t// Render\n\t\tRenderer2D::ResetStats();\n\t\tm_Framebuffer->Bind();\n\t\tRenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 });\n\t\tRenderCommand::Clear();\n\n\t\t// Clear our entity ID attachment to -1\n\t\tm_Framebuffer->ClearAttachment(1, -1);\n\n\t\tswitch (m_SceneState)\n\t\t{\n\t\t\tcase SceneState::Edit:\n\t\t\t{\n\t\t\t\tif (m_ViewportFocused)\n\t\t\t\t\tm_CameraController.OnUpdate(ts);\n\n\t\t\t\tm_EditorCamera.OnUpdate(ts);\n\n\t\t\t\tm_ActiveScene->OnUpdateEditor(ts, m_EditorCamera);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SceneState::Simulate:\n\t\t\t{\n\t\t\t\tm_EditorCamera.OnUpdate(ts);\n\n\t\t\t\tm_ActiveScene->OnUpdateSimulation(ts, m_EditorCamera);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SceneState::Play:\n\t\t\t{\n\t\t\t\tm_ActiveScene->OnUpdateRuntime(ts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tauto[mx, my] = ImGui::GetMousePos();\n\t\tmx -= m_ViewportBounds[0].x;\n\t\tmy -= m_ViewportBounds[0].y;\n\t\tglm::vec2 viewportSize = m_ViewportBounds[1] - m_ViewportBounds[0];\n\t\tmy = viewportSize.y - my;\n\t\tint mouseX = (int)mx;\n\t\tint mouseY = (int)my;\n\n\t\tif (mouseX >= 0 && mouseY >= 0 && mouseX < (int)viewportSize.x && mouseY < (int)viewportSize.y)\n\t\t{\n\t\t\tint pixelData = m_Framebuffer->ReadPixel(1, mouseX, mouseY);\n\t\t\tm_HoveredEntity = pixelData == -1 ? Entity() : Entity((entt::entity)pixelData, m_ActiveScene.get());\n\t\t}\n\n\t\tOnOverlayRender();\n\n\t\tm_Framebuffer->Unbind();\n\t}\n\n\tvoid EditorLayer::OnImGuiRender()\n\t{\n\t\tHZ_PROFILE_FUNCTION();\n\n\t\t// Note: Switch this to true to enable dockspace\n\t\tstatic bool dockspaceOpen = true;\n\t\tstatic bool opt_fullscreen_persistant = true;\n\t\tbool opt_fullscreen = opt_fullscreen_persistant;\n\t\tstatic ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_None;\n\n\t\t// We are using the ImGuiWindowFlags_NoDocking flag to make the parent window not dockable into,\n\t\t// because it would be confusing to have two docking targets within each others.\n\t\tImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDocking;\n\t\tif (opt_fullscreen)\n\t\t{\n\t\t\tImGuiViewport* viewport = ImGui::GetMainViewport();\n\t\t\tImGui::SetNextWindowPos(viewport->Pos);\n\t\t\tImGui::SetNextWindowSize(viewport->Size);\n\t\t\tImGui::SetNextWindowViewport(viewport->ID);\n\t\t\tImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);\n\t\t\tImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);\n\t\t\twindow_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;\n\t\t\twindow_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;\n\t\t}\n\n\t\t// When using ImGuiDockNodeFlags_PassthruCentralNode, DockSpace() will render our background and handle the pass-thru hole, so we ask Begin() to not render a background.\n\t\tif (dockspace_flags & ImGuiDockNodeFlags_PassthruCentralNode)\n\t\t\twindow_flags |= ImGuiWindowFlags_NoBackground;\n\n\t\t// Important: note that we proceed even if Begin() returns false (aka window is collapsed).\n\t\t// This is because we want to keep our DockSpace() active. If a DockSpace() is inactive, \n\t\t// all active windows docked into it will lose their parent and become undocked.\n\t\t// We cannot preserve the docking relationship between an active window and an inactive docking, otherwise \n\t\t// any change of dockspace/settings would lead to windows being stuck in limbo and never being visible.\n\t\tImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));\n\t\tImGui::Begin(\"DockSpace Demo\", &dockspaceOpen, window_flags);\n\t\tImGui::PopStyleVar();\n\n\t\tif (opt_fullscreen)\n\t\t\tImGui::PopStyleVar(2);\n\n\t\t// DockSpace\n\t\tImGuiIO& io = ImGui::GetIO();\n\t\tImGuiStyle& style = ImGui::GetStyle();\n\t\tfloat minWinSizeX = style.WindowMinSize.x;\n\t\tstyle.WindowMinSize.x = 370.0f;\n\t\tif (io.ConfigFlags & ImGuiConfigFlags_DockingEnable)\n\t\t{\n\t\t\tImGuiID dockspace_id = ImGui::GetID(\"MyDockSpace\");\n\t\t\tImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);\n\t\t}\n\n\t\tstyle.WindowMinSize.x = minWinSizeX;\n\n\t\tif (ImGui::BeginMenuBar())\n\t\t{\n\t\t\tif (ImGui::BeginMenu(\"File\"))\n\t\t\t{\n\t\t\t\tif (ImGui::MenuItem(\"Open Project...\", \"Ctrl+O\"))\n\t\t\t\t\tOpenProject();\n\n\t\t\t\tImGui::Separator();\n\n\t\t\t\tif (ImGui::MenuItem(\"New Scene\", \"Ctrl+N\"))\n\t\t\t\t\tNewScene();\n\n\t\t\t\tif (ImGui::MenuItem(\"Save Scene\", \"Ctrl+S\"))\n\t\t\t\t\tSaveScene();\n\n\t\t\t\tif (ImGui::MenuItem(\"Save Scene As...\", \"Ctrl+Shift+S\"))\n\t\t\t\t\tSaveSceneAs();\n\n\t\t\t\tImGui::Separator();\n\n\t\t\t\tif (ImGui::MenuItem(\"Exit\"))\n\t\t\t\t\tApplication::Get().Close();\n\t\t\t\t\n\t\t\t\tImGui::EndMenu();\n\t\t\t}\n\n\t\t\tif (ImGui::BeginMenu(\"Script\"))\n\t\t\t{\n\t\t\t\tif (ImGui::MenuItem(\"Reload assembly\", \"Ctrl+R\"))\n\t\t\t\t\tScriptEngine::ReloadAssembly();\n\t\t\t\t\n\t\t\t\tImGui::EndMenu();\n\t\t\t}\n\n\t\t\tImGui::EndMenuBar();\n\t\t}\n\n\t\tm_SceneHierarchyPanel.OnImGuiRender();\n\t\tm_ContentBrowserPanel->OnImGuiRender();\n\n\t\tImGui::Begin(\"Stats\");\n\n#if 0\n\t\tstd::string name = \"None\";\n\t\tif (m_HoveredEntity)\n\t\t\tname = m_HoveredEntity.GetComponent<TagComponent>().Tag;\n\t\tImGui::Text(\"Hovered Entity: %s\", name.c_str());\n#endif\n\n\t\tauto stats = Renderer2D::GetStats();\n\t\tImGui::Text(\"Renderer2D Stats:\");\n\t\tImGui::Text(\"Draw Calls: %d\", stats.DrawCalls);\n\t\tImGui::Text(\"Quads: %d\", stats.QuadCount);\n\t\tImGui::Text(\"Vertices: %d\", stats.GetTotalVertexCount());\n\t\tImGui::Text(\"Indices: %d\", stats.GetTotalIndexCount());\n\n\t\tImGui::End();\n\n\t\tImGui::Begin(\"Settings\");\n\t\tImGui::Checkbox(\"Show physics colliders\", &m_ShowPhysicsColliders);\n\n\t\tImGui::Image((ImTextureID)s_Font->GetAtlasTexture()->GetRendererID(), { 512,512 }, {0, 1}, {1, 0});\n\n\n\t\tImGui::End();\n\n\t\tImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0, 0 });\n\t\tImGui::Begin(\"Viewport\");\n\t\tauto viewportMinRegion = ImGui::GetWindowContentRegionMin();\n\t\tauto viewportMaxRegion = ImGui::GetWindowContentRegionMax();\n\t\tauto viewportOffset = ImGui::GetWindowPos();\n\t\tm_ViewportBounds[0] = { viewportMinRegion.x + viewportOffset.x, viewportMinRegion.y + viewportOffset.y };\n\t\tm_ViewportBounds[1] = { viewportMaxRegion.x + viewportOffset.x, viewportMaxRegion.y + viewportOffset.y };\n\n\t\tm_ViewportFocused = ImGui::IsWindowFocused();\n\t\tm_ViewportHovered = ImGui::IsWindowHovered();\n\n\t\tApplication::Get().GetImGuiLayer()->BlockEvents(!m_ViewportHovered);\n\n\t\tImVec2 viewportPanelSize = ImGui::GetContentRegionAvail();\n\t\tm_ViewportSize = { viewportPanelSize.x, viewportPanelSize.y };\n\n\t\tuint64_t textureID = m_Framebuffer->GetColorAttachmentRendererID();\n\t\tImGui::Image(reinterpret_cast<void*>(textureID), ImVec2{ m_ViewportSize.x, m_ViewportSize.y }, ImVec2{ 0, 1 }, ImVec2{ 1, 0 });\n\n\t\tif (ImGui::BeginDragDropTarget())\n\t\t{\n\t\t\tif (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(\"CONTENT_BROWSER_ITEM\"))\n\t\t\t{\n\t\t\t\tconst wchar_t* path = (const wchar_t*)payload->Data;\n\t\t\t\tOpenScene(path);\n\t\t\t}\n\t\t\tImGui::EndDragDropTarget();\n\t\t}\n\n\t\t// Gizmos\n\t\tEntity selectedEntity = m_SceneHierarchyPanel.GetSelectedEntity();\n\t\tif (selectedEntity && m_GizmoType != -1)\n\t\t{\n\t\t\tImGuizmo::SetOrthographic(false);\n\t\t\tImGuizmo::SetDrawlist();\n\n\t\t\tImGuizmo::SetRect(m_ViewportBounds[0].x, m_ViewportBounds[0].y, m_ViewportBounds[1].x - m_ViewportBounds[0].x, m_ViewportBounds[1].y - m_ViewportBounds[0].y);\n\n\t\t\t// Camera\n\t\t\t\n\t\t\t// Runtime camera from entity\n\t\t\t// auto cameraEntity = m_ActiveScene->GetPrimaryCameraEntity();\n\t\t\t// const auto& camera = cameraEntity.GetComponent<CameraComponent>().Camera;\n\t\t\t// const glm::mat4& cameraProjection = camera.GetProjection();\n\t\t\t// glm::mat4 cameraView = glm::inverse(cameraEntity.GetComponent<TransformComponent>().GetTransform());\n\n\t\t\t// Editor camera\n\t\t\tconst glm::mat4& cameraProjection = m_EditorCamera.GetProjection();\n\t\t\tglm::mat4 cameraView = m_EditorCamera.GetViewMatrix();\n\n\t\t\t// Entity transform\n\t\t\tauto& tc = selectedEntity.GetComponent<TransformComponent>();\n\t\t\tglm::mat4 transform = tc.GetTransform();\n\n\t\t\t// Snapping\n\t\t\tbool snap = Input::IsKeyPressed(Key::LeftControl);\n\t\t\tfloat snapValue = 0.5f; // Snap to 0.5m for translation/scale\n\t\t\t// Snap to 45 degrees for rotation\n\t\t\tif (m_GizmoType == ImGuizmo::OPERATION::ROTATE)\n\t\t\t\tsnapValue = 45.0f;\n\n\t\t\tfloat snapValues[3] = { snapValue, snapValue, snapValue };\n\n\t\t\tImGuizmo::Manipulate(glm::value_ptr(cameraView), glm::value_ptr(cameraProjection),\n\t\t\t\t(ImGuizmo::OPERATION)m_GizmoType, ImGuizmo::LOCAL, glm::value_ptr(transform),\n\t\t\t\tnullptr, snap ? snapValues : nullptr);\n\n\t\t\tif (ImGuizmo::IsUsing())\n\t\t\t{\n\t\t\t\tglm::vec3 translation, rotation, scale;\n\t\t\t\tMath::DecomposeTransform(transform, translation, rotation, scale);\n\n\t\t\t\tglm::vec3 deltaRotation = rotation - tc.Rotation;\n\t\t\t\ttc.Translation = translation;\n\t\t\t\ttc.Rotation += deltaRotation;\n\t\t\t\ttc.Scale = scale;\n\t\t\t}\n\t\t}\n\n\n\t\tImGui::End();\n\t\tImGui::PopStyleVar();\n\n\t\tUI_Toolbar();\n\n\t\tImGui::End();\n\t}\n\n\tvoid EditorLayer::UI_Toolbar()\n\t{\n\t\tImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 2));\n\t\tImGui::PushStyleVar(ImGuiStyleVar_ItemInnerSpacing, ImVec2(0, 0));\n\t\tImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));\n\t\tauto& colors = ImGui::GetStyle().Colors;\n\t\tconst auto& buttonHovered = colors[ImGuiCol_ButtonHovered];\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(buttonHovered.x, buttonHovered.y, buttonHovered.z, 0.5f));\n\t\tconst auto& buttonActive = colors[ImGuiCol_ButtonActive];\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(buttonActive.x, buttonActive.y, buttonActive.z, 0.5f));\n\n\t\tImGui::Begin(\"##toolbar\", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);\n\n\t\tbool toolbarEnabled = (bool)m_ActiveScene;\n\n\t\tImVec4 tintColor = ImVec4(1, 1, 1, 1);\n\t\tif (!toolbarEnabled)\n\t\t\ttintColor.w = 0.5f;\n\n\t\tfloat size = ImGui::GetWindowHeight() - 4.0f;\n\t\tImGui::SetCursorPosX((ImGui::GetWindowContentRegionMax().x * 0.5f) - (size * 0.5f));\n\n\t\tbool hasPlayButton = m_SceneState == SceneState::Edit || m_SceneState == SceneState::Play;\n\t\tbool hasSimulateButton = m_SceneState == SceneState::Edit || m_SceneState == SceneState::Simulate;\n\t\tbool hasPauseButton = m_SceneState != SceneState::Edit;\n\n\t\tif (hasPlayButton)\n\t\t{\n\t\t\tRef<Texture2D> icon = (m_SceneState == SceneState::Edit || m_SceneState == SceneState::Simulate) ? m_IconPlay : m_IconStop;\n\t\t\tif (ImGui::ImageButton((ImTextureID)(uint64_t)icon->GetRendererID(), ImVec2(size, size), ImVec2(0, 0), ImVec2(1, 1), 0, ImVec4(0.0f, 0.0f, 0.0f, 0.0f), tintColor) && toolbarEnabled)\n\t\t\t{\n\t\t\t\tif (m_SceneState == SceneState::Edit || m_SceneState == SceneState::Simulate)\n\t\t\t\t\tOnScenePlay();\n\t\t\t\telse if (m_SceneState == SceneState::Play)\n\t\t\t\t\tOnSceneStop();\n\t\t\t}\n\t\t}\n\n\t\tif (hasSimulateButton)\n\t\t{\n\t\t\tif (hasPlayButton)\n\t\t\t\tImGui::SameLine();\n\n\t\t\tRef<Texture2D> icon = (m_SceneState == SceneState::Edit || m_SceneState == SceneState::Play) ? m_IconSimulate : m_IconStop;\n\t\t\tif (ImGui::ImageButton((ImTextureID)(uint64_t)icon->GetRendererID(), ImVec2(size, size), ImVec2(0, 0), ImVec2(1, 1), 0, ImVec4(0.0f, 0.0f, 0.0f, 0.0f), tintColor) && toolbarEnabled)\n\t\t\t{\n\t\t\t\tif (m_SceneState == SceneState::Edit || m_SceneState == SceneState::Play)\n\t\t\t\t\tOnSceneSimulate();\n\t\t\t\telse if (m_SceneState == SceneState::Simulate)\n\t\t\t\t\tOnSceneStop();\n\t\t\t}\n\t\t}\n\t\tif (hasPauseButton)\n\t\t{\n\t\t\tbool isPaused = m_ActiveScene->IsPaused();\n\t\t\tImGui::SameLine();\n\t\t\t{\n\t\t\t\tRef<Texture2D> icon = m_IconPause;\n\t\t\t\tif (ImGui::ImageButton((ImTextureID)(uint64_t)icon->GetRendererID(), ImVec2(size, size), ImVec2(0, 0), ImVec2(1, 1), 0, ImVec4(0.0f, 0.0f, 0.0f, 0.0f), tintColor) && toolbarEnabled)\n\t\t\t\t{\n\t\t\t\t\tm_ActiveScene->SetPaused(!isPaused);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Step button\n\t\t\tif (isPaused)\n\t\t\t{\n\t\t\t\tImGui::SameLine();\n\t\t\t\t{\n\t\t\t\t\tRef<Texture2D> icon = m_IconStep;\n\t\t\t\t\tbool isPaused = m_ActiveScene->IsPaused();\n\t\t\t\t\tif (ImGui::ImageButton((ImTextureID)(uint64_t)icon->GetRendererID(), ImVec2(size, size), ImVec2(0, 0), ImVec2(1, 1), 0, ImVec4(0.0f, 0.0f, 0.0f, 0.0f), tintColor) && toolbarEnabled)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_ActiveScene->Step();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tImGui::PopStyleVar(2);\n\t\tImGui::PopStyleColor(3);\n\t\tImGui::End();\n\t}\n\n\tvoid EditorLayer::OnEvent(Event& e)\n\t{\n\t\tm_CameraController.OnEvent(e);\n\t\tif (m_SceneState == SceneState::Edit)\n\t\t{\n\t\t\tm_EditorCamera.OnEvent(e);\n\t\t}\n\n\t\tEventDispatcher dispatcher(e);\n\t\tdispatcher.Dispatch<KeyPressedEvent>(HZ_BIND_EVENT_FN(EditorLayer::OnKeyPressed));\n\t\tdispatcher.Dispatch<MouseButtonPressedEvent>(HZ_BIND_EVENT_FN(EditorLayer::OnMouseButtonPressed));\n\t}\n\n\tbool EditorLayer::OnKeyPressed(KeyPressedEvent& e)\n\t{\n\t\t// Shortcuts\n\t\tif (e.IsRepeat())\n\t\t\treturn false;\n\n\t\tbool control = Input::IsKeyPressed(Key::LeftControl) || Input::IsKeyPressed(Key::RightControl);\n\t\tbool shift = Input::IsKeyPressed(Key::LeftShift) || Input::IsKeyPressed(Key::RightShift);\n\n\t\tswitch (e.GetKeyCode())\n\t\t{\n\t\t\tcase Key::N:\n\t\t\t{\n\t\t\t\tif (control)\n\t\t\t\t\tNewScene();\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Key::O:\n\t\t\t{\n\t\t\t\tif (control)\n\t\t\t\t\tOpenProject();\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Key::S:\n\t\t\t{\n\t\t\t\tif (control)\n\t\t\t\t{\n\t\t\t\t\tif (shift)\n\t\t\t\t\t\tSaveSceneAs();\n\t\t\t\t\telse\n\t\t\t\t\t\tSaveScene();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Scene Commands\n\t\t\tcase Key::D:\n\t\t\t{\n\t\t\t\tif (control)\n\t\t\t\t\tOnDuplicateEntity();\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Gizmos\n\t\t\tcase Key::Q:\n\t\t\t{\n\t\t\t\tif (!ImGuizmo::IsUsing())\n\t\t\t\t\tm_GizmoType = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Key::W:\n\t\t\t{\n\t\t\t\tif (!ImGuizmo::IsUsing())\n\t\t\t\t\tm_GizmoType = ImGuizmo::OPERATION::TRANSLATE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Key::E:\n\t\t\t{\n\t\t\t\tif (!ImGuizmo::IsUsing())\n\t\t\t\t\tm_GizmoType = ImGuizmo::OPERATION::ROTATE;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Key::R:\n\t\t\t{\n\t\t\t\tif (control)\n\t\t\t\t{\n\t\t\t\t\tScriptEngine::ReloadAssembly();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (!ImGuizmo::IsUsing())\n\t\t\t\t\t\tm_GizmoType = ImGuizmo::OPERATION::SCALE;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Key::Delete:\n\t\t\t{\n\t\t\t\tif (Application::Get().GetImGuiLayer()->GetActiveWidgetID() == 0)\n\t\t\t\t{\n\t\t\t\t\tEntity selectedEntity = m_SceneHierarchyPanel.GetSelectedEntity();\n\t\t\t\t\tif (selectedEntity)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_SceneHierarchyPanel.SetSelectedEntity({});\n\t\t\t\t\t\tm_ActiveScene->DestroyEntity(selectedEntity);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tbool EditorLayer::OnMouseButtonPressed(MouseButtonPressedEvent& e)\n\t{\n\t\tif (e.GetMouseButton() == Mouse::ButtonLeft)\n\t\t{\n\t\t\tif (m_ViewportHovered && !ImGuizmo::IsOver() && !Input::IsKeyPressed(Key::LeftAlt))\n\t\t\t\tm_SceneHierarchyPanel.SetSelectedEntity(m_HoveredEntity);\n\t\t}\n\t\treturn false;\n\t}\n\n\tvoid EditorLayer::OnOverlayRender()\n\t{\n\t\tif (m_SceneState == SceneState::Play)\n\t\t{\n\t\t\tEntity camera = m_ActiveScene->GetPrimaryCameraEntity();\n\t\t\tif (!camera)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tRenderer2D::BeginScene(camera.GetComponent<CameraComponent>().Camera, camera.GetComponent<TransformComponent>().GetTransform());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tRenderer2D::BeginScene(m_EditorCamera);\n\t\t}\n\n\t\tif (m_ShowPhysicsColliders)\n\t\t{\n\t\t\t// Box Colliders\n\t\t\t{\n\t\t\t\tauto view = m_ActiveScene->GetAllEntitiesWith<TransformComponent, BoxCollider2DComponent>();\n\t\t\t\tfor (auto entity : view)\n\t\t\t\t{\n\t\t\t\t\tauto [tc, bc2d] = view.get<TransformComponent, BoxCollider2DComponent>(entity);\n\n\t\t\t\t\tglm::vec3 translation = tc.Translation + glm::vec3(bc2d.Offset, 0.001f);\n\t\t\t\t\tglm::vec3 scale = tc.Scale * glm::vec3(bc2d.Size * 2.0f, 1.0f);\n\n\t\t\t\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), tc.Translation)\n\t\t\t\t\t\t* glm::rotate(glm::mat4(1.0f), tc.Rotation.z, glm::vec3(0.0f, 0.0f, 1.0f))\n\t\t\t\t\t\t* glm::translate(glm::mat4(1.0f), glm::vec3(bc2d.Offset, 0.001f))\n\t\t\t\t\t\t* glm::scale(glm::mat4(1.0f), scale);\n\t\t\t\t\n\t\t\t\t\tRenderer2D::DrawRect(transform, glm::vec4(0, 1, 0, 1));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Circle Colliders\n\t\t\t{\n\t\t\t\tauto view = m_ActiveScene->GetAllEntitiesWith<TransformComponent, CircleCollider2DComponent>();\n\t\t\t\tfor (auto entity : view)\n\t\t\t\t{\n\t\t\t\t\tauto [tc, cc2d] = view.get<TransformComponent, CircleCollider2DComponent>(entity);\n\n\t\t\t\t\tglm::vec3 translation = tc.Translation + glm::vec3(cc2d.Offset, 0.001f);\n\t\t\t\t\tglm::vec3 scale = tc.Scale * glm::vec3(cc2d.Radius * 2.0f);\n\n\t\t\t\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), translation)\n\t\t\t\t\t\t* glm::scale(glm::mat4(1.0f), scale);\n\n\t\t\t\t\tRenderer2D::DrawCircle(transform, glm::vec4(0, 1, 0, 1), 0.01f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw selected entity outline \n\t\tif (Entity selectedEntity = m_SceneHierarchyPanel.GetSelectedEntity())\n\t\t{\n\t\t\tconst TransformComponent& transform = selectedEntity.GetComponent<TransformComponent>();\n\t\t\tRenderer2D::DrawRect(transform.GetTransform(), glm::vec4(1.0f, 0.5f, 0.0f, 1.0f));\n\t\t}\n\n\t\tRenderer2D::EndScene();\n\t}\n\n\tvoid EditorLayer::NewProject()\n\t{\n\t\tProject::New();\n\t}\n\n\tvoid EditorLayer::OpenProject(const std::filesystem::path& path)\n\t{\n\t\tif (Project::Load(path))\n\t\t{\n\t\t\tScriptEngine::Init();\n\n\t\t\tauto startScenePath = Project::GetAssetFileSystemPath(Project::GetActive()->GetConfig().StartScene);\n\t\t\tOpenScene(startScenePath);\n\t\t\tm_ContentBrowserPanel = CreateScope<ContentBrowserPanel>();\n\t\t\t \n\t\t}\n\t}\n\n\tbool EditorLayer::OpenProject()\n\t{\n\t\tstd::string filepath = FileDialogs::OpenFile(\"Hazel Project (*.hproj)\\0*.hproj\\0\");\n\t\tif (filepath.empty())\n\t\t\treturn false;\n\n\t\tOpenProject(filepath);\n\t\treturn true;\n\t}\n\n\tvoid EditorLayer::SaveProject()\n\t{\n\t\t// Project::SaveActive();\n\t}\n\n\tvoid EditorLayer::NewScene()\n\t{\n\t\tm_ActiveScene = CreateRef<Scene>();\n\t\tm_SceneHierarchyPanel.SetContext(m_ActiveScene);\n\t\t\n\t\tm_EditorScenePath = std::filesystem::path();\n\t}\n\n\tvoid EditorLayer::OpenScene()\n\t{\n\t\tstd::string filepath = FileDialogs::OpenFile(\"Hazel Scene (*.hazel)\\0*.hazel\\0\");\n\t\tif (!filepath.empty())\n\t\t\tOpenScene(filepath);\n\t}\n\n\tvoid EditorLayer::OpenScene(const std::filesystem::path& path)\n\t{\n\t\tif (m_SceneState != SceneState::Edit)\n\t\t\tOnSceneStop();\n\n\t\tif (path.extension().string() != \".hazel\")\n\t\t{\n\t\t\tHZ_WARN(\"Could not load {0} - not a scene file\", path.filename().string());\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tRef<Scene> newScene = CreateRef<Scene>();\n\t\tSceneSerializer serializer(newScene);\n\t\tif (serializer.Deserialize(path.string()))\n\t\t{\n\t\t\tm_EditorScene = newScene;\n\t\t\tm_SceneHierarchyPanel.SetContext(m_EditorScene);\n\n\t\t\tm_ActiveScene = m_EditorScene;\n\t\t\tm_EditorScenePath = path;\n\t\t}\n\t}\n\n\tvoid EditorLayer::SaveScene()\n\t{\n\t\tif (!m_EditorScenePath.empty())\n\t\t\tSerializeScene(m_ActiveScene, m_EditorScenePath);\n\t\telse\n\t\t\tSaveSceneAs();\n\t}\n\n\tvoid EditorLayer::SaveSceneAs()\n\t{\n\t\tstd::string filepath = FileDialogs::SaveFile(\"Hazel Scene (*.hazel)\\0*.hazel\\0\");\n\t\tif (!filepath.empty())\n\t\t{\n\t\t\tSerializeScene(m_ActiveScene, filepath);\n\t\t\tm_EditorScenePath = filepath;\n\t\t}\n\t}\n\n\tvoid EditorLayer::SerializeScene(Ref<Scene> scene, const std::filesystem::path& path)\n\t{\n\t\tSceneSerializer serializer(scene);\n\t\tserializer.Serialize(path.string());\n\t}\n\n\tvoid EditorLayer::OnScenePlay()\n\t{\n\t\tif (m_SceneState == SceneState::Simulate)\n\t\t\tOnSceneStop();\n\n\t\tm_SceneState = SceneState::Play;\n\n\t\tm_ActiveScene = Scene::Copy(m_EditorScene);\n\t\tm_ActiveScene->OnRuntimeStart();\n\n\t\tm_SceneHierarchyPanel.SetContext(m_ActiveScene);\n\t}\n\n\tvoid EditorLayer::OnSceneSimulate()\n\t{\n\t\tif (m_SceneState == SceneState::Play)\n\t\t\tOnSceneStop();\n\n\t\tm_SceneState = SceneState::Simulate;\n\n\t\tm_ActiveScene = Scene::Copy(m_EditorScene);\n\t\tm_ActiveScene->OnSimulationStart();\n\n\t\tm_SceneHierarchyPanel.SetContext(m_ActiveScene);\n\t}\n\n\tvoid EditorLayer::OnSceneStop()\n\t{\n\t\tHZ_CORE_ASSERT(m_SceneState == SceneState::Play || m_SceneState == SceneState::Simulate);\n\n\t\tif (m_SceneState == SceneState::Play)\n\t\t\tm_ActiveScene->OnRuntimeStop();\n\t\telse if (m_SceneState == SceneState::Simulate)\n\t\t\tm_ActiveScene->OnSimulationStop();\n\n\t\tm_SceneState = SceneState::Edit;\n\n\t\tm_ActiveScene = m_EditorScene;\n\n\t\tm_SceneHierarchyPanel.SetContext(m_ActiveScene);\n\t}\n\n\tvoid EditorLayer::OnScenePause()\n\t{\n\t\tif (m_SceneState == SceneState::Edit)\n\t\t\treturn;\n\n\t\tm_ActiveScene->SetPaused(true);\n\t}\n\n\tvoid EditorLayer::OnDuplicateEntity()\n\t{\n\t\tif (m_SceneState != SceneState::Edit)\n\t\t\treturn;\n\n\t\tEntity selectedEntity = m_SceneHierarchyPanel.GetSelectedEntity();\n\t\tif (selectedEntity)\n\t\t{\n\t\t\tEntity newEntity = m_EditorScene->DuplicateEntity(selectedEntity);\n\t\t\tm_SceneHierarchyPanel.SetSelectedEntity(newEntity);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "Hazelnut/src/EditorLayer.h",
    "content": "#pragma once\n\n#include \"Hazel.h\"\n#include \"Panels/SceneHierarchyPanel.h\"\n#include \"Panels/ContentBrowserPanel.h\"\n\n#include \"Hazel/Renderer/EditorCamera.h\"\n\nnamespace Hazel {\n\n\tclass EditorLayer : public Layer\n\t{\n\tpublic:\n\t\tEditorLayer();\n\t\tvirtual ~EditorLayer() = default;\n\n\t\tvirtual void OnAttach() override;\n\t\tvirtual void OnDetach() override;\n\n\t\tvoid OnUpdate(Timestep ts) override;\n\t\tvirtual void OnImGuiRender() override;\n\t\tvoid OnEvent(Event& e) override;\n\tprivate:\n\t\tbool OnKeyPressed(KeyPressedEvent& e);\n\t\tbool OnMouseButtonPressed(MouseButtonPressedEvent& e);\n\t\t\n\t\tvoid OnOverlayRender();\n\n\t\tvoid NewProject();\n\t\tbool OpenProject();\n\t\tvoid OpenProject(const std::filesystem::path& path);\n\t\tvoid SaveProject();\n\n\t\tvoid NewScene();\n\t\tvoid OpenScene();\n\t\tvoid OpenScene(const std::filesystem::path& path);\n\t\tvoid SaveScene();\n\t\tvoid SaveSceneAs();\n\n\t\tvoid SerializeScene(Ref<Scene> scene, const std::filesystem::path& path);\n\n\t\tvoid OnScenePlay();\n\t\tvoid OnSceneSimulate();\n\t\tvoid OnSceneStop();\n\t\tvoid OnScenePause();\n\n\t\tvoid OnDuplicateEntity();\n\n\t\t// UI Panels\n\t\tvoid UI_Toolbar();\n\tprivate:\n\t\tHazel::OrthographicCameraController m_CameraController;\n\n\t\t// Temp\n\t\tRef<VertexArray> m_SquareVA;\n\t\tRef<Shader> m_FlatColorShader;\n\t\tRef<Framebuffer> m_Framebuffer;\n\n\t\tRef<Scene> m_ActiveScene;\n\t\tRef<Scene> m_EditorScene;\n\t\tstd::filesystem::path m_EditorScenePath;\n\t\tEntity m_SquareEntity;\n\t\tEntity m_CameraEntity;\n\t\tEntity m_SecondCamera;\n\t\t\n\t\tEntity m_HoveredEntity;\n\n\t\tbool m_PrimaryCamera = true;\n\n\t\tEditorCamera m_EditorCamera;\n\n\t\tRef<Texture2D> m_CheckerboardTexture;\n\n\t\tbool m_ViewportFocused = false, m_ViewportHovered = false;\n\t\tglm::vec2 m_ViewportSize = { 0.0f, 0.0f };\n\t\tglm::vec2 m_ViewportBounds[2];\n\n\t\tglm::vec4 m_SquareColor = { 0.2f, 0.3f, 0.8f, 1.0f };\n\n\t\tint m_GizmoType = -1;\n\n\t\tbool m_ShowPhysicsColliders = false;\n\n\t\tenum class SceneState\n\t\t{\n\t\t\tEdit = 0, Play = 1, Simulate = 2\n\t\t};\n\t\tSceneState m_SceneState = SceneState::Edit;\n\n\t\t// Panels\n\t\tSceneHierarchyPanel m_SceneHierarchyPanel;\n\t\tScope<ContentBrowserPanel> m_ContentBrowserPanel;\n\n\t\t// Editor resources\n\t\tRef<Texture2D> m_IconPlay, m_IconPause, m_IconStep, m_IconSimulate, m_IconStop;\n\t};\n\n}\n"
  },
  {
    "path": "Hazelnut/src/HazelnutApp.cpp",
    "content": "#include <Hazel.h>\n#include <Hazel/Core/EntryPoint.h>\n\n#include \"EditorLayer.h\"\n\nnamespace Hazel {\n\n\tclass Hazelnut : public Application\n\t{\n\tpublic:\n\t\tHazelnut(const ApplicationSpecification& spec)\n\t\t\t: Application(spec)\n\t\t{\n\t\t\tPushLayer(new EditorLayer());\n\t\t}\n\t};\n\n\tApplication* CreateApplication(ApplicationCommandLineArgs args)\n\t{\n\t\tApplicationSpecification spec;\n\t\tspec.Name = \"Hazelnut\";\n\t\tspec.CommandLineArgs = args;\n\n\t\treturn new Hazelnut(spec);\n\t}\n\n}\n"
  },
  {
    "path": "Hazelnut/src/Panels/ContentBrowserPanel.cpp",
    "content": "#include \"hzpch.h\"\n#include \"ContentBrowserPanel.h\"\n\n#include \"Hazel/Project/Project.h\"\n\n#include <imgui/imgui.h>\n\nnamespace Hazel {\n\n\tContentBrowserPanel::ContentBrowserPanel()\n\t\t: m_BaseDirectory(Project::GetAssetDirectory()), m_CurrentDirectory(m_BaseDirectory)\n\t{\n\t\tm_DirectoryIcon = Texture2D::Create(\"Resources/Icons/ContentBrowser/DirectoryIcon.png\");\n\t\tm_FileIcon = Texture2D::Create(\"Resources/Icons/ContentBrowser/FileIcon.png\");\n\t}\n\n\tvoid ContentBrowserPanel::OnImGuiRender()\n\t{\n\t\tImGui::Begin(\"Content Browser\");\n\n\t\tif (m_CurrentDirectory != std::filesystem::path(m_BaseDirectory))\n\t\t{\n\t\t\tif (ImGui::Button(\"<-\"))\n\t\t\t{\n\t\t\t\tm_CurrentDirectory = m_CurrentDirectory.parent_path();\n\t\t\t}\n\t\t}\n\n\t\tstatic float padding = 16.0f;\n\t\tstatic float thumbnailSize = 128.0f;\n\t\tfloat cellSize = thumbnailSize + padding;\n\n\t\tfloat panelWidth = ImGui::GetContentRegionAvail().x;\n\t\tint columnCount = (int)(panelWidth / cellSize);\n\t\tif (columnCount < 1)\n\t\t\tcolumnCount = 1;\n\n\t\tImGui::Columns(columnCount, 0, false);\n\n\t\tfor (auto& directoryEntry : std::filesystem::directory_iterator(m_CurrentDirectory))\n\t\t{\n\t\t\tconst auto& path = directoryEntry.path();\n\t\t\tstd::string filenameString = path.filename().string();\n\t\t\t\n\t\t\tImGui::PushID(filenameString.c_str());\n\t\t\tRef<Texture2D> icon = directoryEntry.is_directory() ? m_DirectoryIcon : m_FileIcon;\n\t\t\tImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));\n\t\t\tImGui::ImageButton((ImTextureID)icon->GetRendererID(), { thumbnailSize, thumbnailSize }, { 0, 1 }, { 1, 0 });\n\n\t\t\tif (ImGui::BeginDragDropSource())\n\t\t\t{\n\t\t\t\tstd::filesystem::path relativePath(path);\n\t\t\t\tconst wchar_t* itemPath = relativePath.c_str();\n\t\t\t\tImGui::SetDragDropPayload(\"CONTENT_BROWSER_ITEM\", itemPath, (wcslen(itemPath) + 1) * sizeof(wchar_t));\n\t\t\t\tImGui::EndDragDropSource();\n\t\t\t}\n\n\t\t\tImGui::PopStyleColor();\n\t\t\tif (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))\n\t\t\t{\n\t\t\t\tif (directoryEntry.is_directory())\n\t\t\t\t\tm_CurrentDirectory /= path.filename();\n\n\t\t\t}\n\t\t\tImGui::TextWrapped(filenameString.c_str());\n\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::PopID();\n\t\t}\n\n\t\tImGui::Columns(1);\n\n\t\tImGui::SliderFloat(\"Thumbnail Size\", &thumbnailSize, 16, 512);\n\t\tImGui::SliderFloat(\"Padding\", &padding, 0, 32);\n\n\t\t// TODO: status bar\n\t\tImGui::End();\n\t}\n\n}\n"
  },
  {
    "path": "Hazelnut/src/Panels/ContentBrowserPanel.h",
    "content": "#pragma once\n\n#include \"Hazel/Renderer/Texture.h\"\n\n#include <filesystem>\n\nnamespace Hazel {\n\n\tclass ContentBrowserPanel\n\t{\n\tpublic:\n\t\tContentBrowserPanel();\n\n\t\tvoid OnImGuiRender();\n\tprivate:\n\t\tstd::filesystem::path m_BaseDirectory;\n\t\tstd::filesystem::path m_CurrentDirectory;\n\t\t\n\t\tRef<Texture2D> m_DirectoryIcon;\n\t\tRef<Texture2D> m_FileIcon;\n\t};\n\n}\n"
  },
  {
    "path": "Hazelnut/src/Panels/SceneHierarchyPanel.cpp",
    "content": "#include \"SceneHierarchyPanel.h\"\n#include \"Hazel/Scene/Components.h\"\n\n#include \"Hazel/Scripting/ScriptEngine.h\"\n#include \"Hazel/UI/UI.h\"\n\n#include <imgui/imgui.h>\n#include <imgui/imgui_internal.h>\n#include <imgui/misc/cpp/imgui_stdlib.h>\n\n#include <glm/gtc/type_ptr.hpp>\n\n#include <cstring>\n\n/* The Microsoft C++ compiler is non-compliant with the C++ standard and needs\n * the following definition to disable a security warning on std::strncpy().\n */\n#ifdef _MSVC_LANG\n  #define _CRT_SECURE_NO_WARNINGS\n#endif\n\nnamespace Hazel {\n\n\tSceneHierarchyPanel::SceneHierarchyPanel(const Ref<Scene>& context)\n\t{\n\t\tSetContext(context);\n\t}\n\n\tvoid SceneHierarchyPanel::SetContext(const Ref<Scene>& context)\n\t{\n\t\tm_Context = context;\n\t\tm_SelectionContext = {};\n\t}\n\n\tvoid SceneHierarchyPanel::OnImGuiRender()\n\t{\n\t\tImGui::Begin(\"Scene Hierarchy\");\n\n\t\tif (m_Context)\n\t\t{\n\t\t\tm_Context->m_Registry.each([&](auto entityID)\n\t\t\t\t{\n\t\t\t\t\tEntity entity{ entityID , m_Context.get() };\n\t\t\t\t\tDrawEntityNode(entity);\n\t\t\t\t});\n\n\t\t\tif (ImGui::IsMouseDown(0) && ImGui::IsWindowHovered())\n\t\t\t\tm_SelectionContext = {};\n\n\t\t\t// Right-click on blank space\n\t\t\tif (ImGui::BeginPopupContextWindow(0, 1, false))\n\t\t\t{\n\t\t\t\tif (ImGui::MenuItem(\"Create Empty Entity\"))\n\t\t\t\t\tm_Context->CreateEntity(\"Empty Entity\");\n\n\t\t\t\tImGui::EndPopup();\n\t\t\t}\n\n\t\t}\n\t\tImGui::End();\n\n\t\tImGui::Begin(\"Properties\");\n\t\tif (m_SelectionContext)\n\t\t{\n\t\t\tDrawComponents(m_SelectionContext);\n\t\t}\n\n\t\tImGui::End();\n\t}\n\n\tvoid SceneHierarchyPanel::SetSelectedEntity(Entity entity)\n\t{\n\t\tm_SelectionContext = entity;\n\t}\n\n\tvoid SceneHierarchyPanel::DrawEntityNode(Entity entity)\n\t{\n\t\tauto& tag = entity.GetComponent<TagComponent>().Tag;\n\t\t\n\t\tImGuiTreeNodeFlags flags = ((m_SelectionContext == entity) ? ImGuiTreeNodeFlags_Selected : 0) | ImGuiTreeNodeFlags_OpenOnArrow;\n\t\tflags |= ImGuiTreeNodeFlags_SpanAvailWidth;\n\t\tbool opened = ImGui::TreeNodeEx((void*)(uint64_t)(uint32_t)entity, flags, tag.c_str());\n\t\tif (ImGui::IsItemClicked())\n\t\t{\n\t\t\tm_SelectionContext = entity;\n\t\t}\n\n\t\tbool entityDeleted = false;\n\t\tif (ImGui::BeginPopupContextItem())\n\t\t{\n\t\t\tif (ImGui::MenuItem(\"Delete Entity\"))\n\t\t\t\tentityDeleted = true;\n\n\t\t\tImGui::EndPopup();\n\t\t}\n\n\t\tif (opened)\n\t\t{\n\t\t\tImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_SpanAvailWidth;\n\t\t\tbool opened = ImGui::TreeNodeEx((void*)9817239, flags, tag.c_str());\n\t\t\tif (opened)\n\t\t\t\tImGui::TreePop();\n\t\t\tImGui::TreePop();\n\t\t}\n\n\t\tif (entityDeleted)\n\t\t{\n\t\t\tm_Context->DestroyEntity(entity);\n\t\t\tif (m_SelectionContext == entity)\n\t\t\t\tm_SelectionContext = {};\n\t\t}\n\t}\n\n\tstatic void DrawVec3Control(const std::string& label, glm::vec3& values, float resetValue = 0.0f, float columnWidth = 100.0f)\n\t{\n\t\tImGuiIO& io = ImGui::GetIO();\n\t\tauto boldFont = io.Fonts->Fonts[0];\n\n\t\tImGui::PushID(label.c_str());\n\n\t\tImGui::Columns(2);\n\t\tImGui::SetColumnWidth(0, columnWidth);\n\t\tImGui::Text(label.c_str());\n\t\tImGui::NextColumn();\n\n\t\tImGui::PushMultiItemsWidths(3, ImGui::CalcItemWidth());\n\t\tImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2{ 0, 0 });\n\n\t\tfloat lineHeight = GImGui->Font->FontSize + GImGui->Style.FramePadding.y * 2.0f;\n\t\tImVec2 buttonSize = { lineHeight + 3.0f, lineHeight };\n\n\t\tImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.9f, 0.2f, 0.2f, 1.0f });\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f });\n\t\tImGui::PushFont(boldFont);\n\t\tif (ImGui::Button(\"X\", buttonSize))\n\t\t\tvalues.x = resetValue;\n\t\tImGui::PopFont();\n\t\tImGui::PopStyleColor(3);\n\n\t\tImGui::SameLine();\n\t\tImGui::DragFloat(\"##X\", &values.x, 0.1f, 0.0f, 0.0f, \"%.2f\");\n\t\tImGui::PopItemWidth();\n\t\tImGui::SameLine();\n\n\t\tImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.3f, 0.8f, 0.3f, 1.0f });\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f });\n\t\tImGui::PushFont(boldFont);\n\t\tif (ImGui::Button(\"Y\", buttonSize))\n\t\t\tvalues.y = resetValue;\n\t\tImGui::PopFont();\n\t\tImGui::PopStyleColor(3);\n\n\t\tImGui::SameLine();\n\t\tImGui::DragFloat(\"##Y\", &values.y, 0.1f, 0.0f, 0.0f, \"%.2f\");\n\t\tImGui::PopItemWidth();\n\t\tImGui::SameLine();\n\n\t\tImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.2f, 0.35f, 0.9f, 1.0f });\n\t\tImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f });\n\t\tImGui::PushFont(boldFont);\n\t\tif (ImGui::Button(\"Z\", buttonSize))\n\t\t\tvalues.z = resetValue;\n\t\tImGui::PopFont();\n\t\tImGui::PopStyleColor(3);\n\n\t\tImGui::SameLine();\n\t\tImGui::DragFloat(\"##Z\", &values.z, 0.1f, 0.0f, 0.0f, \"%.2f\");\n\t\tImGui::PopItemWidth();\n\n\t\tImGui::PopStyleVar();\n\n\t\tImGui::Columns(1);\n\n\t\tImGui::PopID();\n\t}\n\t\n\ttemplate<typename T, typename UIFunction>\n\tstatic void DrawComponent(const std::string& name, Entity entity, UIFunction uiFunction)\n\t{\n\t\tconst ImGuiTreeNodeFlags treeNodeFlags = ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_FramePadding;\n\t\tif (entity.HasComponent<T>())\n\t\t{\n\t\t\tauto& component = entity.GetComponent<T>();\n\t\t\tImVec2 contentRegionAvailable = ImGui::GetContentRegionAvail();\n\n\t\t\tImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2{ 4, 4 });\n\t\t\tfloat lineHeight = GImGui->Font->FontSize + GImGui->Style.FramePadding.y * 2.0f;\n\t\t\tImGui::Separator();\n\t\t\tbool open = ImGui::TreeNodeEx((void*)typeid(T).hash_code(), treeNodeFlags, name.c_str());\n\t\t\tImGui::PopStyleVar(\n\t\t\t);\n\t\t\tImGui::SameLine(contentRegionAvailable.x - lineHeight * 0.5f);\n\t\t\tif (ImGui::Button(\"+\", ImVec2{ lineHeight, lineHeight }))\n\t\t\t{\n\t\t\t\tImGui::OpenPopup(\"ComponentSettings\");\n\t\t\t}\n\n\t\t\tbool removeComponent = false;\n\t\t\tif (ImGui::BeginPopup(\"ComponentSettings\"))\n\t\t\t{\n\t\t\t\tif (ImGui::MenuItem(\"Remove component\"))\n\t\t\t\t\tremoveComponent = true;\n\n\t\t\t\tImGui::EndPopup();\n\t\t\t}\n\n\t\t\tif (open)\n\t\t\t{\n\t\t\t\tuiFunction(component);\n\t\t\t\tImGui::TreePop();\n\t\t\t}\n\n\t\t\tif (removeComponent)\n\t\t\t\tentity.RemoveComponent<T>();\n\t\t}\n\t}\n\n\tvoid SceneHierarchyPanel::DrawComponents(Entity entity)\n\t{\n\t\tif (entity.HasComponent<TagComponent>())\n\t\t{\n\t\t\tauto& tag = entity.GetComponent<TagComponent>().Tag;\n\n\t\t\tchar buffer[256];\n\t\t\tmemset(buffer, 0, sizeof(buffer));\n\t\t\tstrncpy_s(buffer, sizeof(buffer), tag.c_str(), sizeof(buffer));\n\t\t\tif (ImGui::InputText(\"##Tag\", buffer, sizeof(buffer)))\n\t\t\t{\n\t\t\t\ttag = std::string(buffer);\n\t\t\t}\n\t\t}\n\n\t\tImGui::SameLine();\n\t\tImGui::PushItemWidth(-1);\n\n\t\tif (ImGui::Button(\"Add Component\"))\n\t\t\tImGui::OpenPopup(\"AddComponent\");\n\n\t\tif (ImGui::BeginPopup(\"AddComponent\"))\n\t\t{\n\t\t\tDisplayAddComponentEntry<CameraComponent>(\"Camera\");\n\t\t\tDisplayAddComponentEntry<ScriptComponent>(\"Script\");\n\t\t\tDisplayAddComponentEntry<SpriteRendererComponent>(\"Sprite Renderer\");\n\t\t\tDisplayAddComponentEntry<CircleRendererComponent>(\"Circle Renderer\");\n\t\t\tDisplayAddComponentEntry<Rigidbody2DComponent>(\"Rigidbody 2D\");\n\t\t\tDisplayAddComponentEntry<BoxCollider2DComponent>(\"Box Collider 2D\");\n\t\t\tDisplayAddComponentEntry<CircleCollider2DComponent>(\"Circle Collider 2D\");\n\t\t\tDisplayAddComponentEntry<TextComponent>(\"Text Component\");\n\n\t\t\tImGui::EndPopup();\n\t\t}\n\n\t\tImGui::PopItemWidth();\n\n\t\tDrawComponent<TransformComponent>(\"Transform\", entity, [](auto& component)\n\t\t{\n\t\t\tDrawVec3Control(\"Translation\", component.Translation);\n\t\t\tglm::vec3 rotation = glm::degrees(component.Rotation);\n\t\t\tDrawVec3Control(\"Rotation\", rotation);\n\t\t\tcomponent.Rotation = glm::radians(rotation);\n\t\t\tDrawVec3Control(\"Scale\", component.Scale, 1.0f);\n\t\t});\n\n\t\tDrawComponent<CameraComponent>(\"Camera\", entity, [](auto& component)\n\t\t{\n\t\t\tauto& camera = component.Camera;\n\n\t\t\tImGui::Checkbox(\"Primary\", &component.Primary);\n\n\t\t\tconst char* projectionTypeStrings[] = { \"Perspective\", \"Orthographic\" };\n\t\t\tconst char* currentProjectionTypeString = projectionTypeStrings[(int)camera.GetProjectionType()];\n\t\t\tif (ImGui::BeginCombo(\"Projection\", currentProjectionTypeString))\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < 2; i++)\n\t\t\t\t{\n\t\t\t\t\tbool isSelected = currentProjectionTypeString == projectionTypeStrings[i];\n\t\t\t\t\tif (ImGui::Selectable(projectionTypeStrings[i], isSelected))\n\t\t\t\t\t{\n\t\t\t\t\t\tcurrentProjectionTypeString = projectionTypeStrings[i];\n\t\t\t\t\t\tcamera.SetProjectionType((SceneCamera::ProjectionType)i);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isSelected)\n\t\t\t\t\t\tImGui::SetItemDefaultFocus();\n\t\t\t\t}\n\n\t\t\t\tImGui::EndCombo();\n\t\t\t}\n\n\t\t\tif (camera.GetProjectionType() == SceneCamera::ProjectionType::Perspective)\n\t\t\t{\n\t\t\t\tfloat perspectiveVerticalFov = glm::degrees(camera.GetPerspectiveVerticalFOV());\n\t\t\t\tif (ImGui::DragFloat(\"Vertical FOV\", &perspectiveVerticalFov))\n\t\t\t\t\tcamera.SetPerspectiveVerticalFOV(glm::radians(perspectiveVerticalFov));\n\n\t\t\t\tfloat perspectiveNear = camera.GetPerspectiveNearClip();\n\t\t\t\tif (ImGui::DragFloat(\"Near\", &perspectiveNear))\n\t\t\t\t\tcamera.SetPerspectiveNearClip(perspectiveNear);\n\n\t\t\t\tfloat perspectiveFar = camera.GetPerspectiveFarClip();\n\t\t\t\tif (ImGui::DragFloat(\"Far\", &perspectiveFar))\n\t\t\t\t\tcamera.SetPerspectiveFarClip(perspectiveFar);\n\t\t\t}\n\n\t\t\tif (camera.GetProjectionType() == SceneCamera::ProjectionType::Orthographic)\n\t\t\t{\n\t\t\t\tfloat orthoSize = camera.GetOrthographicSize();\n\t\t\t\tif (ImGui::DragFloat(\"Size\", &orthoSize))\n\t\t\t\t\tcamera.SetOrthographicSize(orthoSize);\n\n\t\t\t\tfloat orthoNear = camera.GetOrthographicNearClip();\n\t\t\t\tif (ImGui::DragFloat(\"Near\", &orthoNear))\n\t\t\t\t\tcamera.SetOrthographicNearClip(orthoNear);\n\n\t\t\t\tfloat orthoFar = camera.GetOrthographicFarClip();\n\t\t\t\tif (ImGui::DragFloat(\"Far\", &orthoFar))\n\t\t\t\t\tcamera.SetOrthographicFarClip(orthoFar);\n\n\t\t\t\tImGui::Checkbox(\"Fixed Aspect Ratio\", &component.FixedAspectRatio);\n\t\t\t}\n\t\t});\n\n\t\tDrawComponent<ScriptComponent>(\"Script\", entity, [entity, scene = m_Context](auto& component) mutable\n\t\t{\n\t\t\tbool scriptClassExists = ScriptEngine::EntityClassExists(component.ClassName);\n\n\t\t\tstatic char buffer[64];\n\t\t\tstrcpy_s(buffer, sizeof(buffer), component.ClassName.c_str());\n\n\t\t\tUI::ScopedStyleColor textColor(ImGuiCol_Text, ImVec4(0.9f, 0.2f, 0.3f, 1.0f), !scriptClassExists);\n\n\t\t\tif (ImGui::InputText(\"Class\", buffer, sizeof(buffer)))\n\t\t\t{\n\t\t\t\tcomponent.ClassName = buffer;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fields\n\t\t\tbool sceneRunning = scene->IsRunning();\n\t\t\tif (sceneRunning)\n\t\t\t{\n\t\t\t\tRef<ScriptInstance> scriptInstance = ScriptEngine::GetEntityScriptInstance(entity.GetUUID());\n\t\t\t\tif (scriptInstance)\n\t\t\t\t{\n\t\t\t\t\tconst auto& fields = scriptInstance->GetScriptClass()->GetFields();\n\t\t\t\t\tfor (const auto& [name, field] : fields)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (field.Type == ScriptFieldType::Float)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat data = scriptInstance->GetFieldValue<float>(name);\n\t\t\t\t\t\t\tif (ImGui::DragFloat(name.c_str(), &data))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tscriptInstance->SetFieldValue(name, data);\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}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (scriptClassExists)\n\t\t\t\t{\n\t\t\t\t\tRef<ScriptClass> entityClass = ScriptEngine::GetEntityClass(component.ClassName);\n\t\t\t\t\tconst auto& fields = entityClass->GetFields();\n\n\t\t\t\t\tauto& entityFields = ScriptEngine::GetScriptFieldMap(entity);\n\t\t\t\t\tfor (const auto& [name, field] : fields)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Field has been set in editor\n\t\t\t\t\t\tif (entityFields.find(name) != entityFields.end())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tScriptFieldInstance& scriptField = entityFields.at(name);\n\n\t\t\t\t\t\t\t// Display control to set it maybe\n\t\t\t\t\t\t\tif (field.Type == ScriptFieldType::Float)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfloat data = scriptField.GetValue<float>();\n\t\t\t\t\t\t\t\tif (ImGui::DragFloat(name.c_str(), &data))\n\t\t\t\t\t\t\t\t\tscriptField.SetValue(data);\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// Display control to set it maybe\n\t\t\t\t\t\t\tif (field.Type == ScriptFieldType::Float)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfloat data = 0.0f;\n\t\t\t\t\t\t\t\tif (ImGui::DragFloat(name.c_str(), &data))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tScriptFieldInstance& fieldInstance = entityFields[name];\n\t\t\t\t\t\t\t\t\tfieldInstance.Field = field;\n\t\t\t\t\t\t\t\t\tfieldInstance.SetValue(data);\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}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tDrawComponent<SpriteRendererComponent>(\"Sprite Renderer\", entity, [](auto& component)\n\t\t{\n\t\t\tImGui::ColorEdit4(\"Color\", glm::value_ptr(component.Color));\n\t\t\t\n\t\t\tImGui::Button(\"Texture\", ImVec2(100.0f, 0.0f));\n\t\t\tif (ImGui::BeginDragDropTarget())\n\t\t\t{\n\t\t\t\tif (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(\"CONTENT_BROWSER_ITEM\"))\n\t\t\t\t{\n\t\t\t\t\tconst wchar_t* path = (const wchar_t*)payload->Data;\n\t\t\t\t\tstd::filesystem::path texturePath(path);\n\t\t\t\t\tRef<Texture2D> texture = Texture2D::Create(texturePath.string());\n\t\t\t\t\tif (texture->IsLoaded())\n\t\t\t\t\t\tcomponent.Texture = texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tHZ_WARN(\"Could not load texture {0}\", texturePath.filename().string());\n\t\t\t\t}\n\t\t\t\tImGui::EndDragDropTarget();\n\t\t\t}\n\n\t\t\tImGui::DragFloat(\"Tiling Factor\", &component.TilingFactor, 0.1f, 0.0f, 100.0f);\n\t\t});\n\n\t\tDrawComponent<CircleRendererComponent>(\"Circle Renderer\", entity, [](auto& component)\n\t\t{\n\t\t\tImGui::ColorEdit4(\"Color\", glm::value_ptr(component.Color));\n\t\t\tImGui::DragFloat(\"Thickness\", &component.Thickness, 0.025f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Fade\", &component.Fade, 0.00025f, 0.0f, 1.0f);\n\t\t});\n\n\t\tDrawComponent<Rigidbody2DComponent>(\"Rigidbody 2D\", entity, [](auto& component)\n\t\t{\n\t\t\tconst char* bodyTypeStrings[] = { \"Static\", \"Dynamic\", \"Kinematic\"};\n\t\t\tconst char* currentBodyTypeString = bodyTypeStrings[(int)component.Type];\n\t\t\tif (ImGui::BeginCombo(\"Body Type\", currentBodyTypeString))\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < 2; i++)\n\t\t\t\t{\n\t\t\t\t\tbool isSelected = currentBodyTypeString == bodyTypeStrings[i];\n\t\t\t\t\tif (ImGui::Selectable(bodyTypeStrings[i], isSelected))\n\t\t\t\t\t{\n\t\t\t\t\t\tcurrentBodyTypeString = bodyTypeStrings[i];\n\t\t\t\t\t\tcomponent.Type = (Rigidbody2DComponent::BodyType)i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isSelected)\n\t\t\t\t\t\tImGui::SetItemDefaultFocus();\n\t\t\t\t}\n\n\t\t\t\tImGui::EndCombo();\n\t\t\t}\n\n\t\t\tImGui::Checkbox(\"Fixed Rotation\", &component.FixedRotation);\n\t\t});\n\n\t\tDrawComponent<BoxCollider2DComponent>(\"Box Collider 2D\", entity, [](auto& component)\n\t\t{\n\t\t\tImGui::DragFloat2(\"Offset\", glm::value_ptr(component.Offset));\n\t\t\tImGui::DragFloat2(\"Size\", glm::value_ptr(component.Size));\n\t\t\tImGui::DragFloat(\"Density\", &component.Density, 0.01f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Friction\", &component.Friction, 0.01f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Restitution\", &component.Restitution, 0.01f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Restitution Threshold\", &component.RestitutionThreshold, 0.01f, 0.0f);\n\t\t});\n\n\t\tDrawComponent<CircleCollider2DComponent>(\"Circle Collider 2D\", entity, [](auto& component)\n\t\t{\n\t\t\tImGui::DragFloat2(\"Offset\", glm::value_ptr(component.Offset));\n\t\t\tImGui::DragFloat(\"Radius\", &component.Radius);\n\t\t\tImGui::DragFloat(\"Density\", &component.Density, 0.01f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Friction\", &component.Friction, 0.01f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Restitution\", &component.Restitution, 0.01f, 0.0f, 1.0f);\n\t\t\tImGui::DragFloat(\"Restitution Threshold\", &component.RestitutionThreshold, 0.01f, 0.0f);\n\t\t});\n\n\t\tDrawComponent<TextComponent>(\"Text Renderer\", entity, [](auto& component)\n\t\t{\n\t\t\tImGui::InputTextMultiline(\"Text String\", &component.TextString);\n\t\t\tImGui::ColorEdit4(\"Color\", glm::value_ptr(component.Color));\n\t\t\tImGui::DragFloat(\"Kerning\", &component.Kerning, 0.025f);\n\t\t\tImGui::DragFloat(\"Line Spacing\", &component.LineSpacing, 0.025f);\n\t\t});\n\n\t}\n\t\n\ttemplate<typename T>\n\tvoid SceneHierarchyPanel::DisplayAddComponentEntry(const std::string& entryName) {\n\t\tif (!m_SelectionContext.HasComponent<T>())\n\t\t{\n\t\t\tif (ImGui::MenuItem(entryName.c_str()))\n\t\t\t{\n\t\t\t\tm_SelectionContext.AddComponent<T>();\n\t\t\t\tImGui::CloseCurrentPopup();\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "Hazelnut/src/Panels/SceneHierarchyPanel.h",
    "content": "#pragma once\n\n#include \"Hazel/Core/Base.h\"\n#include \"Hazel/Scene/Scene.h\"\n#include \"Hazel/Scene/Entity.h\"\n\nnamespace Hazel {\n\n\tclass SceneHierarchyPanel\n\t{\n\tpublic:\n\t\tSceneHierarchyPanel() = default;\n\t\tSceneHierarchyPanel(const Ref<Scene>& scene);\n\n\t\tvoid SetContext(const Ref<Scene>& scene);\n\n\t\tvoid OnImGuiRender();\n\n\t\tEntity GetSelectedEntity() const { return m_SelectionContext; }\n\t\tvoid SetSelectedEntity(Entity entity);\n\tprivate:\n\t\ttemplate<typename T>\n\t\tvoid DisplayAddComponentEntry(const std::string& entryName);\n\t\n\t\tvoid DrawEntityNode(Entity entity);\n\t\tvoid DrawComponents(Entity entity);\n\tprivate:\n\t\tRef<Scene> m_Context;\n\t\tEntity m_SelectionContext;\n\t};\n\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# Hazel [![License](https://img.shields.io/github/license/TheCherno/Hazel.svg)](https://github.com/TheCherno/Hazel/blob/master/LICENSE)\n\n![Hazel](/Resources/Branding/Hazel_Logo_Text_Light_Square.png?raw=true \"Hazel\")\n\nHazel is primarily an early-stage interactive application and rendering engine for Windows. Currently not much is implemented, however (almost) everything inside this repository is being created within YouTube videos, found at [thecherno.com/engine](https://thecherno.com/engine). \n\n***\n\n## Getting Started\nVisual Studio 2017 or 2019 is recommended, Hazel is officially untested on other development environments whilst we focus on a Windows build.\n\n<ins>**1. Downloading the repository:**</ins>\n\nStart by cloning the repository with `git clone --recursive https://github.com/TheCherno/Hazel`.\n\nIf the repository was cloned non-recursively previously, use `git submodule update --init` to clone the necessary submodules.\n\n<ins>**2. Configuring the dependencies:**</ins>\n\n1. Run the [Setup.bat](https://github.com/TheCherno/Hazel/blob/master/scripts/Setup.bat) file found in `scripts` folder. This will download the required prerequisites for the project if they are not present yet.\n2. One prerequisite is the Vulkan SDK. If it is not installed, the script will execute the `VulkanSDK.exe` file, and will prompt the user to install the SDK.\n3. After installation, run the [Setup.bat](https://github.com/TheCherno/Hazel/blob/master/scripts/Setup.bat) file again. If the Vulkan SDK is installed properly, it will then download the Vulkan SDK Debug libraries. (This may take a longer amount of time)\n4. After downloading and unzipping the files, the [Win-GenProjects.bat](https://github.com/TheCherno/Hazel/blob/master/scripts/Win-GenProjects.bat) script file will get executed automatically, which will then generate a Visual Studio solution file for user's usage.\n\nIf changes are made, or if you want to regenerate project files, rerun the [Win-GenProjects.bat](https://github.com/TheCherno/Hazel/blob/master/scripts/Win-GenProjects.bat) script file found in `scripts` folder.\n\n***\n\n## The Plan\nThe plan for Hazel is two-fold: to create a powerful 3D engine, but also to serve as an education tool for teaching game engine design and architecture. Because of this the development inside this repository is rather slow, since everything has to be taught and implemented on-camera. There is a much more advanced version of the engine in a private repository called `Hazel-dev`, accessible to supporters on [Patreon](https://patreon.com/thecherno). The plan for this project is to mostly take already implemented code from the `Hazel-dev` repository and integrate it into this one, done within videos and supported by explanations.\n\n### Main features to come:\n- Fast 2D rendering (UI, particles, sprites, etc.)\n- High-fidelity Physically-Based 3D rendering (this will be expanded later, 2D to come first)\n- Support for Mac, Linux, Android and iOS\n    - Native rendering API support (DirectX, Vulkan, Metal)\n- Fully featured viewer and editor applications\n- Fully scripted interaction and behavior\n- Integrated 3rd party 2D and 3D physics engine\n- Procedural terrain and world generation\n- Artificial Intelligence\n- Audio system\n\n\n## Short term goals :\n*Note: this is subject to change at any time! Follow the roadmap over at [hazelengine.com/roadmap](http://hazelengine.com/roadmap).*\n\nBy the end 2020, we want to make a game using the Hazel game engine. Not like the time I made a game in one hour using the engine, but this time by using the proper tools that would be required to make a game with Hazel. This means we need to add a full 2D workflow:\n\n- Design the game scene by using Hazelnut, the Hazel editor,\n- Test the game inside Hazelnut, including the ability to save/load the created game,\n- Load and play the game inside Sandbox.\n\nWe want everyone to be able to play the game on all desktop platforms (Windows, Mac and Linux). When this is implemented, another attempt at the \"Creating a game in one hour using Hazel\" will be made to see how far the engine has become.\n\n[![Twitter](https://img.shields.io/badge/%40thecherno--blue.svg?style=social&logo=Twitter)](https://twitter.com/thecherno)\n[![Instagram](https://img.shields.io/badge/thecherno--red.svg?style=social&logo=Instagram)](https://www.instagram.com/thecherno)\n[![Youtube](https://img.shields.io/badge/TheChernoProject--red.svg?style=social&logo=youtube)](https://www.youtube.com/user/TheChernoProject)\n[![Discord](https://img.shields.io/badge/TheCherno%20Server--blue.svg?style=social&logo=Discord)](https://discord.gg/K2eSyQA)\n[![Patreon](https://img.shields.io/badge/%40thecherno--green.svg?style=social&logo=Patreon)](https://patreon.com/thecherno)\n"
  },
  {
    "path": "Sandbox/assets/fonts/opensans/LICENSE.txt",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Sandbox/assets/shaders/FlatColor.glsl",
    "content": "// Flat Color Shader\n\n#type vertex\n#version 330 core\n\nlayout(location = 0) in vec3 a_Position;\n\nuniform mat4 u_ViewProjection;\nuniform mat4 u_Transform;\n\nvoid main()\n{\n\tgl_Position = u_ViewProjection * u_Transform * vec4(a_Position, 1.0);\n}\n\n#type fragment\n#version 330 core\n\nlayout(location = 0) out vec4 color;\n\nuniform vec4 u_Color;\n\nvoid main()\n{\n\tcolor = u_Color;\n}"
  },
  {
    "path": "Sandbox/assets/shaders/Texture.glsl",
    "content": "// Basic Texture Shader\n\n#type vertex\n#version 450 core\n\nlayout(location = 0) in vec3 a_Position;\nlayout(location = 1) in vec4 a_Color;\nlayout(location = 2) in vec2 a_TexCoord;\nlayout(location = 3) in float a_TexIndex;\nlayout(location = 4) in float a_TilingFactor;\nlayout(location = 5) in int a_EntityID;\n\nlayout(std140, binding = 0) uniform Camera\n{\n\tmat4 u_ViewProjection;\n};\n\nstruct VertexOutput\n{\n\tvec4 Color;\n\tvec2 TexCoord;\n\tfloat TexIndex;\n\tfloat TilingFactor;\n};\n\nlayout (location = 0) out VertexOutput Output;\nlayout (location = 4) out flat int v_EntityID;\n\nvoid main()\n{\n\tOutput.Color = a_Color;\n\tOutput.TexCoord = a_TexCoord;\n\tOutput.TexIndex = a_TexIndex;\n\tOutput.TilingFactor = a_TilingFactor;\n\tv_EntityID = a_EntityID;\n\n\tgl_Position = u_ViewProjection * vec4(a_Position, 1.0);\n}\n\n#type fragment\n#version 450 core\n\nlayout(location = 0) out vec4 color;\nlayout(location = 1) out int color2;\n\nstruct VertexOutput\n{\n\tvec4 Color;\n\tvec2 TexCoord;\n\tfloat TexIndex;\n\tfloat TilingFactor;\n};\n\nlayout (location = 0) in VertexOutput Input;\nlayout (location = 4) in flat int v_EntityID;\n\nlayout (binding = 0) uniform sampler2D u_Textures[32];\n\nvoid main()\n{\n\tvec4 texColor = Input.Color;\n\n\tswitch(int(Input.TexIndex))\n\t{\n\t\tcase  0: texColor *= texture(u_Textures[ 0], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  1: texColor *= texture(u_Textures[ 1], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  2: texColor *= texture(u_Textures[ 2], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  3: texColor *= texture(u_Textures[ 3], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  4: texColor *= texture(u_Textures[ 4], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  5: texColor *= texture(u_Textures[ 5], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  6: texColor *= texture(u_Textures[ 6], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  7: texColor *= texture(u_Textures[ 7], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  8: texColor *= texture(u_Textures[ 8], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase  9: texColor *= texture(u_Textures[ 9], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 10: texColor *= texture(u_Textures[10], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 11: texColor *= texture(u_Textures[11], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 12: texColor *= texture(u_Textures[12], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 13: texColor *= texture(u_Textures[13], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 14: texColor *= texture(u_Textures[14], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 15: texColor *= texture(u_Textures[15], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 16: texColor *= texture(u_Textures[16], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 17: texColor *= texture(u_Textures[17], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 18: texColor *= texture(u_Textures[18], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 19: texColor *= texture(u_Textures[19], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 20: texColor *= texture(u_Textures[20], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 21: texColor *= texture(u_Textures[21], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 22: texColor *= texture(u_Textures[22], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 23: texColor *= texture(u_Textures[23], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 24: texColor *= texture(u_Textures[24], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 25: texColor *= texture(u_Textures[25], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 26: texColor *= texture(u_Textures[26], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 27: texColor *= texture(u_Textures[27], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 28: texColor *= texture(u_Textures[28], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 29: texColor *= texture(u_Textures[29], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 30: texColor *= texture(u_Textures[30], Input.TexCoord * Input.TilingFactor); break;\n\t\tcase 31: texColor *= texture(u_Textures[31], Input.TexCoord * Input.TilingFactor); break;\n\t}\n\tcolor = texColor;\n\n\tcolor2 = v_EntityID;\n}\n"
  },
  {
    "path": "Sandbox/imgui.ini",
    "content": "[Window][Debug##Default]\nPos=60,60\nSize=400,400\nCollapsed=0\n\n[Window][Test]\nPos=60,60\nSize=92,48\nCollapsed=0\n\n[Window][ImGui Demo]\nViewportPos=1404,134\nViewportId=0x080FC883\nSize=550,680\nCollapsed=0\n\n[Window][Settings]\nViewportPos=1214,617\nViewportId=0x1C33C293\nSize=432,366\nCollapsed=0\n\n[Window][DockSpace Demo]\nSize=1280,720\nCollapsed=0\n\n[Docking][Data]\n\n"
  },
  {
    "path": "Sandbox/premake5.lua",
    "content": "project \"Sandbox\"\n\tkind \"ConsoleApp\"\n\tlanguage \"C++\"\n\tcppdialect \"C++17\"\n\tstaticruntime \"off\"\n\n\ttargetdir (\"%{wks.location}/bin/\" .. outputdir .. \"/%{prj.name}\")\n\tobjdir (\"%{wks.location}/bin-int/\" .. outputdir .. \"/%{prj.name}\")\n\n\tfiles\n\t{\n\t\t\"src/**.h\",\n\t\t\"src/**.cpp\"\n\t}\n\n\tincludedirs\n\t{\n\t\t\"%{wks.location}/Hazel/vendor/spdlog/include\",\n\t\t\"%{wks.location}/Hazel/src\",\n\t\t\"%{wks.location}/Hazel/vendor\",\n\t\t\"%{IncludeDir.glm}\",\n\t\t\"%{IncludeDir.entt}\"\n\t}\n\n\tlinks\n\t{\n\t\t\"Hazel\"\n\t}\n\n\tfilter \"system:windows\"\n\t\tsystemversion \"latest\"\n\n\tfilter \"configurations:Debug\"\n\t\tdefines \"HZ_DEBUG\"\n\t\truntime \"Debug\"\n\t\tsymbols \"on\"\n\n\tfilter \"configurations:Release\"\n\t\tdefines \"HZ_RELEASE\"\n\t\truntime \"Release\"\n\t\toptimize \"on\"\n\n\tfilter \"configurations:Dist\"\n\t\tdefines \"HZ_DIST\"\n\t\truntime \"Release\"\n\t\toptimize \"on\"\n"
  },
  {
    "path": "Sandbox/src/ExampleLayer.cpp",
    "content": "#include \"ExampleLayer.h\"\n\n#include \"imgui/imgui.h\"\n\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/type_ptr.hpp>\n\nExampleLayer::ExampleLayer() \n\t: Layer(\"ExampleLayer\"), m_CameraController(1280.0f / 720.0f)\n{\n\tm_VertexArray = Hazel::VertexArray::Create();\n\n\tfloat vertices[3 * 7] = {\n\t\t-0.5f, -0.5f, 0.0f, 0.8f, 0.2f, 0.8f, 1.0f,\n\t\t 0.5f, -0.5f, 0.0f, 0.2f, 0.3f, 0.8f, 1.0f,\n\t\t 0.0f,  0.5f, 0.0f, 0.8f, 0.8f, 0.2f, 1.0f\n\t};\n\n\tHazel::Ref<Hazel::VertexBuffer> vertexBuffer = Hazel::VertexBuffer::Create(vertices, sizeof(vertices));\n\tHazel::BufferLayout layout = {\n\t\t{ Hazel::ShaderDataType::Float3, \"a_Position\" },\n\t\t{ Hazel::ShaderDataType::Float4, \"a_Color\" }\n\t};\n\tvertexBuffer->SetLayout(layout);\n\tm_VertexArray->AddVertexBuffer(vertexBuffer);\n\n\tuint32_t indices[3] = { 0, 1, 2 };\n\tHazel::Ref<Hazel::IndexBuffer> indexBuffer = Hazel::IndexBuffer::Create(indices, sizeof(indices) / sizeof(uint32_t));\n\tm_VertexArray->SetIndexBuffer(indexBuffer);\n\n\tm_SquareVA = Hazel::VertexArray::Create();\n\n\tfloat squareVertices[5 * 4] = {\n\t\t-0.5f, -0.5f, 0.0f, 0.0f, 0.0f,\n\t\t 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,\n\t\t 0.5f,  0.5f, 0.0f, 1.0f, 1.0f,\n\t\t-0.5f,  0.5f, 0.0f, 0.0f, 1.0f\n\t};\n\n\tHazel::Ref<Hazel::VertexBuffer> squareVB = Hazel::VertexBuffer::Create(squareVertices, sizeof(squareVertices));\n\tsquareVB->SetLayout({\n\t\t{ Hazel::ShaderDataType::Float3, \"a_Position\" },\n\t\t{ Hazel::ShaderDataType::Float2, \"a_TexCoord\" }\n\t\t});\n\tm_SquareVA->AddVertexBuffer(squareVB);\n\n\tuint32_t squareIndices[6] = { 0, 1, 2, 2, 3, 0 };\n\tHazel::Ref<Hazel::IndexBuffer> squareIB = Hazel::IndexBuffer::Create(squareIndices, sizeof(squareIndices) / sizeof(uint32_t));\n\tm_SquareVA->SetIndexBuffer(squareIB);\n\n\tstd::string vertexSrc = R\"(\n\t\t\t#version 330 core\n\t\t\t\n\t\t\tlayout(location = 0) in vec3 a_Position;\n\t\t\tlayout(location = 1) in vec4 a_Color;\n\n\t\t\tuniform mat4 u_ViewProjection;\n\t\t\tuniform mat4 u_Transform;\n\n\t\t\tout vec3 v_Position;\n\t\t\tout vec4 v_Color;\n\n\t\t\tvoid main()\n\t\t\t{\n\t\t\t\tv_Position = a_Position;\n\t\t\t\tv_Color = a_Color;\n\t\t\t\tgl_Position = u_ViewProjection * u_Transform * vec4(a_Position, 1.0);\t\n\t\t\t}\n\t\t)\";\n\n\tstd::string fragmentSrc = R\"(\n\t\t\t#version 330 core\n\t\t\t\n\t\t\tlayout(location = 0) out vec4 color;\n\n\t\t\tin vec3 v_Position;\n\t\t\tin vec4 v_Color;\n\n\t\t\tvoid main()\n\t\t\t{\n\t\t\t\tcolor = vec4(v_Position * 0.5 + 0.5, 1.0);\n\t\t\t\tcolor = v_Color;\n\t\t\t}\n\t\t)\";\n\n\tm_Shader = Hazel::Shader::Create(\"VertexPosColor\", vertexSrc, fragmentSrc);\n\n\tstd::string flatColorShaderVertexSrc = R\"(\n\t\t\t#version 330 core\n\t\t\t\n\t\t\tlayout(location = 0) in vec3 a_Position;\n\n\t\t\tuniform mat4 u_ViewProjection;\n\t\t\tuniform mat4 u_Transform;\n\n\t\t\tout vec3 v_Position;\n\n\t\t\tvoid main()\n\t\t\t{\n\t\t\t\tv_Position = a_Position;\n\t\t\t\tgl_Position = u_ViewProjection * u_Transform * vec4(a_Position, 1.0);\t\n\t\t\t}\n\t\t)\";\n\n\tstd::string flatColorShaderFragmentSrc = R\"(\n\t\t\t#version 330 core\n\t\t\t\n\t\t\tlayout(location = 0) out vec4 color;\n\n\t\t\tin vec3 v_Position;\n\t\t\t\n\t\t\tuniform vec3 u_Color;\n\n\t\t\tvoid main()\n\t\t\t{\n\t\t\t\tcolor = vec4(u_Color, 1.0);\n\t\t\t}\n\t\t)\";\n\n\tm_FlatColorShader = Hazel::Shader::Create(\"FlatColor\", flatColorShaderVertexSrc, flatColorShaderFragmentSrc);\n\n\tauto textureShader = m_ShaderLibrary.Load(\"assets/shaders/Texture.glsl\");\n\n\tm_Texture = Hazel::Texture2D::Create(\"assets/textures/Checkerboard.png\");\n\tm_ChernoLogoTexture = Hazel::Texture2D::Create(\"assets/textures/ChernoLogo.png\");\n\n\ttextureShader->Bind();\n\ttextureShader->SetInt(\"u_Texture\", 0);\n}\n\nvoid ExampleLayer::OnAttach()\n{\n}\n\nvoid ExampleLayer::OnDetach()\n{\n}\n\nvoid ExampleLayer::OnUpdate(Hazel::Timestep ts) \n{\n\t// Update\n\tm_CameraController.OnUpdate(ts);\n\n\t// Render\n\tHazel::RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 });\n\tHazel::RenderCommand::Clear();\n\n\tHazel::Renderer::BeginScene(m_CameraController.GetCamera());\n\n\tglm::mat4 scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.1f));\n\n\tm_FlatColorShader->Bind();\n\tm_FlatColorShader->SetFloat3(\"u_Color\", m_SquareColor);\n\n\tfor (int y = 0; y < 20; y++)\n\t{\n\t\tfor (int x = 0; x < 20; x++)\n\t\t{\n\t\t\tglm::vec3 pos(x * 0.11f, y * 0.11f, 0.0f);\n\t\t\tglm::mat4 transform = glm::translate(glm::mat4(1.0f), pos) * scale;\n\t\t\tHazel::Renderer::Submit(m_FlatColorShader, m_SquareVA, transform);\n\t\t}\n\t}\n\n\tauto textureShader = m_ShaderLibrary.Get(\"Texture\");\n\n\tm_Texture->Bind();\n\tHazel::Renderer::Submit(textureShader, m_SquareVA, glm::scale(glm::mat4(1.0f), glm::vec3(1.5f)));\n\tm_ChernoLogoTexture->Bind();\n\tHazel::Renderer::Submit(textureShader, m_SquareVA, glm::scale(glm::mat4(1.0f), glm::vec3(1.5f)));\n\n\t// Triangle\n\t// Hazel::Renderer::Submit(m_Shader, m_VertexArray);\n\n\tHazel::Renderer::EndScene();\n}\n\nvoid ExampleLayer::OnImGuiRender() \n{\n\tImGui::Begin(\"Settings\");\n\tImGui::ColorEdit3(\"Square Color\", glm::value_ptr(m_SquareColor));\n\tImGui::End();\n}\n\nvoid ExampleLayer::OnEvent(Hazel::Event& e) \n{\n\tm_CameraController.OnEvent(e);\n}\n"
  },
  {
    "path": "Sandbox/src/ExampleLayer.h",
    "content": "#pragma once\n\n#include \"Hazel.h\"\n\nclass ExampleLayer : public Hazel::Layer\n{\npublic:\n\tExampleLayer();\n\tvirtual ~ExampleLayer() = default;\n\n\tvirtual void OnAttach() override;\n\tvirtual void OnDetach() override;\n\n\tvoid OnUpdate(Hazel::Timestep ts) override;\n\tvirtual void OnImGuiRender() override;\n\tvoid OnEvent(Hazel::Event& e) override;\nprivate:\n\tHazel::ShaderLibrary m_ShaderLibrary;\n\tHazel::Ref<Hazel::Shader> m_Shader;\n\tHazel::Ref<Hazel::VertexArray> m_VertexArray;\n\n\tHazel::Ref<Hazel::Shader> m_FlatColorShader;\n\tHazel::Ref<Hazel::VertexArray> m_SquareVA;\n\n\tHazel::Ref<Hazel::Texture2D> m_Texture, m_ChernoLogoTexture;\n\n\tHazel::OrthographicCameraController m_CameraController;\n\tglm::vec3 m_SquareColor = { 0.2f, 0.3f, 0.8f };\n};\n\n"
  },
  {
    "path": "Sandbox/src/Sandbox2D.cpp",
    "content": "#include \"Sandbox2D.h\"\n#include <imgui/imgui.h>\n\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/type_ptr.hpp>\n\nSandbox2D::Sandbox2D()\n\t: Layer(\"Sandbox2D\"), m_CameraController(1280.0f / 720.0f), m_SquareColor({ 0.2f, 0.3f, 0.8f, 1.0f })\n{\n}\n\nvoid Sandbox2D::OnAttach()\n{\n\tHZ_PROFILE_FUNCTION();\n\n\tm_CheckerboardTexture = Hazel::Texture2D::Create(\"assets/textures/Checkerboard.png\");\n}\n\nvoid Sandbox2D::OnDetach()\n{\n\tHZ_PROFILE_FUNCTION();\n}\n\nvoid Sandbox2D::OnUpdate(Hazel::Timestep ts)\n{\n\tHZ_PROFILE_FUNCTION();\n\n\t// Update\n\tm_CameraController.OnUpdate(ts);\n\n\t// Render\n\tHazel::Renderer2D::ResetStats();\n\t{\n\t\tHZ_PROFILE_SCOPE(\"Renderer Prep\");\n\t\tHazel::RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 });\n\t\tHazel::RenderCommand::Clear();\n\t}\n\n\t{\n\t\tstatic float rotation = 0.0f;\n\t\trotation += ts * 50.0f;\n\n\t\tHZ_PROFILE_SCOPE(\"Renderer Draw\");\n\t\tHazel::Renderer2D::BeginScene(m_CameraController.GetCamera());\n\t\tHazel::Renderer2D::DrawRotatedQuad({ 1.0f, 0.0f }, { 0.8f, 0.8f }, -45.0f, { 0.8f, 0.2f, 0.3f, 1.0f });\n\t\tHazel::Renderer2D::DrawQuad({ -1.0f, 0.0f }, { 0.8f, 0.8f }, { 0.8f, 0.2f, 0.3f, 1.0f });\n\t\tHazel::Renderer2D::DrawQuad({ 0.5f, -0.5f }, { 0.5f, 0.75f }, m_SquareColor);\n\t\tHazel::Renderer2D::DrawQuad({ 0.0f, 0.0f, -0.1f }, { 20.0f, 20.0f }, m_CheckerboardTexture, 10.0f);\n\t\tHazel::Renderer2D::DrawRotatedQuad({ -2.0f, 0.0f, 0.0f }, { 1.0f, 1.0f }, rotation, m_CheckerboardTexture, 20.0f);\n\t\tHazel::Renderer2D::EndScene();\n\n\t\tHazel::Renderer2D::BeginScene(m_CameraController.GetCamera());\n\t\tfor (float y = -5.0f; y < 5.0f; y += 0.5f)\n\t\t{\n\t\t\tfor (float x = -5.0f; x < 5.0f; x += 0.5f)\n\t\t\t{\n\t\t\t\tglm::vec4 color = { (x + 5.0f) / 10.0f, 0.4f, (y + 5.0f) / 10.0f, 0.7f };\n\t\t\t\tHazel::Renderer2D::DrawQuad({ x, y }, { 0.45f, 0.45f }, color);\n\t\t\t}\n\t\t}\n\t\tHazel::Renderer2D::EndScene();\n\t}\n}\n\nvoid Sandbox2D::OnImGuiRender()\n{\n\tHZ_PROFILE_FUNCTION();\n\n\tImGui::Begin(\"Settings\");\n\n\tauto stats = Hazel::Renderer2D::GetStats();\n\tImGui::Text(\"Renderer2D Stats:\");\n\tImGui::Text(\"Draw Calls: %d\", stats.DrawCalls);\n\tImGui::Text(\"Quads: %d\", stats.QuadCount);\n\tImGui::Text(\"Vertices: %d\", stats.GetTotalVertexCount());\n\tImGui::Text(\"Indices: %d\", stats.GetTotalIndexCount());\n\n\tImGui::ColorEdit4(\"Square Color\", glm::value_ptr(m_SquareColor));\n\tImGui::End();\n}\n\nvoid Sandbox2D::OnEvent(Hazel::Event& e)\n{\n\tm_CameraController.OnEvent(e);\n}\n"
  },
  {
    "path": "Sandbox/src/Sandbox2D.h",
    "content": "#pragma once\n\n#include \"Hazel.h\"\n\nclass Sandbox2D : public Hazel::Layer\n{\npublic:\n\tSandbox2D();\n\tvirtual ~Sandbox2D() = default;\n\n\tvirtual void OnAttach() override;\n\tvirtual void OnDetach() override;\n\n\tvoid OnUpdate(Hazel::Timestep ts) override;\n\tvirtual void OnImGuiRender() override;\n\tvoid OnEvent(Hazel::Event& e) override;\nprivate:\n\tHazel::OrthographicCameraController m_CameraController;\n\t\n\t// Temp\n\tHazel::Ref<Hazel::VertexArray> m_SquareVA;\n\tHazel::Ref<Hazel::Shader> m_FlatColorShader;\n\n\tHazel::Ref<Hazel::Texture2D> m_CheckerboardTexture;\n\n\tglm::vec4 m_SquareColor = { 0.2f, 0.3f, 0.8f, 1.0f };\n};"
  },
  {
    "path": "Sandbox/src/SandboxApp.cpp",
    "content": "#include <Hazel.h>\n#include <Hazel/Core/EntryPoint.h>\n\n#include \"Sandbox2D.h\"\n#include \"ExampleLayer.h\"\n\nclass Sandbox : public Hazel::Application\n{\npublic:\n\tSandbox(const Hazel::ApplicationSpecification& specification)\n\t\t: Hazel::Application(specification)\n\t{\n\t\t// PushLayer(new ExampleLayer());\n\t\tPushLayer(new Sandbox2D());\n\t}\n\n\t~Sandbox()\n\t{\n\t}\n};\n\nHazel::Application* Hazel::CreateApplication(Hazel::ApplicationCommandLineArgs args)\n{\n\tApplicationSpecification spec;\n\tspec.Name = \"Sandbox\";\n\tspec.WorkingDirectory = \"../Hazelnut\";\n\tspec.CommandLineArgs = args;\n\n\treturn new Sandbox(spec);\n}\n"
  },
  {
    "path": "premake5.lua",
    "content": "include \"./vendor/premake/premake_customization/solution_items.lua\"\ninclude \"Dependencies.lua\"\n\nworkspace \"Hazel\"\n\tarchitecture \"x86_64\"\n\tstartproject \"Hazelnut\"\n\n\tconfigurations\n\t{\n\t\t\"Debug\",\n\t\t\"Release\",\n\t\t\"Dist\"\n\t}\n\n\tsolution_items\n\t{\n\t\t\".editorconfig\"\n\t}\n\n\tflags\n\t{\n\t\t\"MultiProcessorCompile\"\n\t}\n\noutputdir = \"%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}\"\n\ngroup \"Dependencies\"\n\tinclude \"vendor/premake\"\n\tinclude \"Hazel/vendor/Box2D\"\n\tinclude \"Hazel/vendor/GLFW\"\n\tinclude \"Hazel/vendor/Glad\"\n\tinclude \"Hazel/vendor/msdf-atlas-gen\"\n\tinclude \"Hazel/vendor/imgui\"\n\tinclude \"Hazel/vendor/yaml-cpp\"\ngroup \"\"\n\ngroup \"Core\"\n\tinclude \"Hazel\"\n\tinclude \"Hazel-ScriptCore\"\ngroup \"\"\n\ngroup \"Tools\"\n\tinclude \"Hazelnut\"\ngroup \"\"\n\ngroup \"Misc\"\n\tinclude \"Sandbox\"\ngroup \"\"\n"
  },
  {
    "path": "scripts/Setup.bat",
    "content": "@echo off\npython Setup.py\nPAUSE"
  },
  {
    "path": "scripts/Setup.py",
    "content": "\nimport os\nimport subprocess\nimport platform\n\nfrom SetupPython import PythonConfiguration as PythonRequirements\n\n# Make sure everything we need for the setup is installed\nPythonRequirements.Validate()\n\nfrom SetupPremake import PremakeConfiguration as PremakeRequirements\nfrom SetupVulkan import VulkanConfiguration as VulkanRequirements\nos.chdir('./../') # Change from devtools/scripts directory to root\n\npremakeInstalled = PremakeRequirements.Validate()\nVulkanRequirements.Validate()\n\nprint(\"\\nUpdating submodules...\")\nsubprocess.call([\"git\", \"submodule\", \"update\", \"--init\", \"--recursive\"])\n\nif (premakeInstalled):\n    if platform.system() == \"Windows\":\n        print(\"\\nRunning premake...\")\n        subprocess.call([os.path.abspath(\"./scripts/Win-GenProjects.bat\"), \"nopause\"])\n\n    print(\"\\nSetup completed!\")\nelse:\n    print(\"Hazel requires Premake to generate project files.\")\n\n"
  },
  {
    "path": "scripts/SetupPremake.py",
    "content": "import sys\nimport os\nfrom pathlib import Path\n\nimport Utils\n\nclass PremakeConfiguration:\n    premakeVersion = \"5.0.0-beta1\"\n    premakeZipUrls = f\"https://github.com/premake/premake-core/releases/download/v{premakeVersion}/premake-{premakeVersion}-windows.zip\"\n    premakeLicenseUrl = \"https://raw.githubusercontent.com/premake/premake-core/master/LICENSE.txt\"\n    premakeDirectory = \"./vendor/premake/bin\"\n\n    @classmethod\n    def Validate(cls):\n        if (not cls.CheckIfPremakeInstalled()):\n            print(\"Premake is not installed.\")\n            return False\n\n        print(f\"Correct Premake located at {os.path.abspath(cls.premakeDirectory)}\")\n        return True\n\n    @classmethod\n    def CheckIfPremakeInstalled(cls):\n        premakeExe = Path(f\"{cls.premakeDirectory}/premake5.exe\");\n        if (not premakeExe.exists()):\n            return cls.InstallPremake()\n\n        return True\n\n    @classmethod\n    def InstallPremake(cls):\n        permissionGranted = False\n        while not permissionGranted:\n            reply = str(input(\"Premake not found. Would you like to download Premake {0:s}? [Y/N]: \".format(cls.premakeVersion))).lower().strip()[:1]\n            if reply == 'n':\n                return False\n            permissionGranted = (reply == 'y')\n\n        premakePath = f\"{cls.premakeDirectory}/premake-{cls.premakeVersion}-windows.zip\"\n        print(\"Downloading {0:s} to {1:s}\".format(cls.premakeZipUrls, premakePath))\n        Utils.DownloadFile(cls.premakeZipUrls, premakePath)\n        print(\"Extracting\", premakePath)\n        Utils.UnzipFile(premakePath, deleteZipFile=True)\n        print(f\"Premake {cls.premakeVersion} has been downloaded to '{cls.premakeDirectory}'\")\n\n        premakeLicensePath = f\"{cls.premakeDirectory}/LICENSE.txt\"\n        print(\"Downloading {0:s} to {1:s}\".format(cls.premakeLicenseUrl, premakeLicensePath))\n        Utils.DownloadFile(cls.premakeLicenseUrl, premakeLicensePath)\n        print(f\"Premake License file has been downloaded to '{cls.premakeDirectory}'\")\n\n        return True\n"
  },
  {
    "path": "scripts/SetupPython.py",
    "content": "import sys\nimport subprocess\nimport importlib.util as importlib_util\n\nclass PythonConfiguration:\n    @classmethod\n    def Validate(cls):\n        if not cls.__ValidatePython():\n            return # cannot validate further\n\n        for packageName in [\"requests\"]:\n            if not cls.__ValidatePackage(packageName):\n                return # cannot validate further\n\n    @classmethod\n    def __ValidatePython(cls, versionMajor = 3, versionMinor = 3):\n        if sys.version is not None:\n            print(\"Python version {0:d}.{1:d}.{2:d} detected.\".format( \\\n                sys.version_info.major, sys.version_info.minor, sys.version_info.micro))\n            if sys.version_info.major < versionMajor or (sys.version_info.major == versionMajor and sys.version_info.minor < versionMinor):\n                print(\"Python version too low, expected version {0:d}.{1:d} or higher.\".format( \\\n                    versionMajor, versionMinor))\n                return False\n            return True\n\n    @classmethod\n    def __ValidatePackage(cls, packageName):\n        if importlib_util.find_spec(packageName) is None:\n            return cls.__InstallPackage(packageName)\n        return True\n\n    @classmethod\n    def __InstallPackage(cls, packageName):\n        permissionGranted = False\n        while not permissionGranted:\n            reply = str(input(\"Would you like to install Python package '{0:s}'? [Y/N]: \".format(packageName))).lower().strip()[:1]\n            if reply == 'n':\n                return False\n            permissionGranted = (reply == 'y')\n        \n        print(f\"Installing {packageName} module...\")\n        subprocess.check_call(['python', '-m', 'pip', 'install', packageName])\n\n        return cls.__ValidatePackage(packageName)\n\nif __name__ == \"__main__\":\n    PythonConfiguration.Validate()\n"
  },
  {
    "path": "scripts/SetupVulkan.py",
    "content": "import os\nimport sys\nimport subprocess\nfrom pathlib import Path\n\nimport Utils\n\nfrom io import BytesIO\nfrom urllib.request import urlopen\n\nclass VulkanConfiguration:\n    requiredVulkanVersion = \"1.3.\"\n    installVulkanVersion = \"1.3.216.0\"\n    vulkanDirectory = \"./Hazel/vendor/VulkanSDK\"\n\n    @classmethod\n    def Validate(cls):\n        if (not cls.CheckVulkanSDK()):\n            print(\"Vulkan SDK not installed correctly.\")\n            return\n            \n        if (not cls.CheckVulkanSDKDebugLibs()):\n            print(\"\\nNo Vulkan SDK debug libs found. Install Vulkan SDK with debug libs.\")\n            print(\"(see docs.hazelengine.com/GettingStarted for more info).\")\n            print(\"Debug configuration disabled.\")\n\n    @classmethod\n    def CheckVulkanSDK(cls):\n        vulkanSDK = os.environ.get(\"VULKAN_SDK\")\n        if (vulkanSDK is None):\n            print(\"\\nYou don't have the Vulkan SDK installed!\")\n            cls.__InstallVulkanSDK()\n            return False\n        else:\n            print(f\"\\nLocated Vulkan SDK at {vulkanSDK}\")\n\n        if (cls.requiredVulkanVersion not in vulkanSDK):\n            print(f\"You don't have the correct Vulkan SDK version! (Engine requires {cls.requiredVulkanVersion})\")\n            cls.__InstallVulkanSDK()\n            return False\n    \n        print(f\"Correct Vulkan SDK located at {vulkanSDK}\")\n        return True\n\n    @classmethod\n    def __InstallVulkanSDK(cls):\n        permissionGranted = False\n        while not permissionGranted:\n            reply = str(input(\"Would you like to install VulkanSDK {0:s}? [Y/N]: \".format(cls.installVulkanVersion))).lower().strip()[:1]\n            if reply == 'n':\n                return\n            permissionGranted = (reply == 'y')\n\n        vulkanInstallURL = f\"https://sdk.lunarg.com/sdk/download/{cls.installVulkanVersion}/windows/VulkanSDK-{cls.installVulkanVersion}-Installer.exe\"\n        vulkanPath = f\"{cls.vulkanDirectory}/VulkanSDK-{cls.installVulkanVersion}-Installer.exe\"\n        print(\"Downloading {0:s} to {1:s}\".format(vulkanInstallURL, vulkanPath))\n        Utils.DownloadFile(vulkanInstallURL, vulkanPath)\n        print(\"Running Vulkan SDK installer...\")\n        os.startfile(os.path.abspath(vulkanPath))\n        print(\"Re-run this script after installation!\")\n        quit()\n\n    @classmethod\n    def CheckVulkanSDKDebugLibs(cls):\n        vulkanSDK = os.environ.get(\"VULKAN_SDK\")\n        shadercdLib = Path(f\"{vulkanSDK}/Lib/shaderc_sharedd.lib\")\n        \n        return shadercdLib.exists()\n\nif __name__ == \"__main__\":\n    VulkanConfiguration.Validate()\n"
  },
  {
    "path": "scripts/Utils.py",
    "content": "import sys\nimport os\nimport winreg\n\nimport requests\nimport time\nimport urllib\n\nfrom zipfile import ZipFile\n\ndef GetSystemEnvironmentVariable(name):\n    key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, r\"System\\CurrentControlSet\\Control\\Session Manager\\Environment\")\n    try:\n        return winreg.QueryValueEx(key, name)[0]\n    except:\n        return None\n\ndef GetUserEnvironmentVariable(name):\n    key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, r\"Environment\")\n    try:\n        return winreg.QueryValueEx(key, name)[0]\n    except:\n        return None\n\ndef DownloadFile(url, filepath):\n    path = filepath\n    filepath = os.path.abspath(filepath)\n    os.makedirs(os.path.dirname(filepath), exist_ok=True)\n            \n    if (type(url) is list):\n        for url_option in url:\n            print(\"Downloading\", url_option)\n            try:\n                DownloadFile(url_option, filepath)\n                return\n            except urllib.error.URLError as e:\n                print(f\"URL Error encountered: {e.reason}. Proceeding with backup...\\n\\n\")\n                os.remove(filepath)\n                pass\n            except urllib.error.HTTPError as e:\n                print(f\"HTTP Error  encountered: {e.code}. Proceeding with backup...\\n\\n\")\n                os.remove(filepath)\n                pass\n            except:\n                print(f\"Something went wrong. Proceeding with backup...\\n\\n\")\n                os.remove(filepath)\n                pass\n        raise ValueError(f\"Failed to download {filepath}\")\n    if not(type(url) is str):\n        raise TypeError(\"Argument 'url' must be of type list or string\")\n\n    with open(filepath, 'wb') as f:\n        headers = {'User-Agent': \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"}\n        response = requests.get(url, headers=headers, stream=True)\n        total = response.headers.get('content-length')\n\n        if total is None:\n            f.write(response.content)\n        else:\n            downloaded = 0\n            total = int(total)\n            startTime = time.time()\n            for data in response.iter_content(chunk_size=max(int(total/1000), 1024*1024)):\n                downloaded += len(data)\n                f.write(data)\n                \n                try:\n                    done = int(50*downloaded/total) if downloaded < total else 50\n                    percentage = (downloaded / total) * 100 if downloaded < total else 100\n                except ZeroDivisionError:\n                    done = 50\n                    percentage = 100\n                elapsedTime = time.time() - startTime\n                try:\n                    avgKBPerSecond = (downloaded / 1024) / elapsedTime\n                except ZeroDivisionError:\n                    avgKBPerSecond = 0.0\n\n                avgSpeedString = '{:.2f} KB/s'.format(avgKBPerSecond)\n                if (avgKBPerSecond > 1024):\n                    avgMBPerSecond = avgKBPerSecond / 1024\n                    avgSpeedString = '{:.2f} MB/s'.format(avgMBPerSecond)\n                sys.stdout.write('\\r[{}{}] {:.2f}% ({})     '.format('█' * done, '.' * (50-done), percentage, avgSpeedString))\n                sys.stdout.flush()\n    sys.stdout.write('\\n')\n\ndef UnzipFile(filepath, deleteZipFile=True):\n    zipFilePath = os.path.abspath(filepath) # get full path of files\n    zipFileLocation = os.path.dirname(zipFilePath)\n\n    zipFileContent = dict()\n    zipFileContentSize = 0\n    with ZipFile(zipFilePath, 'r') as zipFileFolder:\n        for name in zipFileFolder.namelist():\n            zipFileContent[name] = zipFileFolder.getinfo(name).file_size\n        zipFileContentSize = sum(zipFileContent.values())\n        extractedContentSize = 0\n        startTime = time.time()\n        for zippedFileName, zippedFileSize in zipFileContent.items():\n            UnzippedFilePath = os.path.abspath(f\"{zipFileLocation}/{zippedFileName}\")\n            os.makedirs(os.path.dirname(UnzippedFilePath), exist_ok=True)\n            if os.path.isfile(UnzippedFilePath):\n                zipFileContentSize -= zippedFileSize\n            else:\n                zipFileFolder.extract(zippedFileName, path=zipFileLocation, pwd=None)\n                extractedContentSize += zippedFileSize\n            try:\n                done = int(50*extractedContentSize/zipFileContentSize)\n                percentage = (extractedContentSize / zipFileContentSize) * 100\n            except ZeroDivisionError:\n                done = 50\n                percentage = 100\n            elapsedTime = time.time() - startTime\n            try:\n                avgKBPerSecond = (extractedContentSize / 1024) / elapsedTime\n            except ZeroDivisionError:\n                avgKBPerSecond = 0.0\n            avgSpeedString = '{:.2f} KB/s'.format(avgKBPerSecond)\n            if (avgKBPerSecond > 1024):\n                avgMBPerSecond = avgKBPerSecond / 1024\n                avgSpeedString = '{:.2f} MB/s'.format(avgMBPerSecond)\n            sys.stdout.write('\\r[{}{}] {:.2f}% ({})     '.format('█' * done, '.' * (50-done), percentage, avgSpeedString))\n            sys.stdout.flush()\n    sys.stdout.write('\\n')\n\n    if deleteZipFile:\n        os.remove(zipFilePath) # delete zip file"
  },
  {
    "path": "scripts/Win-GenProjects.bat",
    "content": "@echo off\npushd %~dp0\\..\\\ncall vendor\\premake\\bin\\premake5.exe vs2022\npopd\nPAUSE\n"
  },
  {
    "path": "vendor/premake/premake5.lua",
    "content": "project \"Premake\"\n\tkind \"Utility\"\n\n\ttargetdir (\"%{wks.location}/bin/\" .. outputdir .. \"/%{prj.name}\")\n\tobjdir (\"%{wks.location}/bin-int/\" .. outputdir .. \"/%{prj.name}\")\n\n\tfiles\n\t{\n\t\t\"%{wks.location}/**premake5.lua\"\n\t}\n\n\tpostbuildmessage \"Regenerating project files with Premake5!\"\n\tpostbuildcommands\n\t{\n\t\t\"\\\"%{prj.location}bin/premake5\\\" %{_ACTION} --file=\\\"%{wks.location}premake5.lua\\\"\"\n\t}\n"
  },
  {
    "path": "vendor/premake/premake_customization/solution_items.lua",
    "content": "-- Implement the solution_items command for solution-scope files\nrequire('vstudio')\n\npremake.api.register {\n\tname = \"solution_items\",\n\tscope = \"workspace\",\n\tkind = \"list:string\",\n}\n\npremake.override(premake.vstudio.sln2005, \"projects\", function(base, wks)\n\tif wks.solution_items and #wks.solution_items > 0 then\n\t\tlocal solution_folder_GUID = \"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\" -- See https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs\n\t\tpremake.push(\"Project(\\\"\" .. solution_folder_GUID .. \"\\\") = \\\"Solution Items\\\", \\\"Solution Items\\\", \\\"{\" .. os.uuid(\"Solution Items:\" .. wks.name) .. \"}\\\"\")\n\t\tpremake.push(\"ProjectSection(SolutionItems) = preProject\")\n\n\t\tfor _, path in ipairs(wks.solution_items) do\n\t\t\tpremake.w(path .. \" = \" .. path)\n\t\tend\n\n\t\tpremake.pop(\"EndProjectSection\")\n\t\tpremake.pop(\"EndProject\")\n\tend\n\tbase(wks)\nend)\n"
  }
]